• SPL-在SpringBoot中的集成(三)


    需要的MAVEN依赖

    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.3.2.RELEASE</version>
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>com.vaadin.external.google</groupId>
                        <artifactId>android-json</artifactId>
                    </exclusion>
                </exclusions>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
    
    
            <dependency>
                <groupId>com.scudata.esproc</groupId>
                <artifactId>esproc</artifactId>
                <version>20220601</version>
            </dependency>
            <dependency>
                <groupId>org.hsqldb</groupId>
                <artifactId>hsqldb</artifactId>
                <version>2.2.8</version>
            </dependency>
            <dependency>
                <groupId>com.ibm.icu</groupId>
                <artifactId>icu4j</artifactId>
                <version>60.3</version>
            </dependency>
    
            <dependency>
                <groupId>org.lucee</groupId>
                <artifactId>jdom</artifactId>
                <version>1.1.3</version>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.10</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>5.2.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.xmlbeans</groupId>
                <artifactId>xmlbeans</artifactId>
                <version>5.1.0</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>2.0.6.RELEASE</version>
                </plugin>
            </plugins>
        </build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88

    SPL无配置文件版

    这个版本不依赖raqsoftConfig.xml配置文件,数据库需要我们手动自己添加进去
    在这里插入图片描述

    application.yml

    server:
      port: 9546
    
    
    spring:
      datasource:
        ds1:
          driverclassName: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://192.168.118.129:3306/voidme?useCursorFetch=true&useSSL=false
          username: root
          password: root
          dbType: MYSQL
        ds2:
          driverclassName: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://192.168.118.129:3306/sso?useCursorFetch=true&useSSL=false
          username: root
          password: root
          dbType: MYSQL
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    JdbcConfig

    @Configuration
    public class JdbcConfig {
        @Bean("local_mysql_1")
        @ConfigurationProperties("spring.datasource.ds1")
        public DataSource datasourceMysql1() {
            return DruidDataSourceBuilder.create().build();
        }
    
        @Bean("local_mysql_2")
        @ConfigurationProperties("spring.datasource.ds2")
        public DataSource datasourceMysql2() {
            return DruidDataSourceBuilder.create().build();
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    AppInitListener

    @Component
    public class AppInitListener extends ApplicationObjectSupport implements ApplicationRunner {
        @Override
        public void run(ApplicationArguments args) throws Exception {
            Map<String, DataSource> beansOfType = getApplicationContext().getBeansOfType(DataSource.class);
    
            for (Map.Entry<String, DataSource> stringDataSourceEntry : beansOfType.entrySet()) {
                DruidDataSource value = (DruidDataSource)stringDataSourceEntry.getValue();
                int dbType = DBTypes.getDBType(value.getDbType());
                SpringDBSessionFactory.create(stringDataSourceEntry.getKey(), dbType);
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    SplAppliction

    @SpringBootApplication(exclude={DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, })
    @ComponentScan({"com.scudata.*","com.splparer.*"})
    public class SplAppliction {
    
    
        public static void main(String[] args) {
            SpringApplication.run(SplAppliction.class, args);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    SplTest

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = SplAppliction.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
    public class SplTest {
        @SneakyThrows
        @Test
        public void contextLoads() {
    //        FileInputStream fileInputStream=new FileInputStream(new File("C:\\Users\\huanmin\\Desktop\\spl\\p.spl"));
    //        PgmCellSet pgmCellSet = AppUtil.readSPL(fileInputStream);  //文本文件
    //        PgmCellSet pgmCellSet = AppUtil.readSPL("C:\\Users\\huanmin\\Desktop\\spl\\p.spl");  //文本文件
            PgmCellSet pgmCellSet = AppUtil.readCellSet("C:\\Users\\huanmin\\Desktop\\spl\\p.dfx");  //dfx, sqlx 二进制文件
            Context context = new Context(); //上下文,参数..设置
            pgmCellSet.setContext(context);
            Object execute = pgmCellSet.execute();
            System.out.println(execute);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    p.splx
    在这里插入图片描述
    结果如下:
    在这里插入图片描述

    SPL配置文件版

    这个版本支持的功能比较全,直接调用SPL驱动,需要搭配raqsoftConfig.xml配置文件进行
    在这里插入图片描述

    在这里插入图片描述

    raqsoftConfig.xml 文件可在本地windows客户端中-选项-环境里自行配置配置好后,就会将内容同步到本地安装目录下esProc\config\raqsoftConfig.xml里 更全配置信息

    <?xml version="1.0" encoding="UTF-8"?>
    <Config Version="3">
        <Runtime>
            <DBList>
                <DB name="local_mysql_1">
                    <property name="url"
                              value="jdbc:mysql://192.168.118.129:3306/voidme?useCursorFetch=true&amp;useSSL=false"/>
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="type" value="10"/>
                    <property name="user" value="root"/>
                    <property name="password" value="root"/>
                    <property name="batchSize" value="0"/>
                    <property name="autoConnect" value="true"/>
                    <property name="useSchema" value="false"/>
                    <property name="addTilde" value="false"/>
                    <property name="needTransContent" value="false"/>
                    <property name="needTransSentence" value="false"/>
                    <property name="caseSentence" value="false"/>
                </DB>
            </DBList>
            <Esproc>
                <charSet>UTF-8</charSet>
    
    
    <!--            配置spl脚本文件寻址路径,可以设置多个路径,以“;”隔开。 spl文件的路径也可以放在应用项目的类路径中,加载文件的顺序高于寻址路径-->
                <splPathList>
                    <splPath>C:\Users\huanmin\Desktop\spl</splPath>
                </splPathList>
                <dateFormat>yyyy-MM-dd</dateFormat>
                <timeFormat>HH:mm:ss</timeFormat>
                <dateTimeFormat>yyyy-MM-dd HH:mm:ss</dateTimeFormat>
                <mainPath/>
                <!-- 临时文件(dfx,txt...)存储路径,可以使用绝对路径,当设置路径为相对路径时,将设置在主路径下,相对路径不能以“/”或“\”开头-->
                <tempPath>resources/temp</tempPath>
                <bufSize>65536</bufSize>
                <localHost/>
                <localPort>0</localPort>
                <parallelNum/>
                <cursorParallelNum/>
                <simpleTableBlockSize>1048576</simpleTableBlockSize>
                <nullStrings>nan,null,n/a</nullStrings>
                <fetchCount/>
                <extLibsPath/>
            </Esproc>
            <Logger>
                <!--            <Level>DEBUG</Level>-->
                <Level>INFO</Level>
            </Logger>
        </Runtime>
        <JDBC>
    
    <!--   在JDBC中配置了远程服务器之后,再用Java代码调用JDBC时,执行计算时会优先在本地处理,如果本地无法执行,如找不到数据文件等,才会在远程服务器端执行计算。如果希望将计算交给服务器执行,可以在连接串中添加参数?onlyServer=true 
    详细说明:    http://d.raqsoft.com.cn:6999/esproc/tutorial/jdbcdyycfwq.html    
     -->
            <!--        <Units>-->
            <!--            <Unit>106.12.174.220:8281</Unit>-->
            <!--            <Unit>127.0.0.1:8281</Unit>-->
            <!--        </Units>-->
    
            <!-- 初始化使用的dfx文件,在系统初始化时先执行指定文件-->
            <Init>
                <!--            <SPL>C:\Users\huanmin\Desktop\spl\init.dfx</SPL>-->
            </Init>
        </JDBC>
    </Config>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67

    application.yml

    server:
      port: 9546
    
    
    spring:
      datasource:
          driverclassName: com.esproc.jdbc.InternalDriver
          url: jdbc:esproc:local://
          username: root
          password: root
          minIdle: 5
          maxActive: 100
          initialSize: 10
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    JdbcConfig

    @Configuration
    public class JdbcConfig {
    
        @Bean
        @ConfigurationProperties("spring.datasource")
        public DataSource datasource() {
            return DruidDataSourceBuilder.create().build();
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    SplController

    @RestController
    @RequestMapping("/spl")
    public class SplController {
    
        @Autowired
        private SplServiceImpl service;
        @GetMapping("")
        public void execute() {
            service.contextLoads();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    SplService

    public interface    SplService {
        public void contextLoads() ;
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    SplServiceImpl

    @Component
    public class SplServiceImpl implements SplService {
        @Autowired
        private DataSource dataSource;
    
        @SneakyThrows
        @Override
        public void contextLoads() {
            long l = System.currentTimeMillis();
            //获得数据库连接
            Connection connection = dataSource.getConnection();
            CallableStatement st = connection.prepareCall("call p()");
            //执行存储过程
            st.execute();
            //获取结果集
            ResultSet rs = st.getResultSet();
            SplUtil.show(rs);
            connection.close();
            long l1 = System.currentTimeMillis();
            System.out.println("======================:"+String.valueOf(l1-l));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    SplUtil

    public class SplUtil {
    
    
        //显示表格值内容
        public static void show(  ResultSet rs) throws SQLException {
            //简单处理结果集,将结果集中的字段名与数据输出
            ResultSetMetaData rsmd = rs.getMetaData();
            int colCount = rsmd.getColumnCount();
            for ( int  c = 1; c <= colCount;c++) {
                String title = rsmd.getColumnName(c);
                if( c > 1 ) {
                    System.out.print("\t");
                }
                else {
                    System.out.print("\n");
                }
                System.out.print(title);
            }
    
            while (rs.next()) {
                for(int c = 1; c<= colCount; c++) {
                    if ( c > 1 ) {
                        System.out.print("\t");
                    }
                    else {
                        System.out.print("\n");
                    }
                    Object o = rs.getObject(c);
                    System.out.print(o);
                }
            }
    
            System.out.println();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    SplAppliction

    @SpringBootApplication(exclude={DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, })
    @ComponentScan({"com.scudata.*","com.spl.*"})
    public class SplAppliction {
    
    
        public static void main(String[] args) {
            SpringApplication.run(SplAppliction.class, args);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    注意

    1. java调用SPL,网格中的代码都会被执行一遍, 但是return只会获取第一个
    2. 在spl中通过connect进行使用数据库连接,使用完毕后就要关闭,否则就会一直占用连接 ,当然还可以connect@x 方式来调用
    3. java 调用SPL第一次会加载类库等, 稍微有点慢大概需要300毫秒, 之后就快了也就几毫秒

    在这里插入图片描述

    点赞 -收藏-关注-便于以后复习和收到最新内容
    有其他问题在评论区讨论-或者私信我-收到会在第一时间回复
    感谢,配合,希望我的努力对你有帮助^_^

    免责声明:本文部分素材来源于网络,版权归原创者所有,如存在文章/图片/音视频等使用不当的情况,请随时私信联系我。
  • 相关阅读:
    Docker笔记-docker搭建nginx及移植
    【Web前端面试】葵花宝典(2022版本)——Vue篇
    优维产品最佳实践:主机合规性检查
    Nginx的优化和防盗链
    windows安装多个版本jdk
    一对多映射处理
    前端开发学习指南
    SpringCloud复习:(2)@LoadBalanced注解的工作原理
    『Halcon与C#混合编程』004_窗体交互Drawing
    使用Winform开发自定义用户控件,以及实现相关自定义事件的处理
  • 原文地址:https://blog.csdn.net/weixin_45203607/article/details/125573412