概述

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