数据库

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

2019-06-08  本文已影响0人  刘明_d589

目前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需要多条,则需要使用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;
上一篇下一篇

猜你喜欢

热点阅读