這幾天以來都是去學習如何去搭建一個項目的基本框架,然而並不是很順利,會遇到各種各樣的大小問題。今天把druid搭到我的框架裏面,剛開始並不是很順利,中途也遇到了一些問題,今天通過博客記錄我所遇到的問題,也給廣大老鐵們分享一下。
方案一
1、添加maven依賴(注意:添加依賴要注意一下,否則druid沒有sql記錄)
錯誤的依賴(其實並非是錯誤的依賴,下面依賴想要得到sql記錄也有處理的辦法,具體可以度娘,這裏就不具體說了)
運行結果並沒有相關的sql記錄:
正確的依賴:
運行結果有相關的sql記錄:
2、將druidxian相關的source添加到yml裏面
yml文件中要注意的一個地方:main:allow-bean-definition-overriding: true。在步驟一的添加依賴中,添加druid依賴是<artifactId>druid-spring-boot-starter</artifactId>,因爲版本原因(我的springboot是2.1.3),和springcloud版本不兼容,導致報錯:
Description:
The bean 'filterRegistrationBean', defined in class path resource [com/alibaba/druid/spring/boot/autoconfigure/stat/DruidWebStatFilterConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [com/aaron/config/DruidDBConfig.class] and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
解決的辦法有兩個,第一種方法是降低pringboot的版本(由於我一開始就用2.1.3,爲了避免出現其他報錯,我就採取了第二種方法);第二種方法是,在yml文件中添加main:allow-bean-definition-overriding: true即可。
3、添加druid的config類文件
@Configuration
public class DruidDBConfig {
@Bean
public ServletRegistrationBean druidServlet() {
ServletRegistrationBean reg = new ServletRegistrationBean();
reg.setServlet(new StatViewServlet());
reg.addUrlMappings("/druid/*");
reg.addInitParameter("loginUsername", "druid");
reg.addInitParameter("loginPassword", "123456");
reg.addInitParameter("resetEnable", "false");
return reg;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new WebStatFilter());
Map<String, String> initParams = new HashMap<String, String>();
initParams.put("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
filterRegistrationBean.setInitParameters(initParams);
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
4、運行
運行springboot的啓動文件,訪問http://127.0.0.1:8080/druid/index.html,通過單元測試,即可在druid中看到相關的數據。
方案二
1、添加maven依賴(步驟如上述方案一)
2、添加druid的屬性類文件(本類中通過Lombok註解處理)
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
@ConfigurationProperties(prefix = "druid")
public class Druid {
private String url;
private String username;
private String password;
private String driverClass;
private int maxActive;
private int minIdle;
private int initialSize;
private boolean testOnBorrow;
}
3、添加druid相關的配置類
@Configuration
@EnableConfigurationProperties(Druid.class)
@ConditionalOnClass(DruidDataSource.class)
@ConditionalOnProperty(prefix = "druid", name = "url")
@AutoConfigureBefore(DataSourceAutoConfiguration.class)
public class DruidAutoConfig {
@Autowired
private Druid properties;
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(properties.getUrl());
dataSource.setUsername(properties.getUsername());
dataSource.setPassword(properties.getPassword());
if (properties.getInitialSize() > 0) {
dataSource.setInitialSize(properties.getInitialSize());
}
if (properties.getMinIdle() > 0) {
dataSource.setMinIdle(properties.getMinIdle());
}
if (properties.getMaxActive() > 0) {
dataSource.setMaxActive(properties.getMaxActive());
}
dataSource.setTestOnBorrow(properties.isTestOnBorrow());
try {
dataSource.init();
} catch (SQLException e) {
throw new RuntimeException(e);
}
return dataSource;
}
}
4、在application文件中添加相關配置
spring:
profiles:
active: test
#連接池配置
druid:
url: jdbc:mysql://localhost:3306/springboottest?characterEncoding=UTF-8@&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
# 帳號
username: druid
# 密碼
password: druid
# 初始化大小,最小,最大
initial-size: 5
min-idle: 1
max-active: 100
test-on-borrow: true
5、測試
運行springboot的啓動文件,訪問http://127.0.0.1:8080/druid/index.html,通過單元測試,即可在druid中看到相關的數據。
上述就是springboot整合druid的相關步驟,有疑問或者文章中有錯誤的地方,望老鐵指正。