spring boot 快速开发 -连接池配置

本篇文章是为了整理

常用的数据库连接池使用的是druid,可以配置监控 。spring boot 2 默认的连接池是HikariCP ,号称是性能最好的连接池。
(1)HikariCP 的配置
HikariCP是springboot2默认连接池。可以只使用必要配置,由spring boot 自动映射。

#必要配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver     
spring.datasource.url=jdbc:mysql://localhost:3306/database?useSSL=false(不适用ssl)
spring.datasource.username=
spring.datasource.password=

#常用配置
spring.datasource.hikari.auto-commit=true  #控制从池返回的连接的默认自动提交行为。默认值:true
spring.datasource.hikari.connection-timeout= #等待来自池的连接的最大毫秒数。默认值:30000(30秒)
spring.datasource.hikari.idle-timeout= #允许连接在池中闲置的最长时间。 默认值:600000(10分钟)
spring.datasource.hikari.max-lifetime= #连接的最大生存期。默认值:1800000(30分钟)
spring.datasource.hikari.connection-test-query= #确认与数据库的连接仍然存在之前将要执行的查询。(不支持JDBC4时设置)
spring.datasource.hikari.minimum-idle= #最小空闲连接数  默认值:10
spring.datasource.hikari.maximum-pool-size= #允许达到的最大大小,包括空闲和正在使用的连接。默认值:10

#不常用配置
spring.datasource.hikari.metric-registry= #允许使用的Codahale/Dropwizard 实例MetricRegistry来记录各种指标
spring.datasource.hikari.health-check-registry= #允许使用的Codahale/Dropwizard 的实例HealthCheckRegistry来报告当前的健康信息。
spring.datasource.hikari.pool-name= #连接池的名称
spring.datasource.hikari.initialization-fail-timeout= #连接失败时尝试时间
spring.datasource.hikari.isolate-internal-queries= #是否在其自己的事务中隔离内部池查询。该属性仅适用于autoCommit禁用的情况。 默认值:false
spring.datasource.hikari.allow-pool-suspension= #是否可以通过JMX暂停和恢复。默认值:false
spring.datasource.hikari.read-only= #获取的连接是否处于只读模式。默认值:false
spring.datasource.hikari.register-mbeans= #是否注册JMX管理Bean(“MBeans”)。 默认值:false
spring.datasource.hikari.catalog= #设置默认目录为支持目录的概念数据库。默认:驱动程序默认
spring.datasource.hikari.connection-init-sql= #每个新连接创建后,将其添加到池中之前执行该语句。默认值:无
spring.datasource.hikari.driver-class-name= #较老的驱动程序还必须指定。默认值:无
spring.datasource.hikari.transaction-isolation= #从池返回的连接的默认事务隔离级别。默认:驱动程序指定。
spring.datasource.hikari.validation-timeout= #连接测试活动的最长时间。默认值:5000
spring.datasource.hikari.leak-detection-threshold= #连接泄漏检测。默认值:0
spring.datasource.hikari.dataSource= #直接设置DataSource池的实例,而不是通过反射来构造。 默认值:无
spring.datasource.hikari.schema= #设置的默认模式。默认:驱动程序默认
spring.datasource.hikari.threadFactory= #设置用于创建池使用的所有线程的实例。 默认值:无
spring.datasource.hikari.scheduledExecutor= #设置用于各种内部计划任务的实例。默认值:无

(2)Druid的配置
Druid 由手动配置构造类,因为要配置监控页面。同时必须配置日志。

spring.datasource.url=jdbc:mysql://localhost:3006/database?useSSL=false
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource 
## 下面为连接池的补充设置
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
spring.datasource.maxWait=60000 # 配置获取连接等待超时的时间
spring.datasource.timeBetweenEvictionRunsMillis=60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000 # 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.filters=stat,wall,log4j # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.logSlowSql=true #是否显示sql语句
@Configuration #(在启动时加载)
public class DruidConfig {

    @Value("${spring.datasource.url}")
    private String dbUrl;

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;

    @Value("${spring.datasource.initialSize}")
    private int initialSize;

    @Value("${spring.datasource.minIdle}")
    private int minIdle;

    @Value("${spring.datasource.maxActive}")
    private int maxActive;

    @Value("${spring.datasource.maxWait}")
    private int maxWait;

    @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
    private int timeBetweenEvictionRunsMillis;

    @Value("${spring.datasource.minEvictableIdleTimeMillis}")
    private int minEvictableIdleTimeMillis;

    @Value("${spring.datasource.validationQuery}")
    private String validationQuery;

    @Value("${spring.datasource.testWhileIdle}")
    private boolean testWhileIdle;

    @Value("${spring.datasource.testOnBorrow}")
    private boolean testOnBorrow;

    @Value("${spring.datasource.testOnReturn}")
    private boolean testOnReturn;

    @Value("${spring.datasource.filters}")
    private String filters;

    @Value("${spring.datasource.logSlowSql}")
    private String logSlowSql;

    @Bean
    public ServletRegistrationBean druidServlet() {
        ServletRegistrationBean reg = new ServletRegistrationBean();
        reg.setServlet(new StatViewServlet());
        reg.addUrlMappings("/druid/*");
        reg.addInitParameter("loginUsername", username);
        reg.addInitParameter("loginPassword", password);
        reg.addInitParameter("logSlowSql", logSlowSql);
        return reg;
    }

    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        filterRegistrationBean.addInitParameter("profileEnable", "true");
        return filterRegistrationBean;
    }
    
    private static final Logger log = LoggerFactory.getLogger(DruidDataSource.class);
    
    @Bean
    public DataSource druidDataSource() {
        DruidDataSource datasource = new DruidDataSource();
        datasource.setUrl(dbUrl);
        datasource.setUsername(username);
        datasource.setPassword(password);
        datasource.setDriverClassName(driverClassName);
        datasource.setInitialSize(initialSize);
        datasource.setMinIdle(minIdle);
        datasource.setMaxActive(maxActive);
        datasource.setMaxWait(maxWait);
        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
        datasource.setValidationQuery(validationQuery);
        datasource.setTestWhileIdle(testWhileIdle);
        datasource.setTestOnBorrow(testOnBorrow);
        datasource.setTestOnReturn(testOnReturn);
        try {
            datasource.setFilters(filters);
        } catch (SQLException e) {
            log.error("druid configuration initialization filter", e);
        }
        return datasource;
    }
}

启动以后访问该链接:http://localhost:8085/druid/login.html 出现下图则是配置成功
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
dynamic-datasource-spring-boot-starter 是一个 Spring Boot 的数据源动态切换组件,可以方便地实现多数据源的配置和切换。它支持常见的连接池,如 HikariCP、Tomcat JDBC 等。 以下是使用 dynamic-datasource-spring-boot-starter 配置连接池的步骤: 1. 添加依赖 在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>2.5.1</version> </dependency> ``` 2. 配置数据源 在 application.yml 文件中配置数据源,例如: ```yml spring: datasource: dynamic: primary: db1 datasource: db1: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10 username: root password: root db2: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/db2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10 username: root password: root ``` 此处配置了两个数据源 db1 和 db2,其中 db1 为主数据源。 3. 配置连接池 在 application.yml 文件中配置连接池,例如: ```yml spring: datasource: type: com.zaxxer.hikari.HikariDataSource hikari: maximum-pool-size: 10 minimum-idle: 5 idle-timeout: 60000 connection-timeout: 30000 auto-commit: true pool-name: HikariCP max-lifetime: 1800000 connection-test-query: SELECT 1 ``` 此处使用了 HikariCP 连接池配置连接池的一些参数,如最大连接数、最小空闲连接数、连接空闲超时时间等。 4. 注册数据源 在 Spring Boot 启动类中注册数据源,例如: ```java @SpringBootApplication @MapperScan(basePackages = "com.example.mapper") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean @ConfigurationProperties("spring.datasource.hikari") public DataSource dataSource() { return DataSourceBuilder.create().type(HikariDataSource.class).build(); } @Bean public DataSourceProvider dataSourceProvider(DataSource dataSource) { return new SingleDataSourceProvider(dataSource); } @Bean public DynamicDataSourceCreator dynamicDataSourceCreator(DataSourceProvider dataSourceProvider) { DynamicDataSourceCreator creator = new DynamicDataSourceCreator(); creator.setDataSourceProvider(dataSourceProvider); return creator; } @Bean public DynamicDataSourceRegister dynamicDataSourceRegister(DynamicDataSourceCreator dynamicDataSourceCreator) { DynamicDataSourceRegister register = new DynamicDataSourceRegister(); register.setDynamicDataSourceCreator(dynamicDataSourceCreator); return register; } } ``` 此处使用了 HikariCP 连接池,使用了 @ConfigurationProperties 注解将连接池配置读取到 DataSource 中,然后将 DataSource 注册到 DynamicDataSourceProvider 中,最后通过 DynamicDataSourceCreator 和 DynamicDataSourceRegister 将数据源注册到 Spring 中。 至此,我们已经完成了 dynamic-datasource-spring-boot-starter 的连接池配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值