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

 

posted @ 2019-06-25 10:02  杏仁拌饭  阅读(613)  评论(0)    收藏  举报