Spring boot对数据库的连接-从JDBC到连接池的改造

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到连接池的改造。

你可能感兴趣的:(Spring boot对数据库的连接-从JDBC到连接池的改造)