SpringBoot整合第三方数据源(例如Druid)
第一种 自定义方式
如何使用
引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.17</version>
</dependency>
编写配置类
@Configuration
public class MyDatasourceConfig {
/**
* 默认的自动配置,容器中没有才会配置
* @ConditionalOnMissingBean(DataSource.class)
* @return
*/
//指定和配置文件中的spring.datasource自动装配
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource dataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
// druidDataSource.setUrl("");
return druidDataSource;
}
}
测试
@Autowired
JdbcTemplate jdbcTemplate;
/**
* 当前表共有 12 条数据。
*/
@Test
public void test1(){
Long count = jdbcTemplate.queryForObject("select count(*) from smbms_user", Long.class);
log.info("当前表共有 {} 条数据。",count);
}
@Autowired
DataSource dataSource;
@Test
public void test2(){
log.info("当前数据源是 {}",dataSource.getClass());
}
查看Druid的监控页面
在配置类中添加相应配置
/**
* 配置druid的监控页功能
* @return
*/
@Bean
public ServletRegistrationBean statViewServlet(){
StatViewServlet statViewServlet = new StatViewServlet();
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(statViewServlet, "/druid/*");
return bean;
}
测试访问 http://localhost:8080/druid/index.html 可以访问到
查看SQL监控是否生效
在controller里添加如下测试请求
@Autowired
JdbcTemplate jdbcTemplate;
@ResponseBody
@GetMapping("/sql")
public String queryFormDB(){
Long count = jdbcTemplate.queryForObject("select count(*) from smbms_user", Long.class);
return count.toString();
}
在配置类里开启sql监控配置 (必须开启,要不sql监控不到)
也可以通过修改配置文件的方式
启动项目测试访问
- 先发几次sql请求 http://localhost:8080/sql
- 查看druid中的sql监控,这里之前是空白的
- 其中时间分布解释如下
采集web-jdbc关联监控的数据
在配置类添加web-jdbc监控配置
/**
* WebStatFilter采集web-jdbc关联监控的数据
* @return
*/
@Bean
public FilterRegistrationBean webStatFilter(){
WebStatFilter webStatFilter = new WebStatFilter();
FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<WebStatFilter>(webStatFilter);
registrationBean.setUrlPatterns(Arrays.asList("/*"));
registrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return registrationBean;
}
启动项目测试访问
- 先发几次sql请求 http://localhost:8080/sql
- 查看如下几项
1
2
开启sql防火墙
在配置类中添加防火墙相关配置
启动项目测试访问
- 先发几次sql请求 http://localhost:8080/sql
- 查看sql防火墙
访问Druid可以直接访问,现在添加账号密码
在配置类中添加相关配置
启动项目测试访问,重新登录项目访问,为了更全面的查看监控信息
- 再次访问 localhost:8080/druid 直接跳到登录页
- 输入账号密码 admin 123456 就可以进来
- 切换到url监控,这都是我刚才访问的路径
- 切换到session监控,这是我刚才登录系统的信息
第二种 starter方式
引入starter依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
在application.yml中添加相应配置
spring:
devtools:
restart:
enabled: true
additional-paths: src/main/java,src/main/resources
thymeleaf:
cache: false
servlet:
multipart:
max-file-size: 10MB #单个文件的大小
max-request-size: 100MB # 整个请求要求的大小
datasource:
url: jdbc:mysql://localhost:3306/smbms?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: root
password: love123
type: com.zaxxer.hikari.HikariDataSource # 默认数据源,也可以不写
driver-class-name: com.mysql.jdbc.Driver
# filters: stat,wall
druid:
stat-view-servlet: #配置监控页
enabled: true
login-username: adminadmin
login-password: 123456123
reset-enable: false #重置按钮是否生效,虽然还有,但是功能已经失效
web-stat-filter: #监控web
enabled: true
url-pattern: /*
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
aop-patterns: com.atguigu.admin.* #监控springbean
filters: stat,wall # 底层开启功能,stat是sql监控,wall是防火墙
filter:
stat:
slow-sql-millis: 1000
log-slow-sql: true
enabled: true
wall:
enabled: true
config:
drop-table-allow: false
jdbc:
template:
query-timeout: 3 # 3s数据没查出来,那么就超时
测试访问