springboot2.x 注入druid 监控 非yaml 格式

导入com.alibaba:druid-spring-boot-starter:1.1.9 包

创建类 import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List;

import javax.servlet.Servlet; import javax.sql.DataSource;

import com.alibaba.druid.filter.Filter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; 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 com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter;

/**

  • @DESC druid配置类,会被springboot扫描然后将相应的service加到容器中 */ @Configuration @Slf4j public class DruidConfiguration { @Value("${spring.datasource.mydruid.Filters:stat,wall,slf4j}") private String Filters; @Value("${spring.datasource.mydruid.InitialSize:5}") private Integer InitialSize; @Value("${spring.datasource.mydruid.MinIdle:5}") private Integer MinIdle; @Value("${spring.datasource.mydruid.MaxActive:20}") private Integer MaxActive; @Value("${spring.datasource.mydruid.PoolPreparedStatements:true}") private boolean PoolPreparedStatements; @Value("${spring.datasource.mydruid.MaxPoolPreparedStatementPerConnectionSize:20}") private Integer MaxPoolPreparedStatementPerConnectionSize; @Value("${spring.datasource.mydruid.ValidationQuery:select 'x'}") private String ValidationQuery; @Value("${spring.datasource.mydruid.TestOnBorrow:false}") private boolean TestOnBorrow; @Value("${spring.datasource.mydruid.TestOnReturn:false}") private boolean TestOnReturn; @Value("${spring.datasource.mydruid.WhileIdle:true}") private boolean WhileIdle; @Value("${spring.datasource.mydruid.MaxWait:6000}") private Integer MaxWait; @Value("${spring.datasource.mydruid.TimeBetweenEvictionRunsMillis:60000}") private Integer TimeBetweenEvictionRunsMillis; @Value("${spring.datasource.mydruid.UseGlobalDataSourceStat:true}") private boolean UseGlobalDataSourceStat;

    @Value("${spring.datasource.mydruid.loginUsername:admin}") private String loginUsername; @Value("${spring.datasource.mydruid.loginPassword:admin}") private String loginPassword; @Value("${spring.datasource.mydruid.resetEnable:true}") private String resetEnable; @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource druid() throws SQLException { DruidDataSource druidDataSource = new DruidDataSource();

     //        配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
     druidDataSource.setFilters(Filters);
     //自定义 sql 统计 应为druid 没有时间段 可以自己写
    // List<Filter> filterList=new ArrayList<>();
    // filterList.add(new TestDruidFilter());
    // druidDataSource.setProxyFilters(filterList);
     // 初始化大小,最小,最大
     druidDataSource.setInitialSize(InitialSize);
     druidDataSource.setMinIdle(MinIdle);
    

// 最大等待(空闲)连接中的数量,设 0 为没有限制 druidDataSource.setMaxActive(MaxActive); // 打开PSCache,并且指定每个连接上PSCache的大小 druidDataSource.setPoolPreparedStatements(PoolPreparedStatements); druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(MaxPoolPreparedStatementPerConnectionSize); // 校验sql druidDataSource.setValidationQuery(ValidationQuery); // 指明是否在从池中取出连接前进行检验,如果检验失败 则从池中去除连接并尝试取出另一个. 注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串 druidDataSource.setTestOnBorrow(TestOnBorrow); // 指明是否在归还到池中前进行检验 druidDataSource.setTestOnReturn(TestOnReturn); druidDataSource.setTestWhileIdle(WhileIdle); // 配置获取连接等待超时的时间 最大等待毫秒数, 单位为 ms, 如果超过此时间将接到异常,设为-1表示无限制 druidDataSource.setMaxWait(MaxWait); // 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 druidDataSource.setTimeBetweenEvictionRunsMillis(TimeBetweenEvictionRunsMillis); // 合并多个DruidDataSource的监控数据 druidDataSource.setUseGlobalDataSourceStat(UseGlobalDataSourceStat); return druidDataSource; }

/**
 * 配置druid管理页面的访问控制
 * 访问网址: http://127.0.0.1:8080/druid
 *
 * @return
 */
@Bean
public ServletRegistrationBean<Servlet> druidServlet() {
    log.info("初始化配置--druid");
    ServletRegistrationBean<Servlet> servletRegistrationBean = new ServletRegistrationBean<>();
    servletRegistrationBean.setServlet(new StatViewServlet());  //配置一个拦截器
    servletRegistrationBean.addUrlMappings("/druid/*");    //指定拦截器只拦截druid管理页面的请求
    HashMap<String, String> initParam = new HashMap<String, String>();
    initParam.put("loginUsername", loginUsername);    //登录druid管理页面的用户名
    initParam.put("loginPassword", loginPassword);    //登录druid管理页面的密码
    initParam.put("resetEnable", resetEnable);       //是否允许重置druid的统计信息
    initParam.put("allow", "");         //ip白名单,如果没有设置或为空,则表示允许所有访问

    servletRegistrationBean.setInitParameters(initParam);
    return servletRegistrationBean;
}

@Bean
public FilterRegistrationBean<WebStatFilter> filterRegistrationBean() {
    FilterRegistrationBean<WebStatFilter> filterRegistrationBean = new FilterRegistrationBean<WebStatFilter>();
    filterRegistrationBean.setFilter(new WebStatFilter());
    filterRegistrationBean.addUrlPatterns("/*");
    filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
    return filterRegistrationBean;
}

} 实现自定义接口 从源码看的 import com.alibaba.druid.filter.FilterEventAdapter; import com.alibaba.druid.proxy.jdbc.StatementProxy;

public class TestDruidFilter extends FilterEventAdapter { @Override protected void statementExecuteAfter(StatementProxy statement, String sql, boolean result) {

    System.err.println("监控sql----------执行后-------");
    System.err.println("sql-----"+sql);
    System.err.println("statement-----");
    super.statementExecuteAfter(statement, sql, result);
}
@Override
protected void statementExecuteBefore(StatementProxy statement, String sql) {
    System.err.println("监控sql----------执行前-------");
    System.err.println("sql-----"+sql);
    System.err.println("statement-----");
    super.statementExecuteBefore(statement, sql);
}

} 配置文件 spring: application: name: datapull datasource: driver-class-name: com.mysql.cj.jdbc.Driver #mysql8 url: jdbc:mysql://xxxx:8066/xxx?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC username: xxx password: xxx mydruid: Filters: stat,wall,slf4j InitialSize: 5 MinIdle: 5 MaxActive: 20 PoolPreparedStatements: true MaxPoolPreparedStatementPerConnectionSize: 20 ValidationQuery: select 'x' TestOnBorrow: false TestOnReturn: false WhileIdle: false MaxWait: 6000 TimeBetweenEvictionRunsMillis: 60000 UseGlobalDataSourceStat: true loginUsername: admin loginPassword: admin resetEnable: true druid: db-type: com.alibaba.druid.pool.DruidDataSource

转载于:https://my.oschina.net/u/3022323/blog/3098348

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值