自定义druid数据配置源
1、导入pom依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.17</version>
</dependency>
2、编写配置类
通过localhost:8081/druid访问druid来监控http://localhost:8081/getCount请求
@Configuration
public class MyConfig {
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource myDataSource() throws SQLException {
DruidDataSource druidDataSource = new DruidDataSource();
//绑定SQL监控和SQL防火墙功能已经开启日志
// druidDataSource.setFilters("stat, wall, log4j");
// druidDataSource.setUrl();
return new DruidDataSource();
}
/**
* 配置druid的监控页功能
**/
@Bean
public ServletRegistrationBean statViewServlet(){
StatViewServlet viewServlet = new StatViewServlet();
//通过http://localhost:8081/druid访问druid
ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean(viewServlet, "/druid/*");
// //加入druid登录账号和密码
// registrationBean.addInitParameter("loginUsername", "123");
// registrationBean.addInitParameter("loginPassword", "123");
return registrationBean;
}
/**
* 配置druid的web应用功能
**/
@Bean
public FilterRegistrationBean webStatFilter(){
WebStatFilter webStatFilter = new WebStatFilter();
FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean(webStatFilter);
//拦截所有请求
registrationBean.setUrlPatterns(Arrays.asList("/*"));
//排除某些请求
registrationBean.addInitParameter("exclusions", "*.js, *.css, /druid/*");
return registrationBean;
}
}
通过源码可知数据库连接池的配置,是自己容器中没有DataSource才自动配置的,底层配置好的连接池是:HikariDataSource
@Configuration(proxyBeanMethods = false)
@Conditional(PooledDataSourceCondition.class)
@ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
@Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class,
DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class })
protected static class PooledDataSourceConfiguration
3、通过@ConfigurationProperties注解配置类的数据源会覆盖原有jdbc数据源,也可以通过在配置类中druidDataSource.setUrl()等方法来配置账号密码地址等
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
password: root
url: jdbc:mysql://127.0.0.1:3306/bbb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true
username: root
filters: stat, wall, log4j
4、请求路径
@Controller
public class UserController {
@Autowired
private JdbcTemplate jdbcTemplate;
@ResponseBody
@RequestMapping(value = "/getCount", method = RequestMethod.GET)
public String getCount(){
Long l = jdbcTemplate.queryForObject("select count(*) from t_book", Long.class);
return l.toString();
}
}
实现图如下
druid官方github地址
https://github.com/alibaba/druid
start整合druid数据源
1、导入pom依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
自动配置项 DruidDataSourceAutoConfigure源码
@Configuration
@ConditionalOnClass({DruidDataSource.class})
@AutoConfigureBefore({DataSourceAutoConfiguration.class})
@EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class})
@Import({DruidSpringAopConfiguration.class, DruidStatViewServletConfiguration.class, DruidWebStatFilterConfiguration.class, DruidFilterConfiguration.class})
public class DruidDataSourceAutoConfigure
● DruidStatProperties.class,通过spring.datasource.druid与yaml配置文件绑定
● DataSourceProperties.class,通过spring.datasource与yaml配置文件绑定
● DruidSpringAopConfiguration.class, 监控SpringBean的;配置项:spring.datasource.druid.aop-patterns
● DruidStatViewServletConfiguration.class, 监控页的配置:spring.datasource.druid.stat-view-servlet;
● DruidWebStatFilterConfiguration.class, web监控配置;spring.datasource.druid.web-stat-filter;
● DruidFilterConfiguration.class}) 所有Druid自己filter的配置
2、yaml配置
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
password: admin
url: jdbc:mysql://127.0.0.1:3306/bbb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true
username: 123456
filters: stat, wall
druid:
filters: stat,wall #底层开启功能,stat(sql监控),wall(防火墙)
filter: #对上面filters里面的属性的详细配置
stat:
slow-sql-millis: 1000
logSlowSql: true
enabled: true
wall:
enabled: true
config:
drop-table-allow: false
aop-patterns: com.example.demo.* #监控SpringBean
stat-view-servlet: #配置监控页功能
login-username: 123
login-password: 123
enabled: true
reset-enable: false
web-stat-filter: #监控web
enabled: true
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
url-pattern: /*
3、请求路径
@Controller
public class UserController {
@Autowired
private JdbcTemplate jdbcTemplate;
@ResponseBody
@RequestMapping(value = "/getCount", method = RequestMethod.GET)
public String getCount(){
Long l = jdbcTemplate.queryForObject("select count(*) from t_book", Long.class);
return l.toString();
}
}
SpringBoot配置示例
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
配置项列表https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8