目錄
1.什么是Druid
2.主要優(yōu)點(diǎn)和原因
3.誤區(qū)
4.Part代碼
0.pom
1.Spring.datasource.type: com.alibaba.druid.pool.DruidDataSource
2.Druid用Jasypt加密任意內(nèi)容
@EnableEncryptableProperties開啟加密注解
3.Druid監(jiān)控平臺(tái)
1.什么是Druid
Druid 是一個(gè)開源的數(shù)據(jù)庫(kù)連接池和監(jiān)控庫(kù),主要用于連接和管理數(shù)據(jù)庫(kù)連接。它的設(shè)計(jì)目標(biāo)是提供高性能、高可用性、高度可管理性的數(shù)據(jù)庫(kù)連接池,適用于各種Java應(yīng)用程序,特別是那些需要頻繁與數(shù)據(jù)庫(kù)交互的應(yīng)用,如Web應(yīng)用、大數(shù)據(jù)處理等。
2.主要優(yōu)點(diǎn)和原因
-
連接池管理:?Druid 提供了強(qiáng)大的連接池管理功能,可以有效地管理數(shù)據(jù)庫(kù)連接的創(chuàng)建、銷毀、復(fù)用和監(jiān)控,以減少數(shù)據(jù)庫(kù)連接的開銷和資源浪費(fèi)。
-
性能優(yōu)化:?Druid 在連接池和 SQL 執(zhí)行層面進(jìn)行了性能優(yōu)化,包括支持預(yù)編譯語(yǔ)句、自動(dòng)識(shí)別并關(guān)閉空閑連接、連接泄漏檢測(cè)等功能,以提高應(yīng)用程序的性能。
-
監(jiān)控和統(tǒng)計(jì):?Druid 提供了詳細(xì)的監(jiān)控和統(tǒng)計(jì)信息,包括連接池的狀態(tài)、SQL執(zhí)行性能、慢查詢?nèi)罩镜龋瑤椭_發(fā)人員和運(yùn)維人員更好地理解應(yīng)用的數(shù)據(jù)庫(kù)訪問(wèn)情況,及時(shí)發(fā)現(xiàn)性能問(wèn)題。
-
安全性:?Druid 支持 IP 白名單、SQL 防火墻等安全功能,可以保護(hù)數(shù)據(jù)庫(kù)免受惡意攻擊。
-
適用性廣泛:?Druid 不僅支持 JDBC,還支持類似Spring JDBC、MyBatis、Hibernate等框架,因此適用于各種Java應(yīng)用程序。
-
開源和活躍的社區(qū):?Druid 是開源項(xiàng)目,擁有活躍的社區(qū)支持,可以獲得及時(shí)的更新和 bug 修復(fù)。
-
可擴(kuò)展性:?Druid 具有可擴(kuò)展性,可以根據(jù)具體需求進(jìn)行定制和擴(kuò)展,以滿足特定應(yīng)用場(chǎng)景的要求。
總之,使用 Druid 數(shù)據(jù)庫(kù)連接池的主要目的是提高數(shù)據(jù)庫(kù)訪問(wèn)的性能、可管理性和安全性,同時(shí)提供了豐富的監(jiān)控和統(tǒng)計(jì)信息,有助于更好地管理和維護(hù)數(shù)據(jù)庫(kù)連接。當(dāng)你的應(yīng)用需要頻繁與數(shù)據(jù)庫(kù)交互時(shí),使用 Druid 可能會(huì)顯著提高應(yīng)用程序的性能和可維護(hù)性。
3.誤區(qū)
Druid本身不提供SQL優(yōu)化功能,SQL優(yōu)化通常需要依賴于數(shù)據(jù)庫(kù)引擎或其他專門的SQL優(yōu)化工具??梢栽谑褂肈ruid連接池的應(yīng)用中采取一些措施來(lái)優(yōu)化SQL查詢的性能;
4.Part代碼
JDBC默認(rèn)的DataSource
實(shí)現(xiàn)是BasicDataSource
,BasicDataSource
是一個(gè)開源的、基本的DataSource
實(shí)現(xiàn),用于創(chuàng)建和管理數(shù)據(jù)庫(kù)連接池。
因?yàn)槭褂眠B接池可以顯著提高數(shù)據(jù)庫(kù)連接的性能和資源利用率,減少連接的創(chuàng)建和銷毀開銷。
0.pom
<!--jasypt坐標(biāo)-->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!--druid坐標(biāo)-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
1.Spring.datasource.type: com.alibaba.druid.pool.DruidDataSource
System.out.println(dataSource.getClass()); System.out.println(dataSource.getConnection());
class com.alibaba.druid.pool.DruidDataSource
com.mysql.cj.jdbc.ConnectionImpl@32d5279
?可以看到數(shù)據(jù)源已經(jīng)成功切換
2.Druid用Jasypt加密任意內(nèi)容
生成密碼的密文代碼
@Test
void show1(){
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
EnvironmentPBEConfig config = new EnvironmentPBEConfig();
// 加密的算法,這個(gè)算法是默認(rèn)的
config.setAlgorithm("PBEWithMD5AndDES");
// 加密的密鑰,隨便自己填寫,很重要千萬(wàn)不要告訴別人
config.setPassword("apesource");
standardPBEStringEncryptor.setConfig(config);
//自己的密碼
String plainText = "xxx";
String encryptedText = standardPBEStringEncryptor.encrypt(plainText);
System.out.println(encryptedText);
}
?使密文生效我們使用了ENC函數(shù),并將混淆字符串的配置放到了yml當(dāng)中
jasypt: encryptor: password: apesource
yml當(dāng)中的格式
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=myUsername
spring.datasource.password=ENC(密文)
@EnableEncryptableProperties開啟加密注解
3.Druid監(jiān)控平臺(tái)
yml當(dāng)中
filters: stat,wall
在Config配置類當(dāng)中
2.配置servlet
@Bean
public ServletRegistrationBean registrationBean(){
//1.創(chuàng)建servlet注冊(cè)類
ServletRegistrationBean<StatViewServlet> servletRegistrationBean = new ServletRegistrationBean<StatViewServlet>();
//2.創(chuàng)建制作頁(yè)面的servlet
StatViewServlet statViewServlet = new StatViewServlet();
//3.綁定servlet
servletRegistrationBean.setServlet(statViewServlet);
servletRegistrationBean.setUrlMappings(Arrays.asList("/druid/*"));
//4.參數(shù)綁定
Map<String,String> maps = new HashMap<String,String>();
maps.put(StatViewServlet.PARAM_NAME_USERNAME,"admin");
maps.put(StatViewServlet.PARAM_NAME_PASSWORD,"123");
maps.put(StatViewServlet.PARAM_NAME_ALLOW,"");//白名單
maps.put(StatViewServlet.PARAM_NAME_DENY,"192.168.0.12");//黑名單
servletRegistrationBean.setInitParameters(maps);
return servletRegistrationBean;
}
//3.配置filter
@Bean
public FilterRegistrationBean filterRegistrationBean(){
FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<WebStatFilter>();
bean.setFilter(new WebStatFilter());
//所有請(qǐng)求進(jìn)行監(jiān)控處理
bean.setUrlPatterns(Arrays.asList("/*"));
Map<String, String> initPrams = new HashMap<>();
//添加不需要忽略的格式信息
initPrams.put(WebStatFilter.PARAM_NAME_EXCLUSIONS, "*.js,*.css,/druid/*");
bean.setInitParameters(initPrams);
return bean;
}
攔截器和過(guò)濾器用到了servlet,所以要注冊(cè)servlet
攔截器主要攔截以/druid/開頭的文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-730115.html
最后使用localhost://8080/就可以訪問(wèn)監(jiān)控平臺(tái)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-730115.html
到了這里,關(guān)于SpringBoot-Druid的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!