本篇文章是为了整理
常用的数据库连接池使用的是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 出现下图则是配置成功