国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Springboot+Druid配置多數(shù)據(jù)源

這篇具有很好參考價值的文章主要介紹了Springboot+Druid配置多數(shù)據(jù)源。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Druid數(shù)據(jù)庫多數(shù)據(jù)源

Spring的多數(shù)據(jù)源支持—AbstractRoutingDataSource,AbstractRoutingDataSource定義了抽象的determineCurrentLookupKey方法,子類實現(xiàn)此方法,來確定要使用的數(shù)據(jù)源

Druid 實現(xiàn)多數(shù)據(jù)源支持,核心是Overwrite AbstractRoutingDataSource 的 determineCurrentLookupKey 方法

public abstract class AbstractRoutingDataSource extends AbstractDataSource implements InitializingBean {
	 protected DataSource determineTargetDataSource() {
		Assert.notNull(this.resolvedDataSources, "DataSource router not initialized");
		Object lookupKey = determineCurrentLookupKey();
		DataSource dataSource = this.resolvedDataSources.get(lookupKey);
		if (dataSource == null && (this.lenientFallback || lookupKey == null)) {
			dataSource = this.resolvedDefaultDataSource;
		}
		if (dataSource == null) {
			throw new IllegalStateException("Cannot determine target DataSource for 	             lookup key [" + lookupKey + "]");
		}
		return dataSource;
	}

        // 確定當(dāng)前要使用的數(shù)據(jù)源
        protected abstract Object determineCurrentLookupKey();
}

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

以springboot框架為基礎(chǔ)使用aop注解的方式依賴Druid配置多數(shù)據(jù)源

1.添加依賴

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	
		<!-- aop注解實現(xiàn)aspectjweaver依賴 -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.9.6</version>
		</dependency>
		<!-- mybatis-spring-boot-starter -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.1.3</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.28</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.2.8</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.12</version>
			<scope>provided</scope>
		</dependency>

2.配置Druid屬性

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    first:
      url: jdbc:mysql://localhost:3306/***?useUnicode=true&characterEncoding=utf-                  8&serverTimezone=UTC
      username: root
      password: *****
    second:
      enable: true
      url: jdbc:mysql://localhost:3306/***?useUnicode=true&characterEncoding=utf-                 8&serverTimezone=UTC
      username: root
      password: *****
    druid:
      # 初始連接數(shù)
      initialSize: 5
      # 最小連接池數(shù)量
      minIdle: 10
      # 最大連接池數(shù)量
      maxActive: 20
      # 配置獲取連接等待超時的時間
      maxWait: 60000
      # 配置間隔多久才進(jìn)行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # 配置一個連接在池中最小生存的時間,單位是毫秒
      minEvictableIdleTimeMillis: 300000
      # 配置一個連接在池中最大生存的時間,單位是毫秒
      maxEvictableIdleTimeMillis: 900000
      # 配置檢測連接是否有效
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      webStatFilter:
        enabled: true
      statViewServlet:
        enabled: true
        # 控制臺管理用戶名和密碼
        login-username: admin
        login-password: 123456
      #配置監(jiān)控統(tǒng)計攔截的filters:stat:監(jiān)控統(tǒng)計、self4j(使用log4j的記得導(dǎo)入log4j的依賴):日志記錄、          wall:防御sql注入 此處配置不能遺漏服務(wù)sql監(jiān)控臺不能監(jiān)控sql
      filters: stat,wall,log4j2
      filter:
        stat:
          enabled: true
          # 慢SQL記錄
          log-slow-sql: true
          slow-sql-millis: 1000
          merge-sql: true
        wall:
          enabled: true
          config:
            multi-statement-allow: true

3.配置動態(tài)數(shù)據(jù)源

繼承AbstractRoutingDataSource重寫determineCurrentLookupKey()方法


/**
 * 動態(tài)數(shù)據(jù)源
 */
public class DynamicDatesource extends AbstractRoutingDataSource {

    public DynamicDatesource(DataSource dataSource,HashMap<Object, Object> map){
        super.setDefaultTargetDataSource(dataSource);
        super.setTargetDataSources(map);
        super.afterPropertiesSet();
    }

    /**
     * 獲取key指定數(shù)據(jù)源
     * @return
     */
    @Override
    protected Object determineCurrentLookupKey() {
        return DynamicDateSourceCut.getLocal();
    }
}

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

//配置數(shù)據(jù)源
@Configuration
public class DruidConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.first")
    public DataSource firstDataSource(DruidSourceProperties druidSourceProperties){

        return druidSourceProperties.dataSource(new DruidDataSourceWrapper());
    }
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.second")
    @ConditionalOnProperty(prefix ="spring.datasource.second",name ="enable",havingValue = "true")
    public DataSource secondDataSource(DruidSourceProperties druidSourceProperties){
        return druidSourceProperties.dataSource(new DruidDataSourceWrapper());
    }
    @Bean
    @Primary//在多數(shù)據(jù)源的時候,使用@Primary注解用于指定其中一個作為主數(shù)據(jù)源
    public DynamicDatesource setDymaicDatesource(DataSource firstDataSource){
        HashMap<Object, Object> map = new HashMap<>();
        map.put(DateSourceType.FIRST.name(),firstDataSource);
        setDataSource(map,DateSourceType.SECOND.name(),"secondDataSource");
        return new DynamicDatesource(firstDataSource,map);
    }
    /**
     * 設(shè)置數(shù)據(jù)源
     *
     * @param targetDataSources 備選數(shù)據(jù)源集合
     * @param sourceName 數(shù)據(jù)源名稱
     * @param beanName bean名稱
     */
    public void setDataSource(Map<Object, Object> targetDataSources, String sourceName, 		String beanName){
        try {
            DataSource dataSource = SpringUtils.getBean(beanName);
            targetDataSources.put(sourceName, dataSource);
        } catch (Exception e){

        }
    }
}

4.配置數(shù)據(jù)源切換

package com.example.springboot.data;
/**
*數(shù)據(jù)源切換 保存每個數(shù)據(jù)源指定的lookupKey
*/
public class DynamicDateSourceCut {
    /**
     * 使用ThreadLocal維護(hù)變量,ThreadLocal為每個使用該變量的線程提供獨立的變量副本,
     *  所以每一個線程都可以獨立地改變自己的副本,而不會影響其它線程所對應(yīng)的副本。
     */

    private static ThreadLocal<String> threadLocal=new ThreadLocal<>();

    /**
     * 設(shè)置數(shù)據(jù)源的變量
     */
    public static void setLocal(String local){
        threadLocal.set(local);

    }
    /**
     * 獲得數(shù)據(jù)源的變量
     */
    public static String getLocal(){
        return threadLocal.get();

    }
    /**
     * 清空數(shù)據(jù)源變量
     */
    public static void clearLocl() {
        threadLocal.remove();
    }
}

5.定義aop切面實現(xiàn)

/**
 * 定義數(shù)據(jù)源切面
 */
@Aspect
@Component
public class DateSourceAspect {

    private static final Logger log= LoggerFactory.getLogger(DateSourceAspect.class);

    /**
     * 定義切點  使用注解
     * @within類注解
     * @annotation方法注解
     */
    @Pointcut("@annotation(com.example.springboot.aspect.DateSource)"+
             "||@within(com.example.springboot.aspect.DateSource)")
    public void PintCut(){

    }
    /**
     * 通知使用環(huán)繞的通知方法
     */
    @Around("PintCut()")
    public Object ResovePoint(ProceedingJoinPoint point) throws Throwable {
        //獲取注解
        DateSource dateSource = getDateSource(point);
        if (dateSource!=null){
            DynamicDateSourceCut.setLocal(dateSource.value().name());
        }
        try {
            //執(zhí)行方法
           return point.proceed();
        } finally {
            // 銷毀數(shù)據(jù)源 在執(zhí)行方法之后
            DynamicDateSourceCut.clearLocl();
        }

    }

    /**
     * 獲取注解
     */
    protected DateSource getDateSource(ProceedingJoinPoint point){
        MethodSignature signature = (MethodSignature) point.getSignature();
        //獲取方法或方法類型上的注解
        DateSource annotation;
        //獲取class類型上注解
        annotation=AnnotationUtils.findAnnotation(signature.getDeclaringType(),DateSource.class);
        if (annotation==null){
            annotation = AnnotationUtils.findAnnotation(signature.getMethod(), DateSource.class);
        }
        return annotation;
    }
}

定義的注解和注解值文章來源地址http://www.zghlxwxcb.cn/news/detail-515391.html


/**
 * 定義注解
 */
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DateSource {
    DateSourceType value()default DateSourceType.FIRST;
}


/**
*使用枚舉定義注解的值
*/

public enum DateSourceType {
    //默認(rèn)數(shù)據(jù)庫
    FIRST,
    SECOND;
}

到了這里,關(guān)于Springboot+Druid配置多數(shù)據(jù)源的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • SpringBoot整合Druid配置多數(shù)據(jù)源

    SpringBoot整合Druid配置多數(shù)據(jù)源

    目錄 1.初始化項目 1.1.初始化工程 1.2.添加依賴 1.3.配置yml文件 1.4.Spring Boot 啟動類中添加?@MapperScan?注解,掃描 Mapper 文件夾 1.5.配置使用數(shù)據(jù)源 1.5.1.注解方式 1.5.2.基于AOP手動實現(xiàn)多數(shù)據(jù)源原生的方式 2.結(jié)果展示 Mybatis-Plus:簡介 | MyBatis-Plus (baomidou.com) 在正式開始之前,先初始

    2024年02月01日
    瀏覽(38)
  • springboot整合druid及多數(shù)據(jù)源配置

    springboot整合druid及多數(shù)據(jù)源配置

    本篇主要分兩部分 ①springboot整合druid的代碼配置,以及druid的監(jiān)控頁面演示;②對實際場景中多數(shù)據(jù)源的配置使用進(jìn)行講解。 可以用idea快速生成一個可運行的demo工程,具體可以參考如何快速創(chuàng)建springboot項目 主要用到的依賴如下: ?配置數(shù)據(jù)庫需要的配置文件application.yml( 注

    2024年02月12日
    瀏覽(31)
  • springboot實現(xiàn)多數(shù)據(jù)源配置(Druid/Hikari)

    springboot實現(xiàn)多數(shù)據(jù)源配置(Druid/Hikari)

    使用springboot+mybatis-plus+(Druid/Hikari)實現(xiàn)多數(shù)據(jù)源配置 操作步驟: 引入相應(yīng)的maven坐標(biāo) 編寫mybatis配置,集成mybatis或mybatis-plus(如果已集成可跳過) 編寫數(shù)據(jù)源配置類 編寫注解,并通過aop進(jìn)行增強(編寫數(shù)據(jù)源切換代碼) 類或方法中使用注解,對數(shù)據(jù)源進(jìn)行切換 第一步:

    2024年02月13日
    瀏覽(25)
  • springboot配置自定義數(shù)據(jù)源(Druid德魯伊)的步驟。

    springboot配置自定義數(shù)據(jù)源(Druid德魯伊)的步驟。

    今天和大家分享下在Springboot中配置自定義數(shù)據(jù)源Druid的兩種方法及步驟。 方法一: 1.在pom.xml配置依賴(注釋里面的內(nèi)容) 2.配置自己的數(shù)據(jù)源設(shè)置,我是在yaml文件中配置的,順便提醒一下,在配置yaml文件的時候縮進(jìn)問題一定要注意,不然無法讀取到就會報錯。 spring: datasourc

    2024年02月15日
    瀏覽(23)
  • SpringBoot整合Mybatis-Plus、Druid配置多數(shù)據(jù)源

    SpringBoot整合Mybatis-Plus、Druid配置多數(shù)據(jù)源

    目錄 1.初始化項目 1.1.初始化工程 1.2.添加依賴 1.3.配置yml文件 1.4.Spring Boot 啟動類中添加?@MapperScan?注解,掃描 Mapper 文件夾 1.5.配置使用數(shù)據(jù)源 1.5.1.注解方式 1.5.2.基于AOP手動實現(xiàn)多數(shù)據(jù)源原生的方式 2.結(jié)果展示 Mybatis-Plus:簡介 | MyBatis-Plus (baomidou.com) 在正式開始之前,先初始

    2024年02月11日
    瀏覽(24)
  • Dynamic DataSource 多數(shù)據(jù)源配置【 Springboot + DataSource + MyBatis Plus + Druid】

    Dynamic DataSource 多數(shù)據(jù)源配置【 Springboot + DataSource + MyBatis Plus + Druid】

    MybatisPlus多數(shù)據(jù)源配置主要解決的是多數(shù)據(jù)庫連接和切換的問題。在一些大型應(yīng)用中,由于數(shù)據(jù)量的增長或者業(yè)務(wù)模塊的增多,可能需要訪問多個數(shù)據(jù)庫。這時,就需要配置多個數(shù)據(jù)源。 2.1.1、引用依賴 2.1.2、application.yml 配置 2.1.3、通用配置類 2.1.4、使用方式 這里便不過多的

    2024年02月03日
    瀏覽(32)
  • JAVA:Springboot動態(tài)裝配Druid多數(shù)據(jù)源

    JAVA:Springboot動態(tài)裝配Druid多數(shù)據(jù)源

    1、簡介 最近打算搭建一個鑒權(quán)中心服務(wù),采用springboot+FastMybatis裝配Druid,考慮后續(xù)拓展采用Druid多數(shù)據(jù)源配置,以一個數(shù)據(jù)源為主,多個動態(tài)數(shù)據(jù)源為輔的結(jié)構(gòu)。除了數(shù)據(jù)庫,后續(xù)會結(jié)合shiro安全框架來搭建。 2、引用 在pom.xml添加框架Springboot +FastMybatis + Druid相關(guān)maven引用。

    2024年02月09日
    瀏覽(22)
  • Druid監(jiān)控 + 多數(shù)據(jù)源配置

    Druid監(jiān)控 + 多數(shù)據(jù)源配置

    先貼一下用的依賴項。 yaml配置文件的配置。 負(fù)責(zé)讀取yaml文件的數(shù)據(jù)源配置,生成數(shù)據(jù)源。還有創(chuàng)建動態(tài)數(shù)據(jù)源容器。另外ServletRegistrationBean 和?FilterRegistrationBean的配置和生成。 就是我們的動態(tài)數(shù)據(jù)源,負(fù)責(zé)繼承和初始化 AbstractRoutingDataSource。還有就是重寫determineCurrentLookupKe

    2024年01月22日
    瀏覽(26)
  • SpringBoot3整合Druid數(shù)據(jù)源的解決方案

    SpringBoot3整合Druid數(shù)據(jù)源的解決方案

    druid-spring-boot-3-starter目前最新版本是1.2.20,雖然適配了SpringBoot3,但缺少自動裝配的配置文件,會導(dǎo)致加載時報加載驅(qū)動異常。 需要手動在resources目錄下創(chuàng)建 META-INF/spring/ 目錄,并且在 META-INF/spring/ 創(chuàng)建 org.springframework.boot.autoconfigure.AutoConfiguration.imports , 文件中添加如下內(nèi)容

    2024年03月09日
    瀏覽(39)
  • SpringBoot -02 SpringBoot整合Mybatis、Druid數(shù)據(jù)源、單元測試、JSP

    mybatis起步依賴 mysql啟動依賴 數(shù)據(jù)源配置 mybatis相關(guān)配置 加載mybatis配置文件 mybatis別名配置 日志配置 加載mapper映射文件配置文件 http://localhost:8080/users Druid連接池后臺監(jiān)控:http://localhost:8080/druid/index.html SpringBoot對JSP的支持不是很友好,所以JSP很少被使用 springboot 不支持jsp 但是

    2024年02月06日
    瀏覽(54)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包