整合Druid數據和數據源監控

(一)切換數據源

引入依賴

 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
</dependency>

設置配置文件application.yml

spring:
  datasource:
    username: root
    password: admin
    url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8
    driver‐class‐name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

上面配置中配置了type,之所以使用type屬性可以完成切換配置的原因在於,
在DataSourceConfiguration類中,我們看到有如下代碼

/**
	 * Generic DataSource configuration.
	 */
	@ConditionalOnMissingBean(DataSource.class)
	@ConditionalOnProperty(name = "spring.datasource.type")
	static class Generic {
@Bean
		public DataSource dataSource(DataSourceProperties properties) {
			return properties.initializeDataSourceBuilder().build();
}}

上面就是完成自定義切換數據源的方式,如果我們的數據源SpringBoot沒有提供,而我們需要自己定義的話,就可以通過type來進行切換,具體的切換內部實現都會由SpringBoot來完成.

設置了type屬性後,再來測試以下當前的dataSource是什麼類型。 通過下面的測試可以看到確實更換了Druid數據源

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootJdbcApplicationTests {

    //注入數據源
    @Autowired
    DataSource dataSource;
    @Test
    public void contextLoads() throws SQLException {
        System.out.println("------JDBC測試-------");
        System.out.println("數據源類型:" + dataSource.getClass());
        System.out.println("數據源連接:" + dataSource.getConnection());

}
}

在這裏插入圖片描述

(二)配置數據源屬性

問題:
當我們自定義切換了相關的數據源,比如本次切換的Druid數據源,其中如果想要設置一些屬性,但是在DataSourceProperties沒有匹配的屬性,那麼SpringBoot在創建數據源的時候就無法去完成對應屬性的配置,那麼在這個時候就不能使用SpringBoot給我們提供的創建數據源的方式了,需要修改以下

解決方式:
提供一個配置類,其中返回一個DruidDataSource實例對象的Bean,該實例會替換掉前面的(Generic DataSource configuration)

@Configuration
public class DruidConfig {
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid() {
        return new DruidDataSource();
}
}
(三)配置Druid監控

其中監控配置中,Servlet配置的參數參考類:
com.alibaba.druid.support.http.ResourceServlet

Filter配置的參數參考類:
com.alibaba.druid.support.http.WebStatFilter

@Configuration
public class DruidConfig {
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid() {
        return new DruidDataSource();
    }

    //配置Druid的監控
    // 1:配置一個管理後臺的Servlet
    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean bean = new ServletRegistrationBean(
                new StatViewServlet(), "/druid/*");
        Map<String, String> initParams = new HashMap<>();
        initParams.put("loginUsername", "admin");
        initParams.put("loginPassword", "123456");
        //默認就是允許所有訪問,value可以填寫允許的IP地址
        initParams.put("allow", "");
        //拒絕訪問的地址IP
        //initParams.put("deny", "");
        bean.setInitParameters(initParams);
        return bean;
    }

    //2:配置一個web監控的filter
    @Bean
    public FilterRegistrationBean webStatFilter() {
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());
        Map<String, String> initParams = new HashMap<>();
        //那些請求排除,比如靜態資源
        initParams.put("exclusions", "*.js,*.css,/druid/*");
        bean.setInitParameters(initParams);
        //過濾那些請求
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }
}

添加了上述的配置後,即可以啓動項目,然後在瀏覽器輸入以下URL訪問後臺監控:
http://localhost:8080/druid/login.html

用戶名和密碼見上面配置:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章