druid springboot,千篇一律的application.properties配置,为啥我都不行

bxjv4tth  于 2021-11-27  发布在  Java
关注(0)|答案(3)|浏览(249)

网上找了好多文章,springboot(我使用1.4.1版本)的application.properties都是一样的类似spring.datasource.xxxx的配置。
顺手复制了一行,spring.datasource.filters=stat,wall,slf4j
然后启动项目,查看数据源,filters一项显示为空,sql监控为空。
不甘心,采用javaconfig方式手动new DruidDataSource然后调用setFilters("stat, wall, slf4j") ,重新启动项目,filters显示正常,sql监控也有了数据。
去查看springboot的autoconfigure的源码,压根就没有看到使用spring.datasource.filters的配置,同时druid也没有支持实现springboot的configurate配置。
我就纳闷了,是我哪里遗漏了,还是网上的这些人纯粹复制粘贴没有验证过code是否生效。

最后又在application.properties配置了initialSize、minIdle....查看数据源,还是使用druid的默认配置。
难道他们使用的都是druid.spring.boot.start版本?

iq0todco

iq0todco1#

这个好像你要自己用java代码设置属性。

package com.pt.config.bean;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import com.pt.config.ConnectionProperties;
import com.pt.config.DBPoolConfiguration;
import lombok.Getter;
import lombok.Setter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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 javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Properties;

/**

  • Created by id on 11/29/2016.

*/
@configuration
public class DruidDataSourceConfiguration {

private Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
@getter
@Setter
private DBPoolConfiguration config;

@Autowired
@getter
@Setter
private ConnectionProperties conProp;

@bean
public ServletRegistrationBean druidServlet() {
return new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
}

@bean
public DataSource druidDataSource() {

DruidDataSource ds = new DruidDataSource();

 ds.setDbType(config.getDbType());

 ds.setDriverClassName(config.getDriverClassName());
 ds.setUrl(config.getUrl());
 ds.setUsername(config.getUsername());
 ds.setPassword(config.getPassword());

 //
 ds.setInitialSize(config.getInitialSize());
 ds.setMinIdle(config.getMinIdle());
 ds.setMaxActive(config.getMaxActive());
 ds.setMaxWait(config.getMaxWait());
 ds.setTimeBetweenConnectErrorMillis(config.getTimeBetweenEvictionRunsMillis());
 ds.setMinEvictableIdleTimeMillis(config.getMinEvictableIdleTimeMillis());
 ds.setValidationQuery(config.getValidationQuery());
 ds.setValidationQueryTimeout(config.getValidationQueryTimeout());
 ds.setTestWhileIdle(config.isTestWhileIdle());
 ds.setTestOnBorrow(config.isTestOnBorrow());
 ds.setTestOnReturn(config.isTestOnReturn());
 ds.setPoolPreparedStatements(config.isPoolPreparedStatements());

 ds.setQueryTimeout(config.getQueryTimeout());
 ds.setTransactionQueryTimeout(config.getTransactionQueryTimeout());
 ds.setLoginTimeout(config.getLoginTimeout());

 // ds.setValidConnectionChecker();
 // ds.setExceptionSorter();
 ds.setDefaultAutoCommit(config.isDefaultAutoCommit());
 ds.setDefaultReadOnly(config.isDefaultReadOnly());
 // ds.setDefaultTransactionIsolation();

 ds.setRemoveAbandoned(config.isRemoveAbandoned());
 ds.setRemoveAbandonedTimeout(config.getRemoveAbandonedTimeout());
 ds.setLogAbandoned(config.isLogAbandoned());

 try {
     ds.setFilters(config.getFilters());
 } catch (SQLException e) {
     logger.error("error when set filters: " + config.getFilters(), e);
 }

 Properties prop = new Properties();
 prop.setProperty("druid.stat.mergeSql", Boolean.toString(conProp.isMergeSql()));
 prop.setProperty("druid.stat.slowSqlMillis", Long.toString(conProp.getSlowSqlMillis()));
 prop.setProperty("config.decrypt", Boolean.toString(conProp.isDecrypt()));
 prop.setProperty("config.decrypt.key", conProp.getDecryptKey());
 prop.setProperty("druid.oracle.pingTimeout", Integer.toString(conProp.getPingTimeout()));

 ds.setConnectProperties(prop);

 ds.setUseGlobalDataSourceStat(config.isUseGlobalDataSourceStat());
 return ds;

}

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

7rtdyuoh

7rtdyuoh2#

@missvivia,网上只给了application.properties配置,压根就没提@configuration,算了让我静静。

zbdgwd5y

zbdgwd5y3#

@galikaixin 你用SpringBoot你不知道Bean的声明要写在Configuration类里??

@missvivia 可以使用prefix的方式完成配置,就不用那么多的set了

相关问题