Spring boot对数据库的连接-从JDBC到连接池的改造
2019-03-16 本文已影响0人
小孩真笨
Spring Boot中通过原生的datasource配置,可以默认创建一个JDBC的连接。不过,由于并发的问题,当连接数量上来的时候,就会产生性能问题。因此,创建一个连接池来管理数据库连接,在Spring Boot的使用中还是经常会遇到的问题。那么,怎么进行连接池的改造呢?
要集成连接池,主要完成以下几步:
1 配置文件中增加连接池相关配置
找到Spring Boot的application.yml
文件,在之前的jdbc配置后面,增加连接池的相关设置。示例如下:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
password: 密码
url: jdbc:mysql://IP地址:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
username: root
hikari:
pool-name: 连接池的名字
minimum-idle: 8
idle-timeout: 180000
maximum-pool-size: 20
auto-commit: true
max-lifetime: 1800000
connection-timeout: 30000
connection-test-query: SELECT 1
type: com.zaxxer.hikari.HikariDataSource
从上面可以看出,连接池的设置,需要和JDBC的用户名密码等属性平级。
2 增加连接池的类并解析application.yml中的配置,并设置Bean
此时需要对这个类进行@Component
注解,创建一个bean。这个bean注入一个能够解析application中配置的连接池信息。一个典型的例子如下:
@Component
@Data
@Slf4j
public class DatasourcePool {
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.url}")
private String jdbcUrl;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.type}")
private String type;
@Value("${spring.datasource.hikari.pool-name}")
private String poolName;
@Value("${spring.datasource.hikari.minimum-idle}")
private int MinimumIdle;
@Value("${spring.datasource.hikari.idle-timeout}")
private int IdleTimeout;
@Value("${spring.datasource.hikari.maximum-pool-size}")
private int MaximumPoolSize;
@Value("${spring.datasource.hikari.auto-commit}")
private Boolean AutoCommit;
@Value("${spring.datasource.hikari.max-lifetime}")
private int MaxLifetime;
@Value("${spring.datasource.hikari.connection-timeout}")
private int ConnectionTimeout;
@Value("${spring.datasource.hikari.connection-test-query}")
private String ConnectionTestQuery;
@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setJdbcUrl(jdbcUrl);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setPoolName(poolName);
dataSource.setMinimumIdle(MinimumIdle);
dataSource.setIdleTimeout(IdleTimeout);
dataSource.setMaximumPoolSize(MaximumPoolSize);
dataSource.setAutoCommit(AutoCommit);
dataSource.setMaxLifetime(MaxLifetime);
dataSource.setConnectionTimeout(ConnectionTimeout);
dataSource.setConnectionTestQuery(ConnectionTestQuery);
return dataSource;
}
}
3 在Spring Boot的启动处增加对连接池解析bean的扫描
在Spring Boot中,应用通过main函数进行启动。启动类上可以配置注解,使应用在加载时直接进行bean的扫描和注入。使用方式如下:
@ComponentScan(basePackages = { "org.xxx.xxx.bean" })
完成上述三步后,即实现了对JDBC到连接池的改造。