SpringBoot整合阿里?Druid?數(shù)據(jù)源的實例詳解
前言:今年是我的第二個 1024 了 ,和我一起大聲說出來,技術宅改變世界?。?!
本節(jié)主要介紹的是:SpringBoot 整合阿里 Druid 數(shù)據(jù)源手動配置方法
1. 在容器中注冊 DruidDataSource 數(shù)據(jù)源。
編寫數(shù)據(jù)源配置類 MyDataSourseConfig.class,并在容器中注冊 DruidDataSource 數(shù)據(jù)源。
代碼示例如下:
@Configuration public class MyDataSourseConfig { @Bean @ConfigurationProperties("spring.datasource") // 屬性與配置文件綁定 public DataSource dataSource(){ return new DruidDataSource(); } }
2. Druid 數(shù)據(jù)源各種屬性配置方法
方法一(不推薦): 直接在配置類中通過為自定義的 DruidDataSource 組件 通過 set 設置各種屬性,來實現(xiàn)數(shù)據(jù)源的配置。
代碼示例如下:
@Configuration public class MyDataSourseConfig { @Bean public DataSource dataSource(){ DruidDataSource druidDataSource = new DruidDataSource(); druidDataSource.setUrl("jdbc:mysql://localhost:3306/practice"); // 設置數(shù)據(jù)源連接 url // ..... 設置其他屬性 ..... return druidDataSource; } }
這種方法當修養(yǎng)屬性值時,需要大量修改源代碼,因此不推薦。
方法二(推薦):通過 @ConfigurationProperties(“spring.datasource”) 注釋將組件與配置文件中的 spring.datasource 項綁定,這樣在修改自定義數(shù)據(jù)源屬性時,直接在 application.yaml 文件的 spring.datasource 配置項下修改即可。代碼示例如下:
spring: datasource: url: jdbc:mysql://localhost:3306/practice username: root password: 5201314love driver-class-name: com.mysql.jdbc.Driver
可通過自定義數(shù)據(jù)源組件注冊到容器中修改默認數(shù)據(jù)源原理:
在 DataSourceAutoConfiguration.class 數(shù)據(jù)源自動配置類中,有如下設置。其表示容器中沒有數(shù)據(jù)源,才自動配置 Hikari 數(shù)據(jù)源。若有數(shù)據(jù)源則使用容器中的數(shù)據(jù)源。
3. 開啟Druid的內(nèi)置監(jiān)控頁面
在容器中放一 Servlet ,具體操作方法為在 Druid數(shù)據(jù)源 配置類中注冊一ServletRegistrationBean 組件到容器,ServletRegistrationBean 的Servlet 類型為 StatViewServlet 。代碼示例如下:
注意點:訪問的 url 為 "/druid/*"
,是一個 *
而不是雙 **
@Configuration public class MyDataSourseConfig { @Bean @ConfigurationProperties("spring.datasource") public DataSource dataSource(){ return new DruidDataSource(); } // 配置 druid 監(jiān)控頁功能 —— 在容器中放一 Servlet @Bean public ServletRegistrationBean statViewServlet(){ StatViewServlet statViewServlet = new StatViewServlet(); ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<StatViewServlet>(statViewServlet, "/druid/*"); return registrationBean; } }
4. 打開 Druid 監(jiān)控統(tǒng)計功能
只是開啟了監(jiān)控頁功能并不能讓我們使用 Druid 為我們提供的 SQL 監(jiān)控等功能。還需要為數(shù)據(jù)源配置 StatFilter,具體方法是通過 setFilters(“stat”) 方法配置。代碼如下:
@Bean @ConfigurationProperties("spring.datasource") public DataSource dataSource() throws SQLException { DruidDataSource druidDataSource = new DruidDataSource(); // 加入監(jiān)控功能 —— setFilters("stat"); druidDataSource.setFilters("stat"); return druidDataSource; }
這時我們再去訪問數(shù)據(jù)庫,可以發(fā)現(xiàn)SQL監(jiān)控功能可用了
5. 配置Web和Spring關聯(lián)監(jiān)控
在容器中注冊一 WebStatFilter ,通過 setUrlPatterns(Arrays.asList(“/*”) 設置監(jiān)控的請求為 /** 請求。具體代碼實現(xiàn)如下:
// 采集 web-jdbc 關聯(lián)監(jiān)控的數(shù)據(jù) @Bean public FilterRegistrationBean webstatFilter(){ WebStatFilter webStatFilter = new WebStatFilter(); FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>(webStatFilter); registrationBean.setUrlPatterns(Arrays.asList("/*")); registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return registrationBean; }
6. 配置防火墻:
在數(shù)據(jù)源中通過 setFilter(“wall”) 加入 防火墻配置 (setFilter 多個值用逗號隔開)
// 加入監(jiān)控功能 druidDataSource.setFilters("stat, wall");
小優(yōu)化:
所有通過 setXXXX() 設置數(shù)據(jù)源的,都可以在配置文件中寫,因為 druidDataSource 已經(jīng)綁定了 spring.datasource 配置項
例如:
druidDataSource.setFilters("stat, wall");
可優(yōu)化為:
spring: datasource: # ... 此處省略一堆其他配置.... filters: stat,wall
7. 給監(jiān)控頁加入賬號密碼
在 ServletRegistrationBean 中通過 addInitParameter 加入賬號密碼的設置
// 配置 druid 監(jiān)控頁功能 —— 在容器中放一 Servlet @Bean public ServletRegistrationBean statViewServlet(){ StatViewServlet statViewServlet = new StatViewServlet(); ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<StatViewServlet>(statViewServlet, "/druid/*"); registrationBean.addInitParameter("loginUsername", "wanqing"); registrationBean.addInitParameter("loginPassword", "520131"); return registrationBean; }
到此這篇關于SpringBoot整合阿里 Druid 數(shù)據(jù)源的文章就介紹到這了,更多相關SpringBoot整合Druid 數(shù)據(jù)源內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java 實現(xiàn)Redis存儲復雜json格式數(shù)據(jù)并返回給前端
這篇文章主要介紹了Java 實現(xiàn)Redis存儲復雜json格式數(shù)據(jù)并返回給前端操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07使用jekins自動構(gòu)建部署java maven項目的方法步驟
這篇文章主要介紹了使用jekins自動構(gòu)建部署java maven項目的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01