zoukankan      html  css  js  c++  java
  • 2019-05-21 SpringBoot集成UReport2

    1. 引入依赖

    <dependency>
        <groupId>com.bstek.ureport</groupId>
        <artifactId>ureport2-console</artifactId>
        <version>2.2.9</version>
    </dependency>

    2. 配置Servlet

    1 @Bean
    2 public ServletRegistrationBean<Servlet> ureport2Servlet(){
    3   return new ServletRegistrationBean<Servlet>(new UReportServlet(), "/ureport/*");
    4 }

    注意:"/ureport/*" 是固定的

    3. 配置自己的报表存储方式(我的是数据库存储)

      1    /**
      2      *    配置报表存储
      3      * @return
      4      */
      5     @Bean
      6     public ReportProvider reportProvider() {
      7         final String NAME = "数据库存储";
      8         final boolean DISABLED = false;
      9         final String PREFIX = "DB:"; // 不能为空,否则报表存取不了
     10         
     11         return new ReportProvider() {
     12 
     13             @Override
     14             public InputStream loadReport(String file) {
     15             
     16 
     17                 Template one = templateService.getOne(new QueryWrapper<Template>().eq(false, "name", file));//("fName", file));
     18             
     19                 if(one!=null) {
     20                     return new ByteArrayInputStream(one.getTemplate()); 
     21                 }
     22             
     23                 return null;
     24             }
     25 
     26             @Override
     27             public void deleteReport(String file) {                
     28                 
     29                 templateService.remove(new QueryWrapper<Template>().eq(false,"name", file));
     30                 
     31             }
     32 
     33             @Override
     34             public List<ReportFile> getReportFiles() {
     35                 List<Template> list = templateService.list();
     36                 List<ReportFile> reportList = new ArrayList<>();
     37                 
     38                 for (Template template : list) {
     39                     reportList.add(new ReportFile(getCorrectName(template.getName()), 
                              Date.from(template.getCreateTime().atZone(ZoneId.systemDefault()).toInstant())));
    40 } 41 return reportList ; 42 } 43 44 @Override 45 public void saveReport(String file, String content){ 46 47 Template one = templateService.getOne(new QueryWrapper<Template>().eq(false,"name", file)); 48 49 if(one == null){ 50 51 one = new Template(); 52 one.setName(file); 53 54 one.setTemplate(content.getBytes()); 55 56 one.setCreateTime(LocalDateTime.now()); 57 58 User user = (User) SecurityUtils.getSubject().getPrincipal(); 59 one.setCreator(user.getUsername()); 60 one.setCreatorID(user.getUserId()+""); 61 62 templateService.save(one); 63 }else{ 64 one.setTemplate(content.getBytes()); 65 one.setCreateTime(LocalDateTime.now()); 66 templateService.updateById(one); 67 } 68 69 70 } 71 72 /** 73 * 报表存储命名 74 */ 75 @Override 76 public String getName() { 77 78 return NAME; 79 } 80 81 @Override 82 public boolean disabled() { 83 return DISABLED; 84 } 85 86 @Override 87 public String getPrefix() { 88 89 return PREFIX; 90 } 91 92 private String getCorrectName(String name){ 93 if(name.startsWith(PREFIX)){ 94 name = name.substring(PREFIX.length(), name.length()); 95 } 96 return name; 97 } 98 99 100 }; 101 }

    注意:① 前缀不能为空;② 获得模板列表时需要把前缀去掉;因为删除和加载模板时会自动加上前缀,假如原本前缀是DB:,那么进行加载和删除时,报表前缀则会变成 DB:DB:

    4. 隐藏系统自带的保存配置

    从UReport2核心包中取出ureport.properties放到类根路径下,修改配置

    1 ## UReport2 配置文件
    2 
    3 ureport.disableHttpSessionReportCache=true
    4 
    5 #UReport2默认报表存储
    6 ureport.disableFileProvider=true
    7 ureport.fileStoreDir=d:/ureportfiles
    8 
    9 ureport.debug=true

    5. 配置内置数据源

     1     /**
     2      *     配置数据源
     3      * @param dataSource
     4      * @return
     5      */
     6     @Bean
     7     public BuildinDatasource buildinSystemDatasource(@Qualifier("systemDataSource")DataSource dataSource) {
     8         return new BuildinDatasource() {
     9 
    10             @Override
    11             public String name() {
    12                 return "System";
    13             }
    14 
    15             @Override
    16             public Connection getConnection() {
    17                 try {
    18                     return dataSource.getConnection();
    19                 } catch (SQLException e) {
    20                     
    21                     e.printStackTrace();
    22                 }
    23                 return null;
    24 
    25             }
    26             
    27         };
    28     }
    29     
    30     /**
    31      *     配置数据源
    32      * @param dataSource
    33      * @return
    34      */
    35     @Bean
    36     public BuildinDatasource buildinDemo1Datasource(@Qualifier("demo1DataSource")DataSource dataSource) {
    37         return new BuildinDatasource() {
    38             
    39             @Override
    40             public String name() {
    41                 return "Demo1";
    42             }
    43             
    44             @Override
    45             public Connection getConnection() {
    46                 try {
    47                     return dataSource.getConnection();
    48                 } catch (SQLException e) {
    49                     
    50                     e.printStackTrace();
    51                 }
    52                 return null;
    53                 
    54             }
    55             
    56         };
    57     }

    6. UReport2的使用可以参考

    网页文档:https://www.w3cschool.cn/ureport/?

    视频教程:http://pan.baidu.com/s/1boWTxF5,密码:98hj

  • 相关阅读:
    设计模式详解(一):单例模式
    6大设计原则详解(二)
    6大设计原则详解(一)
    Java线程池的创建详解
    Jquery实现表单动态加减、ajax表单提交
    Java并发编程:浅析几种线程安全模型 [转]
    Java并发之线程状态及Thread常用方法
    Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore[转]
    Java并发之synchronized使用
    Java分布式锁之数据库方式实现
  • 原文地址:https://www.cnblogs.com/WongHugh/p/10903195.html
Copyright © 2011-2022 走看看