首先听上去这个活很简单不就是配置吗 so easy,不! 不! 不!这里面很多坑 动态数据源的配置和依赖见上文 传送门 driud配置先添加依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
yml的配置
spring:
datasource:
dynamic:
datasource:
master:
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
filters: stat,wall,log4j2
initial-size: 5
max-active: 20
max-evictable-idle-time-millis: 300000
max-wait: 60000
min-evictable-idle-time-millis: 300000
min-idle: 5
pool-prepared-statements: true
share-prepared-statements: true
test-on-borrow: false
test-on-return: false
test-while-idle: true
time-between-eviction-runs-millis: 60000
validation-query: select 1
validation-query-timeout: -1
loginUsername: root
loginPassword: 123456
exclusions: '*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*'
url-pattern: /*
password: password
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://xxx.xxx.xx:3306/black_cat_fish?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: root
primary: master
数据库驱动要是选择com.p6spy.engine.spy.P6SpyDriver 就要将 filters: stat,wall,log4j2更改为 filters: stat,log4j2 因为用p6spy做了代理不然启动会报以下错误:
java.lang.IllegalStateException: dbType not support : null, url null
at com.alibaba.druid.wall.WallFilter.init(WallFilter.java:159) ~[druid-1.1.5.jar:1.1.5]
at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:770) [druid-1.1.5.jar:1.1.5]
at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1215) [druid-1.1.5.jar:1.1.5]
at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1211) [druid-1.1.5.jar:1.1.5]
at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:105) [druid-1.1.5.jar:1.1.5]
at
配置类
package com.gafc.comm.config;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
/**
* druid监控界面设置
*/
@Configuration
@Profile({"dev", "sit", "uat"})
@Slf4j
public class DruidConfiguration {
@Bean
public ServletRegistrationBean druidStatViewServle() {
//注册服务
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
new StatViewServlet(), "/druid/*");
// 白名单(为空表示,所有的都可以访问,多个IP的时候用逗号隔开)
servletRegistrationBean.addInitParameter("allow", " ");
// IP黑名单 (存在共同时,deny优先于allow) (黑白名单就是如果是黑名单,那么该ip无法登陆该可视化界面)
// servletRegistrationBean.addInitParameter("deny", "127.0.0.2");
// 设置登录的用户名和密码
servletRegistrationBean.addInitParameter("loginUsername", "root");
servletRegistrationBean.addInitParameter("loginPassword", "123456");
// 是否能够重置数据.
servletRegistrationBean.addInitParameter("resetEnable", "false");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean druidStatFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(
new WebStatFilter());
// 添加过滤规则
filterRegistrationBean.addUrlPatterns("/*");
// 添加不需要忽略的格式信息
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
log.info("druid初始化成功!");
return filterRegistrationBean;
}
}
一般情况启动项目然后访问localhost:8088/druid/index.html就会出现一下界面
对到此没有什么问题
如果执行一个接口或者是执行sql问题就来了
LocalDateTime 字段报错: Error attempting to get column ‘reg_time‘ from result set
没错我使用了mybatis-plus(3.3.4) 此时不兼容 driud 版本
一开始我没有直接取官网去看,直接取百度,消耗了大量时间也没有解决,原因就是依赖版本不兼容
后来我找到官网 然后找到了解决方案,在此想说一下,有问题还是先找官网,靠谱!官网解释如下
果断把mp降到3.3.0 把driud 升级到1.2.23版本
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.23</version>
</dependency>
到此这个问题解决 在配置过程中不止遇到这一个问题,当时没有记录了,最终都解决了,以后补录把 最后再将spring 监控配置一下
package com.gafc.comm.config;
import com.alibaba.druid.support.spring.stat.DruidStatInterceptor;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.aop.support.JdkRegexpMethodPointcut;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
/**
* 委托Druid进行Spring 监控
*/
@Configuration
public class SpringMonitoringConfig {
@Bean(name = "druid-stat-interceptor")
public DruidStatInterceptor druidStatInterceptor() {
return new DruidStatInterceptor();
}
@Bean(name = "druid-stat-pointcut")
// 非单例
@Scope("prototype")
public JdkRegexpMethodPointcut druidStatPointcut() {
final JdkRegexpMethodPointcut pointcut = new JdkRegexpMethodPointcut();
// 这里是你Controller包的路径
pointcut.setPatterns("com.xxx.controller.*"
);
return pointcut;
}
@Bean
public DefaultPointcutAdvisor druidStatAdvisor(@Qualifier("druid-stat-interceptor") final DruidStatInterceptor druidStatInterceptor,
@Qualifier("druid-stat-pointcut") final JdkRegexpMethodPointcut druidStatPointcut) {
final DefaultPointcutAdvisor defaultPointAdvisor = new DefaultPointcutAdvisor();
defaultPointAdvisor.setPointcut(druidStatPointcut);
defaultPointAdvisor.setAdvice(druidStatInterceptor);
return defaultPointAdvisor;
}
}