(一)切換數據源
引入依賴
<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
用戶名和密碼見上面配置: