Druid是由阿里巴巴开发的一个数据库连接池,还有日志监控功能,挺好奇的,试着用一下。
- pom添加相关依赖,这里使用JdbcTemplate简单测试,所以添加spring-boot-starter-jdbc
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
- 分别创建两个数据源的属性文件druid.properties和druid1.properties
druid.properties#druid.properties
spring.datasource.druid.one.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=true spring.datasource.druid.one.username=root spring.datasource.druid.one.password=Shi18740961619? spring.datasource.druid.one.driver-class-name=com.mysql.jdbc.Driver spring.datasource.druid.one.initial-size=5 spring.datasource.druid.one.max-active=50 spring.datasource.druid.one.min-idle=1 spring.datasource.druid.one.max-wait=60000 spring.datasource.druid.one.pool-prepared-statements=false #spring.datasource.druid.one.max-pool-prepared-statement-per-connection-size= #spring.datasource.druid.one.max-open-prepared-statements= #和上面的等价 spring.datasource.druid.one.validation-query=SELECT 1 FROM DUAL #spring.datasource.druid.one.validation-query-timeout= spring.datasource.druid.one.test-on-borrow=true spring.datasource.druid.one.test-on-return=false spring.datasource.druid.one.test-while-idle=false spring.datasource.druid.one.time-between-eviction-runs-millis=60000 spring.datasource.druid.one.min-evictable-idle-time-millis=300000 #spring.datasource.druid.one.max-evictable-idle-time-millis= spring.datasource.druid.one.filters=stat,wall,slf4j
druid1.properties
#druid1.properties
spring.datasource.druid.two.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=true spring.datasource.druid.two.username=root spring.datasource.druid.two.password=Shi18740961619? spring.datasource.druid.two.driver-class-name=com.mysql.jdbc.Driver spring.datasource.druid.two.initial-size=5 spring.datasource.druid.two.max-active=50 spring.datasource.druid.two.min-idle=1 spring.datasource.druid.two.max-wait=60000 spring.datasource.druid.two.pool-prepared-statements=false #spring.datasource.druid.two.max-pool-prepared-statement-per-connection-size= #spring.datasource.druid.two.max-open-prepared-statements= #和上面的等价 spring.datasource.druid.two.validation-query=SELECT 1 FROM DUAL #spring.datasource.druid.two.validation-query-timeout= spring.datasource.druid.two.test-on-borrow=true spring.datasource.druid.two.test-on-return=false spring.datasource.druid.two.test-while-idle=false spring.datasource.druid.two.time-between-eviction-runs-millis=60000 spring.datasource.druid.two.min-evictable-idle-time-millis=300000 #spring.datasource.druid.two.max-evictable-idle-time-millis= spring.datasource.druid.two.filters=stat,wall,slf4j - 分别创建两个数据源的配置文件(例如:DruidConfiguration.java和DruidConfiguration1.java)。因为用的是JdbcTemplate,所以需要在不同的文件中注册不同的JdbcTemplate。如果使用Mybatis,使用@MapperScan,扫描不同的Mapper,再分别注册SqlSessionFactory,Mybatis自动查找相应的数据源。
DruidConfiguration.java@Configuration @PropertySource(value = "classpath:properties/druid.properties") public class DruidConfiguration { @Primary @Bean("druidDataSourceOne") @ConfigurationProperties(prefix = "spring.datasource.druid.one") public DataSource druidDataSourceOne(){ return DruidDataSourceBuilder.create().build(); } @Bean public JdbcTemplate jdbcTemplate(){ return new JdbcTemplate(druidDataSourceOne()); } /** * 注册一个StatViewServlet * @return */ @Bean public ServletRegistrationBean druidStatViewServlet(){ //org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册. ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*"); //添加初始化参数:initParams //白名单: servletRegistrationBean.addInitParameter("allow","127.0.0.1"); //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page. servletRegistrationBean.addInitParameter("deny","192.168.1.73"); //登录查看信息的账号密码. servletRegistrationBean.addInitParameter("loginUsername","admin"); servletRegistrationBean.addInitParameter("loginPassword","123456"); //是否能够重置数据. servletRegistrationBean.addInitParameter("resetEnable","false"); return servletRegistrationBean; } /** * 注册一个:filterRegistrationBean * @return */ @Bean public FilterRegistrationBean druidStatFilter(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); //添加过滤规则. filterRegistrationBean.addUrlPatterns("/*"); //添加不需要忽略的格式信息. filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterRegistrationBean; } }
DruidConfiguration1.java
@Configuration @PropertySource(value = "classpath:properties/druid1.properties") public class DruidConfiguration1 { @Bean("druidDataSourceTwo") @ConfigurationProperties(prefix = "spring.datasource.druid.two") public DataSource druidDataSourceTwo(){ return DruidDataSourceBuilder.create().build(); } /** * 注册一个StatViewServlet * @return */ @Bean public JdbcTemplate jdbcTemplate1(){ return new JdbcTemplate(druidDataSourceTwo()); } @Bean public ServletRegistrationBean druidStatViewServlet1(){ //org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册. ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*"); //添加初始化参数:initParams //白名单: servletRegistrationBean.addInitParameter("allow","127.0.0.1"); //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page. servletRegistrationBean.addInitParameter("deny","192.168.1.73"); //登录查看信息的账号密码. servletRegistrationBean.addInitParameter("loginUsername","admin"); servletRegistrationBean.addInitParameter("loginPassword","123456"); //是否能够重置数据. servletRegistrationBean.addInitParameter("resetEnable","false"); return servletRegistrationBean; } /** * 注册一个:filterRegistrationBean * @return */ @Bean public FilterRegistrationBean druidStatFilter1(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); //添加过滤规则. filterRegistrationBean.addUrlPatterns("/*"); //添加不需要忽略的格式信息. filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterRegistrationBean; } }
- 测试不同的数据源。
@RestController public class HelloController { private static final Logger logger = LoggerFactory.getLogger(HelloController.class); @Autowired private JdbcTemplate jdbcTemplate; @Autowired private JdbcTemplate jdbcTemplate1; @RequestMapping("/hello") public List<Map<String, Object>> hello(){ List<Map<String, Object>> list = jdbcTemplate.queryForList("SELECT * FROM tb_user ", new Object[]{}); return list; } @RequestMapping("/hello1") public List<Map<String, Object>> hello1(){ List<Map<String, Object>> list = jdbcTemplate1.queryForList("SELECT * FROM TB_PRODUCT ", new Object[]{}); return list; } }
- 查看监控界面 http://localhost:8080/druid 可以看到有两个数据源