前面已经写过一篇druid的初识http://blog.csdn.net/u013218587/article/details/70212422,现在再来整理一下druid在spring boot中的使用,spring本身不支持druid数据源,需要自己定义,下面是定义过程,准备工作去掉之前的datasource(c3p0,dbcp,dbcp2等),如果你想配置多数据源,除外,
关于如何配置多数据源,自行百度。
为了更清晰我把druid相关放在一个包下面,有三个类
package com.pillar.controller.druid; import com.alibaba.druid.pool.DruidDataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; import java.sql.SQLException; @Configuration @MapperScan(basePackages = ClusterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "pillarSqlSessionFactory") public class ClusterDataSourceConfig { static final String PACKAGE = "com.pillar.core"; private static final String MAPPER_LOCATION = "classpath:sqlmap/**/*.xml"; private static final String MYBATIS_CONFIG = "classpath:mybatis-config.xml"; @Value("${spring.datasource.url}") private String url; @Value("${spring.datasource.username}") private String user; @Value("${spring.datasource.password}") private String password; @Value("${spring.datasource.driverClassName}") private String driverClass; @Value("${spring.datasource.initialSize}") private int initialSize; @Value("${spring.datasource.minIdle}") private int minIdle; @Value("${spring.datasource.maxActive}") private int maxActive; @Value("${spring.datasource.filters}") private String filters; @Bean(name = "pillarDataSource") @Primary public DataSource pillarDataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driverClass); dataSource.setUrl(url); dataSource.setUsername(user); dataSource.setPassword(password); dataSource.setMaxActive(maxActive); dataSource.setMinIdle(minIdle); dataSource.setInitialSize(initialSize); try { dataSource.setFilters(filters); } catch (SQLException e) { e.printStackTrace(); } dataSource.setConnectionProperties("config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKbkwDlvul62rcbK0gMZQrOXhXzH5G+3g8rFJMCA1IsXtYZOdJSG1f56smZPmfFulIFxxqh20BLa1VBU9k+7fkECAwEAAQ=="); return dataSource; } @Bean(name = "pillarTransactionManager") @Primary public DataSourceTransactionManager pillarTransactionManager() { return new DataSourceTransactionManager(pillarDataSource()); } @Bean(name = "pillarSqlSessionFactory") @Primary public SqlSessionFactory pillarSqlSessionFactory(@Qualifier("pillarDataSource") DataSource pillarDataSource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(pillarDataSource); sessionFactory.setConfigLocation(new PathMatchingResourcePatternResolver().getResource(ClusterDataSourceConfig.MYBATIS_CONFIG)); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(ClusterDataSourceConfig.MAPPER_LOCATION)); return sessionFactory.getObject(); } }
package com.pillar.controller.druid; import com.alibaba.druid.support.http.WebStatFilter; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebInitParam; @WebFilter(filterName="druidWebStatFilter",urlPatterns="/*", initParams={ @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")//忽略资源 } ) public class DruidStatFilter extends WebStatFilter { }
package com.pillar.controller.druid; import com.alibaba.druid.support.http.StatViewServlet; import javax.servlet.annotation.WebInitParam; import javax.servlet.annotation.WebServlet; @WebServlet(urlPatterns="/druid/*", initParams={ @WebInitParam(name="allow",value=""),// IP白名单(没有配置或者为空,则允许所有访问) @WebInitParam(name="deny",value="192.168.1.73"),// IP黑名单 (存在共同时,deny优先于allow) @WebInitParam(name="loginUsername",value="admin"),// 用户名 @WebInitParam(name="loginPassword",value="123456"),// 密码 @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能 }) public class DruidStatViewServlet extends StatViewServlet { private static final long serialVersionUID = -2688872071445249539L; }
分别是定义druid,过滤静态文件(让druid/index.html可以访问),设置监控页面权限
最后在启动入口加入
@ServletComponentScan
/** * Created by bin on 2017/3/27. */ @SpringBootApplication @EnableScheduling @ServletComponentScan//druid页面访问必须加这个 public class SpringBootTopApplication { public static void main(String[] args) { SpringApplication.run(SpringBootTopApplication.class,args); } }
启动项目。浏览器输入
http://localhost:9090/druid/login.html,即可进入登录页面,输入上面设置的用户名密码即可
线上测试http://www.chengxuyuantoutiao.com/ 打开网页进入swagger-api下面的"程序猿"里面操作api,"系统监控"里面查看监控信息