SpringBoot数据库连接池--Hikaricp
介绍:
Hikaricp号称宇宙最强的DB连接池,目前Spring2.0默认使用的数据库连接池。
mvn依赖:
<!-- spring2.0默认使用Hikaricp无须添加maven依赖,之前版本需要添加以下依赖 --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.1.0</version> </dependency>
去掉Tomcat连接池
<!-- JDBC连接数据库,因为要用HikariCP,所以需要将SpringBoot中的tomcat-jdbc排除 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> </exclusion> </exclusions> </dependency> <!-- HikariCP 连接池依赖,从父依赖获取相应版本号 --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <!-- <scope>runtime</scope> --> </dependency>
.propertise配置文件添加配置信息
#MYSQL连接信息 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test1?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull spring.datasource.username=root spring.datasource.password=***123456 spring.datasource.driverClassName=com.mysql.jdbc.Driver #连接池配置 spring.datasource.max-idle=10 spring.datasource.max-active=15 spring.datasource.max-lifetime=86430000 spring.datasource.log-abandoned=true spring.datasource.remove-abandoned=true spring.datasource.remove-abandoned-timeout=60 spring.datasource.initialize=false spring.datasource.sqlScriptEncoding=UTF-8
获取配置数据源:
@Configuration public class DataSourcesConfig { @Value("${spring.datasource.url}") private String dataSourceUrl; @Value("${spring.datasource.username}") private String user; @Value("${spring.datasource.password}") private String password; @Bean public DataSource getDataSources(){ HikariDataSource dataSource = (HikariDataSource) DataSourceBuilder.create().type(HikariDataSource.class).build() dataSource.addDataSourceProperty("cachePrepStmts", true); //是否自定义配置,为true时下面两个参数才生效 dataSource.addDataSourceProperty("prepStmtCacheSize", 250); //连接池大小默认25,官方推荐250-500 dataSource.addDataSourceProperty("prepStmtCacheSqlLimit", 2048); //单条语句最大长度默认256,官方推荐2048 dataSource.addDataSourceProperty("useServerPrepStmts", true); //新版本MySQL支持服务器端准备,开启能够得到显著性能提升 dataSource.addDataSourceProperty("useLocalSessionState", true); dataSource.addDataSourceProperty("useLocalTransactionState", true); dataSource.addDataSourceProperty("rewriteBatchedStatements", true); dataSource.addDataSourceProperty("cacheResultSetMetadata", true); dataSource.addDataSourceProperty("cacheServerConfiguration", true); dataSource.addDataSourceProperty("elideSetAutoCommits", true); dataSource.addDataSourceProperty("maintainTimeStats", false); dataSource.addDataSourceProperty("cacheCallableStmts", true); dataSource.addDataSourceProperty("alwaysSendSetIsolation", false); return dataSource; } }
Hikari多数据源配置中遇到的坑:
1:properties配置文件中命名问题:
#普通的URL配置 spring.datasource.slave.url=jdbc:mysql://localhost:3306/recom_data?characterEncoding=UTF-8&useSSL=false #Hikari中URL命名如果不按照这个格式命名Hikari不识别会报错:when specifying driverClassName, jdbcUrl must also be specified
spring.datasource.hmaster.jdbcUrl=jdbc:mysql://localhost:3306/recom_plat?characterEncoding=UTF-8&useSSL=false
2:当测试多个数据库连接池(如Druid/Hikari等),并且通过以上xml方式引入Hikari数据库连接池并排除了Tomcat-jdbc之后使用DataSourcesBuilder.create().build()不适用.type()指定数据库连接池类型,则默认使用Hikari,需要修改配置文件的命名。
参考:
https://www.cnblogs.com/hongdada/p/9360155.html
https://www.jianshu.com/p/15b846107a7c