spring-boot 集成Mysql和Druid连接池
概述
spring-boot默认提供了数据库和数据库连接池,按照官方文档简单配置即可。若要自定义,需要修改一些配置,本文着重描述一下spring-boot如何集成mysql和阿里的druid数据库连接池。
开始
本文环境
- jdk:1.7
- tomcat:7.0.55
- spring-boot:1.2.3.RELEASE
修改application.properties文件
修改spring-boot默认配置文件application.properties,加入一下内容(根据实际情况修改):
1# 数据库配置
2spring.mysql.datasource.driverClassName=com.mysql.jdbc.Driver
3spring.mysql.datasource.url=jdbc:mysql://127.0.0.1:3306/message?useUnicode=true&characterEncoding=utf8
4spring.mysql.datasource.username=root
5spring.mysql.datasource.password=
6# 连接池配置
7spring.mysql.datasource.filters=stat
8spring.mysql.datasource.maxActive=5
9spring.mysql.datasource.initialSize=1
10spring.mysql.datasource.maxWait=60000
11spring.mysql.datasource.minIdle=1
12spring.mysql.datasource.maxIdle=3
13spring.mysql.datasource.timeBetweenEvictionRunsMillis=60000
14spring.mysql.datasource.minEvictableIdleTimeMillis=300000
15spring.mysql.datasource.validationQuery=SELECT 'x'
16spring.mysql.datasource.testWhileIdle=true
17spring.mysql.datasource.testOnBorrow=false
18spring.mysql.datasource.testOnReturn=false
19spring.mysql.datasource.maxOpenPreparedStatements=10
20spring.mysql.datasource.removeAbandoned=true
21spring.mysql.datasource.removeAbandonedTimeout=1800
22spring.mysql.datasource.logAbandoned=true
druid数据库连接池的具体配置请参考官方文档并根据项目的实际情况修改。
新建DataSourceConfig.java配置类
为数据库配置单独新建一个类,内容如下:
1@Configuration
2public class DataSourceConfig {
3
4 @Value("${spring.mysql.datasource.driverClassName}")
5 private String driverClassName;
6 @Value("${spring.mysql.datasource.url}")
7 private String url;
8 @Value("${spring.mysql.datasource.username}")
9 private String username;
10 @Value("${spring.mysql.datasource.password}")
11 private String password;
12 @Value("${spring.mysql.datasource.filters}")
13 private String filters;
14 @Value("${spring.mysql.datasource.maxActive}")
15 private int maxActive;
16 @Value("${spring.mysql.datasource.initialSize}")
17 private int initialSize;
18 @Value("${spring.mysql.datasource.maxWait}")
19 private long maxWait;
20 @Value("${spring.mysql.datasource.minIdle}")
21 private int minIdle;
22 @Value("${spring.mysql.datasource.timeBetweenEvictionRunsMillis}")
23 private long timeBetweenEvictionRunsMillis;
24 @Value("${spring.mysql.datasource.minEvictableIdleTimeMillis}")
25 private long minEvictableIdleTimeMillis;
26 @Value("${spring.mysql.datasource.validationQuery}")
27 private String validationQuery;
28 @Value("${spring.mysql.datasource.testWhileIdle}")
29 private boolean testWhileIdle;
30 @Value("${spring.mysql.datasource.testOnBorrow}")
31 private boolean testOnBorrow;
32 @Value("${spring.mysql.datasource.testOnReturn}")
33 private boolean testOnReturn;
34 @Value("${spring.mysql.datasource.removeAbandoned}")
35 private boolean removeAbandoned;
36 @Value("${spring.mysql.datasource.logAbandoned}")
37 private boolean logAbandoned;
38 @Value("${spring.mysql.datasource.maxOpenPreparedStatements}")
39 private int maxOpenPreparedStatements;
40 @Value("${spring.mysql.datasource.removeAbandonedTimeout}")
41 private int removeAbandonedTimeout;
42
43 /**
44 * druid 数据库连接池
45 * @return
46 */
47 @Bean(name = "mysqlDS")
48 @Qualifier("mysqlDS")
49 @Primary
50 public DataSource dataSource() {
51 DruidDataSource dataSource = new DruidDataSource();
52 dataSource.setUrl(url);
53 dataSource.setUsername(username);
54 dataSource.setPassword(password);
55 dataSource.setDriverClassName(driverClassName);
56 dataSource.setMaxActive(maxActive);
57 dataSource.setInitialSize(initialSize);
58 dataSource.setMaxWait(maxWait);
59 dataSource.setMinIdle(minIdle);
60 dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
61 dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
62 dataSource.setValidationQuery(validationQuery);
63 dataSource.setTestWhileIdle(testWhileIdle);
64 dataSource.setTestOnBorrow(testOnBorrow);
65 dataSource.setTestOnReturn(testOnReturn);
66 dataSource.setMaxOpenPreparedStatements(maxOpenPreparedStatements);
67 dataSource.setRemoveAbandoned(removeAbandoned);
68 dataSource.setRemoveAbandonedTimeout(removeAbandonedTimeout);
69 dataSource.setLogAbandoned(logAbandoned);
70 try {
71 dataSource.setFilters(filters);
72 } catch (SQLException e) {
73 return dataSource;
74 }
75 return dataSource;
76 }
77
78 /**
79 * druid 监控页面
80 * @return
81 */
82 @Bean
83 public ServletRegistrationBean druidServletBean() {
84 ServletRegistrationBean registrationBean = new ServletRegistrationBean();
85 StatViewServlet statViewServlet = new StatViewServlet();
86 registrationBean.addInitParameter("loginUsername", "admin");
87 registrationBean.addInitParameter("loginPassword", "admin");
88 registrationBean.addInitParameter("resetEnable", "true");
89 registrationBean.addUrlMappings("/druid/*");
90 registrationBean.setServlet(statViewServlet);
91 return registrationBean;
92 }
93
94 /**
95 * druid 资源监控过滤
96 * @return
97 */
98 @Bean
99 public FilterRegistrationBean druidWebStatFilter() {
100 FilterRegistrationBean registrationBean = new FilterRegistrationBean();
101 WebStatFilter webStatFilter = new WebStatFilter();
102 registrationBean.addInitParameter("sessionStatMaxCount", "2000");
103 registrationBean.addInitParameter("sessionStatEnable", "true");
104 registrationBean.addInitParameter("principalSessionName", "session_user_key");
105 registrationBean.addInitParameter("profileEnable", "true");
106 registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,*.jsp,/druid/*");
107 registrationBean.setFilter(webStatFilter);
108 registrationBean.addUrlPatterns("/*");
109 return registrationBean;
110 }
111
112}
配置了druid监控页面的登录页,用户名密码为admin。
访问druid监控页面
启动应用,我tomcat的端口是8089,没有设置项目名称,因此我访问的是http://localhost:8089/druid/login.html。一般而言,druid监控登录页面的入口为:http://{IP地址}:{端口}/{项目名}/druid/login.html


