最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot數(shù)據(jù)訪問自定義使用Druid數(shù)據(jù)源的方法

 更新時(shí)間:2021年08月07日 14:24:17   作者:xbhog  
本文記錄Druid數(shù)據(jù)源的使用,自定義實(shí)現(xiàn)Drud的功能、監(jiān)控頁、登錄、統(tǒng)計(jì)等。對(duì)SpringBoot數(shù)據(jù)訪問使用Druid數(shù)據(jù)源的相關(guān)知識(shí)感興趣額朋友一起看看吧

數(shù)據(jù)訪問之Druid數(shù)據(jù)源的使用

說明:該數(shù)據(jù)源Druid,使用自定義方式實(shí)現(xiàn),后面文章使用start啟動(dòng)器實(shí)現(xiàn),學(xué)習(xí)思路為主。

為什么要使用數(shù)據(jù)源:

​數(shù)據(jù)源是提高數(shù)據(jù)庫連接性能的常規(guī)手段,數(shù)據(jù)源會(huì)負(fù)責(zé)維持一個(gè)數(shù)據(jù)連接池,當(dāng)程序創(chuàng)建數(shù)據(jù)源實(shí)例時(shí),系統(tǒng)會(huì)一次性地創(chuàng)建多個(gè)數(shù)據(jù)庫連接,并把這些數(shù)據(jù)庫連接保存在連接池中。

​當(dāng)程序需要進(jìn)行數(shù)據(jù)庫訪問時(shí),無須重新獲得數(shù)據(jù)庫連接,而是從連接池中取出一個(gè)空閑的數(shù)據(jù)庫連接。

​當(dāng)程序使用數(shù)據(jù)庫連接訪問數(shù)據(jù)庫結(jié)束后,無須關(guān)閉數(shù)據(jù)庫連接,而是將數(shù)據(jù)庫連接歸還給連接池即可。

​通過這種方式,就可避免頻繁地獲取數(shù)據(jù)庫連接、關(guān)閉數(shù)據(jù)庫連接所導(dǎo)致的性能下降

為什么要使用數(shù)據(jù)源

數(shù)據(jù)源是提高數(shù)據(jù)庫連接性能的常規(guī)手段,數(shù)據(jù)源會(huì)負(fù)責(zé)維持一個(gè)數(shù)據(jù)連接池,當(dāng)程序創(chuàng)建數(shù)據(jù)源實(shí)例時(shí),系統(tǒng)會(huì)一次性地創(chuàng)建多個(gè)數(shù)據(jù)庫連接,并把這些數(shù)據(jù)庫連接保存在連接池中。當(dāng)程序需要進(jìn)行數(shù)據(jù)庫訪問時(shí),無須重新獲得數(shù)據(jù)庫連接,而是從連接池中取出一個(gè)空閑的數(shù)據(jù)庫連接。當(dāng)程序使用數(shù)據(jù)庫連接訪問數(shù)據(jù)庫結(jié)束后,無須關(guān)閉數(shù)據(jù)庫連接,而是將數(shù)據(jù)庫連接歸還給連接池即可。通過這種方式,就可避免頻繁地獲取數(shù)據(jù)庫連接、關(guān)閉數(shù)據(jù)庫連接所導(dǎo)致的性能下降。

Druid官方github地址

Druid中文文檔

Druid的介紹以及優(yōu)點(diǎn):

Druid是阿里巴巴開源平臺(tái)上一個(gè)數(shù)據(jù)庫連接池實(shí)現(xiàn),它不但結(jié)合了C3P0、DBCP、PROXOOL等數(shù)據(jù)庫連接池的優(yōu)點(diǎn),同時(shí)還加入了日志監(jiān)控,可以分別監(jiān)控DB池連接和SQL的執(zhí)行情 況,是一款針對(duì)監(jiān)控而生的數(shù)據(jù)庫連接池

整合第三方技術(shù)的兩種方式

  • 自定義
  • 找starter

自定義實(shí)現(xiàn)Druid數(shù)據(jù)源

引入數(shù)據(jù)源

博主版本:1.2.6

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>版本號(hào)</version>
</dependency>

配置數(shù)據(jù)源

因?yàn)樵谝霐?shù)據(jù)源,SpringBoot默配置的數(shù)據(jù)源是HikariDataSource,所以我們?nèi)绻褂肈ruid的話,需要自己創(chuàng)建一個(gè)數(shù)據(jù)源,并放到容器中使用,myDataSourceConfig文件代碼如下:

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;   //注意不要導(dǎo)錯(cuò)包

@Configuration
//配置數(shù)據(jù)源
public class MyDtaSourceConfig {
    @Bean
    public DataSource dataSource() {

        return new DruidDataSource();   //創(chuàng)建Druid數(shù)據(jù)源
    }
}

為什么我們創(chuàng)建的數(shù)據(jù)源可以使用呢?

在DataSourceAutoConfiguration中的以下部分可以發(fā)現(xiàn):

@Configuration(proxyBeanMethods = false)
	@Conditional(PooledDataSourceCondition.class)
	@ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
	@Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
			DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class,
			DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class })
	protected static class PooledDataSourceConfiguration {

	}

有引入DataSourceConfiguration.Hikari.class這個(gè)默認(rèn)類,點(diǎn)擊進(jìn)入,

@Configuration(proxyBeanMethods = false)
	@ConditionalOnClass(HikariDataSource.class)
	@ConditionalOnMissingBean(DataSource.class)
	@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.zaxxer.hikari.HikariDataSource",
			matchIfMissing = true)
	static class Hikari {

		@Bean
		@ConfigurationProperties(prefix = "spring.datasource.hikari")  
		HikariDataSource dataSource(DataSourceProperties properties) {
			HikariDataSource dataSource = createDataSource(properties, HikariDataSource.class);
			if (StringUtils.hasText(properties.getName())) {
				dataSource.setPoolName(properties.getName());
			}
			return dataSource;
		}

	}

由上述代碼可以發(fā)現(xiàn),默認(rèn)的配置源是HikariDataSource,但是有一個(gè)要求:

@ConditionalOnMissingBean(DataSource.class)

就是如果在容器中沒有數(shù)據(jù)源,下面代碼生效,也就是使用HikariDataSource,但是若容器中已經(jīng)有開發(fā)者創(chuàng)建的數(shù)據(jù)源,那么開發(fā)者創(chuàng)建的優(yōu)先。

在使用數(shù)據(jù)源的時(shí)候,不可避免地需要配置基本的屬性,如:url、用戶名、密碼、端口號(hào)等。所以我們可以將這些信息抽取出來,放到配置文件中,

這里我們采用yaml寫法application.yaml:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/vuesite
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

使用ConfigurationProperties注解來進(jìn)行屬性的綁定:

package com.xbhog.Config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
//配置數(shù)據(jù)源
public class MyDtaSourceConfig {
    @ConfigurationProperties("spring.datasource")  //屬性綁定 要加對(duì)位置
    @Bean
    public DataSource dataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();

        return druidDataSource;
    }
}

進(jìn)行單元測(cè)試:

package com.xbhog;

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

@SpringBootTest
@Slf4j
class FirstAdminApplicationTests {
    @Autowired
    DataSource dataSource;
    
    @Test
    void contextLoads() {
        log.info("數(shù)據(jù)類型:{}",dataSource.getClass());
    }
}

結(jié)果==> 數(shù)據(jù)類型:class com.alibaba.druid.pool.DruidDataSource

具體的配置綁定:個(gè)人博客

Druid中的其他功能

配置監(jiān)控頁:

貼心文檔鏈接:網(wǎng)頁地址

我們需要配置一個(gè)servlet配置,然后放到容器中,輸入賬號(hào)密碼,進(jìn)入鏈接地址即可訪問;

在配置數(shù)據(jù)源代碼下:

/**
* 配置監(jiān)控頁
*/
@Bean
public ServletRegistrationBean staViewServlet(){
    //實(shí)例化StatViewServlet
    StatViewServlet statViewServlet = new StatViewServlet();
	 //將實(shí)例化的實(shí)例化StatViewServlet 傳入ServletRegistrationBean,并設(shè)置訪問路徑
    ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(statViewServlet, "/druid/*");

    return registrationBean;
}

結(jié)果:

開啟登錄功能:

因?yàn)榈卿浽O(shè)置還是在servlet中設(shè)置的,所以相關(guān)信息暫略,貼一個(gè)文檔截圖:

代碼添加:

@Bean
public ServletRegistrationBean staViewServlet(){
    StatViewServlet statViewServlet = new StatViewServlet();

    ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(statViewServlet, "/druid/*");
    //配置登錄信息
    registrationBean.addInitParameter("loginUsername","admin");
    registrationBean.addInitParameter("loginPassword","123456");
    return registrationBean;
}

結(jié)果:

打開監(jiān)控統(tǒng)計(jì)功能:

測(cè)試Sql監(jiān)控功能。

網(wǎng)頁地址:

創(chuàng)建一個(gè)DruidDataSource組件,并配置其中的屬性filters的value為stat,這樣才能打開監(jiān)控功能。

所以我們?cè)趧?chuàng)建數(shù)據(jù)源的地方需要配置filters屬性:

public class MyDtaSourceConfig {
    @ConfigurationProperties("spring.datasource")
    @Bean
    public DataSource dataSource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        //加入監(jiān)控功能
        druidDataSource.setFilters("stat");
        return druidDataSource;
    }
}

也可以進(jìn)行屬性的配置來實(shí)現(xiàn)上述的效果:(第二種方法)

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/vuesite
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

    filters: stat
    tomcat:
      max-active: 12

然后設(shè)置一個(gè)請(qǐng)求,來測(cè)試監(jiān)控功能;

創(chuàng)建一個(gè)controller:

@Controller
public class tablecontro {

  	  @Autowired
    JdbcTemplate jdbcTemplate;

    @ResponseBody   //不經(jīng)過視圖解析器
    @GetMapping("/sql")
    public String druidquery(){
        Long aLong = jdbcTemplate.queryForObject("select count(*) from user",Long.class);
        return aLong.toString();
    }
}

先訪問localhost:8080/sql,然后進(jìn)入http://localhost:8080/druid/index.html頁面中的SQL監(jiān)控,即可查看執(zhí)行次數(shù)次數(shù)。

在最大并發(fā)的后面的有各種分布,可以參考官方文檔:Druid連接池介紹

開啟Web應(yīng)用功能:

基本上還是跟上面一樣的;

WebStatFilter用于采集web-jdbc關(guān)聯(lián)監(jiān)控的數(shù)據(jù)。

網(wǎng)頁地址

配置一個(gè)WebStatFilter,然后需要初始化exclusions,來排除一些不必要的url.得先進(jìn)行sql的請(qǐng)求

/**
     * WebStatFilter用于采集web-jdbc關(guān)聯(lián)監(jiān)控的數(shù)據(jù)。
     */
@Bean
public FilterRegistrationBean webRegistrationBean(){
    WebStatFilter webStatFilter = new WebStatFilter();
    FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>(webStatFilter);
    registrationBean.setUrlPatterns(Arrays.asList("/*"));
    //添加一些不必要的ulr,在初始化的時(shí)候就執(zhí)行
    registrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
    return  registrationBean;
}

結(jié)果:

Web應(yīng)用:

URL監(jiān)控

配置防火墻:

wallfilter

所以我們可以結(jié)合Filter一起使用,代碼如下:得先進(jìn)行sql的請(qǐng)求。

public class MyDtaSourceConfig {
    @ConfigurationProperties("spring.datasource")
    @Bean
    public DataSource dataSource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        //加入監(jiān)控功能
        druidDataSource.setFilters("stat,wall");
        return druidDataSource;
    }
}

結(jié)果:

參考文獻(xiàn)

Druid官方github地址

Druid中文文檔

引用

SpringBoot2零基礎(chǔ)入門springboot全套完整版

結(jié)束:

如果你看到這里或者正好對(duì)你有所幫助,希望能點(diǎn)個(gè)關(guān)注或者推薦,感謝;

有錯(cuò)誤的地方,歡迎在評(píng)論指出,作者看到會(huì)進(jìn)行修改。

到此這篇關(guān)于SpringBoot數(shù)據(jù)訪問自定義使用Druid數(shù)據(jù)源的方法的文章就介紹到這了,更多相關(guān)SpringBoot數(shù)據(jù)訪問使用Druid數(shù)據(jù)源內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java二叉查找樹的實(shí)現(xiàn)代碼

    java二叉查找樹的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了java二叉查找樹的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 詳解Java?@Documented注解的作用

    詳解Java?@Documented注解的作用

    @Documented和@Deprecated注解長得有點(diǎn)像,@Deprecated是用來標(biāo)注某個(gè)類或者方法不建議再繼續(xù)使用,@Documented只能用在注解上,本文將通過示例詳細(xì)說說@Documented注解的作用,需要的可以參考一下
    2022-09-09
  • Java通過FTP服務(wù)器上傳下載文件的方法

    Java通過FTP服務(wù)器上傳下載文件的方法

    本文介紹了如何使用Apache Jakarta Commons Net(commons-net-3.3.jar)基于FileZilla Server服務(wù)器實(shí)現(xiàn)FTP服務(wù)器上文件的上傳/下載/刪除等操作,需要的朋友可以參考下
    2015-07-07
  • 使用RocketMQTemplate發(fā)送帶tags的消息

    使用RocketMQTemplate發(fā)送帶tags的消息

    這篇文章主要介紹了使用RocketMQTemplate發(fā)送帶tags的消息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 一篇文章教你如何在SpringCloud項(xiàng)目中使用OpenFeign

    一篇文章教你如何在SpringCloud項(xiàng)目中使用OpenFeign

    這篇文章主要介紹了SpringCloud 使用Open feign 優(yōu)化詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-08-08
  • Kotlin 開發(fā)環(huán)境詳解及簡單實(shí)例

    Kotlin 開發(fā)環(huán)境詳解及簡單實(shí)例

    這篇文章主要介紹了 Kotlin 開發(fā)環(huán)境詳解及簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 淺談JVM系列之從匯編角度分析NullCheck

    淺談JVM系列之從匯編角度分析NullCheck

    在virtual call中執(zhí)行nullcheck的時(shí)候,如果已經(jīng)知道傳遞的參數(shù)是非空的。JIT會(huì)對(duì)代碼進(jìn)行優(yōu)化嗎?本文將詳細(xì)介紹JVM系列之從匯編角度分析NullCheck。
    2021-06-06
  • Mybatis動(dòng)態(tài)元素if的使用方式

    Mybatis動(dòng)態(tài)元素if的使用方式

    這篇文章主要介紹了Mybatis動(dòng)態(tài)元素if的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 淺談同步監(jiān)視器之同步代碼塊、同步方法

    淺談同步監(jiān)視器之同步代碼塊、同步方法

    下面小編就為大家?guī)硪黄獪\談同步監(jiān)視器之同步代碼塊、同步方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • java實(shí)現(xiàn)線程阻塞式方法

    java實(shí)現(xiàn)線程阻塞式方法

    Java阻塞式方法會(huì)使線程暫停執(zhí)行,不占用CPU資源直至條件滿足,常見阻塞方法如Thread.sleep()、Object.wait()和I/O操作,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-10-10

最新評(píng)論

紫金县| 建平县| 文安县| 中西区| 尼玛县| 鞍山市| 衡东县| 方山县| 沙雅县| 若羌县| 镇原县| 汝城县| 翼城县| 顺义区| 江油市| 正蓝旗| 筠连县| 莱阳市| 清水河县| 西乌| 沙雅县| 星子县| 城步| 丰城市| 南皮县| 南康市| 元氏县| 鄂州市| 贺兰县| 涡阳县| 额敏县| 寿阳县| 土默特右旗| 尚义县| 依安县| 原阳县| 博罗县| 珠海市| 仁布县| 沈阳市| 塘沽区|