美文网首页数据库
2019-06-03 springboot结合dbcp2配置多条

2019-06-03 springboot结合dbcp2配置多条

作者: 刘明_d589 | 来源:发表于2019-06-08 22:43 被阅读0次

    目前Spring Boot支持的数据源包括tomcat, hikari,dbcp2。

    SpringBoot 1 默认使用的连接池是tomcat数据源,
    SpringBoot2 默认使用的连接池是hikari数据源。
    SpringBoot 会根据依赖存在与否按优先级选择数据源。
    以SpringBoot2 为例来说就是,找到hikari数据源则使用hikari,否则查找tomcat数据源、如果tomcat不存在、就查找dbcp2数据源

    1.class com.zaxxer.hikari.HikariDataSource connectionInitSql
    2.class org.apache.tomcat.jdbc.pool.DataSource initSQL
    3.class org.apache.commons.dbcp2.BasicDataSource connectionInitSqls

    上述数据源中,tomcat和hikari数据库连接池的init sql配置都是 connection-init-sql,dbcp2支是 connection-init-sqls 配置。
    经过测试:

    • init-SQL 配置的sql不支持多条,否者报错
    • connection-init-sql 配置的sql不支持多条,否者报错
    • connection-init-sqls 配置的sql会被解析成数组,保存到

    如果init-sql需要多条,则需要使用dbcp2,配置示例如下:
    先上正确配置:

    spring:
      datasource:
        verify:
          url: jdbc:mysql://localhost:3306/test
          username: test
          password: test1234
          driver-class-name: com.mysql.jdbc.Driver
          test-while-idle: true
          validation-query: SELECT 1
          connection-init-sqls:
            - set sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
            - set names utf8mb4;
    

    上面是使用了yml的数组配置方式,对yml不熟悉的同学可能会在一条字符串中配置 多条sql,如下图所示,在SpringBoot中如果没有特殊定义类型解析器。SpringBoot会使用逗号","来分割字符串,对于上例
    “sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';”
    sql中即包含逗号的情况,回导致sql被分割成多条sql,执行出错。只有当sql中不包含逗号时才可以正常执行。所以建议使用YML的数组配置方式进行配置。
    具体参考解析方式参考 org.springframework.boot.convert.DelimitedStringToCollectionConverter#convert(java.lang.String, org.springframework.core.convert.TypeDescriptor, org.springframework.core.convert.TypeDescriptor)

    YML的对各种数据类型的配置方式可参考另一篇文章: (待补充)

    spring:
      datasource:
        verify:
          url: jdbc:mysql://localhost:3306/test
          username: test
          password: test1234
          driver-class-name: com.mysql.jdbc.Driver
          test-while-idle: true
          validation-query: SELECT 1
          connection-init-sqls:  set names utf8mb4;,select 1;
    

    相关文章

      网友评论

        本文标题:2019-06-03 springboot结合dbcp2配置多条

        本文链接:https://www.haomeiwen.com/subject/lwmhxctx.html