想要獲取更多文章能夠訪問個人博客 - 代碼無止境。css
通過一天對Spring Boot的研究,小代同窗已經對Spring Boot框架有了一個大概的認識。而且還建立了一個簡單的Spring Boot的Web應用程序,若是你還不知道如何建立的話,能夠訪問《小代學Spring Boot之開篇》這篇文章。下一步陳Boss讓小代作的是使用Spring Boot項目鏈接數據庫。
相信咱們都知道,在鏈接數據庫的時候咱們通常都會使用數據庫鏈接池,這樣作的好處在於能夠重用數據庫資源,還能夠統一管理數據庫鏈接,避免鏈接泄露。小代選擇的是阿里巴巴的Druid鏈接池。那麼爲啥會選擇Druid呢?小代給出的解釋是下面這樣的。html
首先簡單的介紹一下Druid。Druid是阿里巴巴開源的一個數據庫鏈接池實現,它結合了C3P0、DBCP、PROXOOL等鏈接池的優勢,並且還加入了日誌監控,官方文檔稱其是Java語言中最好的數據庫鏈接池。 那麼接下來,咱們就來看下小代同窗是如何在Spring Boot項目中集成Druid鏈接池而且實現SQL監控的吧。java
首先第一步小代同窗作的是添加Druid相關的依賴包。除了Druid自己以外,還需MySQL鏈接驅動包。只須要在pom.xml
中添加以下內容便可。mysql
<!--鏈接驅動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--druid鏈接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.28</version>
</dependency>
複製代碼
添加依賴包後,小代同窗添加鏈接池相關的配置項。在Spring Boot項目中再也不使用XML文件的方式來配置項目,取而代之的是將一些配置項放在application.property
文件中(PS:Spring Boot還支持YAML格式的配置文件),小代同窗添加的配置項以下所示。git
# 數據源類型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 數據庫url
spring.datasource.druid.url=jdbc:mysql://localhost:3306/spring_tutorial?useUnicode=true&characterEncoding=UTF-8
# 驅動
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
# 用戶名
spring.datasource.druid.username=root
# 密碼
spring.datasource.druid.password=123456
# 最大鏈接數
spring.datasource.druid.max-active=100
# 鏈接池初始化大小
spring.datasource.druid.initial-size=1
# 獲取鏈接最大等待時間
spring.datasource.druid.max-wait=60000
# 最小鏈接數
spring.datasource.druid.min-idle=1
# 間隔多久才進行一次檢測,檢測須要關閉的空閒鏈接,單位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 一個鏈接在池中最小生存的時間,單位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
# 驗證連接是否有效的sql
spring.datasource.druid.validation-query=select 'x'
# 空閒時檢測鏈接是否有效
spring.datasource.druid.test-while-idle=true
# 鏈接被借出時檢查是否有效,影響性能,因此此處關閉
spring.datasource.druid.test-on-borrow=false
# 當鏈接返還時檢查鏈接是否有效,影響性能,默認關閉
spring.datasource.druid.test-on-return=false
# 是否緩存preparedStatement,也就是PSCache。PSCache對支持遊標的數據庫性能提高巨大,好比說oracle,可是在mysql下建議關閉。
spring.datasource.druid.pool-prepared-statements=false
複製代碼
接下來小代同窗要作的就是使用Java Config的方式配置數據源和Druid Web監控。在這一步他先建立了一個類來映射配置文件中配置項的值,以下面代碼所示,因爲篇幅的緣由,在此不所有展現,須要的同窗能夠從源碼中獲取。github
@ConfigurationProperties(prefix = "spring.datasource.druid")
public class DruidDataSourceProperties {
...
/** * 數據源名稱 */
private String name;
/** * 數據庫鏈接url */
private String url;
....
}
複製代碼
能夠看出來DruidDataSourceProperties
的屬性名稱和上一步定義的配置項是一一對應的,經過@ConfigurationProperties
註解將指定前綴的配置項映射到這個類中,並在Spring Boot項目啓動的時候初始化一個實例,並交由Spring容器管理。
接下來還須要建立一個Java配置類。數據源的定義以及Druid監控相關的配置將會放在這個配置類中。下面代碼只是截取源碼部份內容,須要源碼的同窗點擊這裏自取。spring
@Configuration
@EnableConfigurationProperties({ DruidDataSourceProperties.class })
@ConditionalOnProperty(name = "spring.datasource.druid.url")
public class DruidDataSourceConfiguration {
@Autowired
private DruidDataSourceProperties druidDataSourceProperties;
@Bean(name = "druidDataSource", initMethod = "init", destroyMethod = "close")
@ConditionalOnMissingBean(name = "druidDataSource")
public DruidDataSource druidDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(druidDataSourceProperties.getUrl());
dataSource.setUsername(druidDataSourceProperties.getUsername());
dataSource.setPassword(druidDataSourceProperties.getPassword());
dataSource.setDriverClassName(druidDataSourceProperties.getDriverClassName());
...
}
}
複製代碼
如上代碼所示咱們只會在配置文件中存在spring.datasource.druid.url
這個配置項時纔會初始化它裏面全部的配置。還能夠看出來的是定義數據源的步驟其實很簡單,無非就是將配置項中的值一項一項賦值給new出來的數據源對象。建立完數據源以後,還須要實現Druid監控的相關配置。sql
@Bean
public ServletRegistrationBean druidServlet() {
// 如今要進行druid監控的配置處理操做
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
new StatViewServlet(), "/druid/*");
// 白名單,多個用逗號分割, 若是allow沒有配置或者爲空,則容許全部訪問
servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
// 黑名單,多個用逗號分割 (共同存在時,deny優先於allow)
servletRegistrationBean.addInitParameter("deny", "192.168.1.110");
// 控制檯管理用戶名
servletRegistrationBean.addInitParameter("loginUsername", "admin");
// 控制檯管理密碼
servletRegistrationBean.addInitParameter("loginPassword", "itweknow.cn");
// 是否能夠重置數據源,禁用HTML頁面上的「Reset All」功能
servletRegistrationBean.addInitParameter("resetEnable", "false");
return servletRegistrationBean ;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean() ;
filterRegistrationBean.setFilter(new WebStatFilter());
//全部請求進行監控處理
filterRegistrationBean.addUrlPatterns("/*");
//添加不須要忽略的格式信息
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.css,/druid/*");
return filterRegistrationBean ;
}
複製代碼
從上面的兩段代碼看,咱們定義了一個Servlet和一個Filter,主要設置了訪問控制檯的白黑名單以及登陸的用戶名密碼,以及Druid攔截的url。數據庫
通過上面的配置,整個數據源的配置就完成了。接下來咱們只須要啓動整個項目,而後瀏覽器訪問http://localhost:8080/druid/index.html
就能夠看到效果了。訪問上面的地址後,會進入到Web控制檯的登陸界面,輸入用戶名密碼後看到以下界面就表明數據源配置成功了。瀏覽器
本文主要介紹瞭如何在Spring Boot項目中使用Druid鏈接池連接數據庫,而且提到了如何配置Druid內置的SQL監控。你能夠在Github上找到本文的完整實現,若是您以爲文章寫的還能夠的話,順手給個Star,這是對我最好的鼓勵。
PS:學習不止,碼不停蹄!若是您喜歡個人文章,就關注我吧!