欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot整合Mybatis-Plus+Druid實(shí)現(xiàn)多數(shù)據(jù)源配置功能

 更新時間:2023年06月09日 09:02:38   作者:夢隨風(fēng)揚(yáng)  
本文主要講解springboot?+mybatisplus?+?druid?實(shí)現(xiàn)多數(shù)據(jù)源配置功能以及一些必要的準(zhǔn)備及代碼說明,具有一定的參考價值,感興趣的小伙伴可以借鑒一下

SpringBoot :
Spring Boot是一個基于Spring框架的開源Java開發(fā)框架,旨在簡化Spring應(yīng)用程序的開發(fā)、配置和部署。它提供了一種快速、敏捷的方式來構(gòu)建獨(dú)立的、生產(chǎn)級別的Spring應(yīng)用程序,同時還提供了許多開箱即用的功能和工具,如自動配置、內(nèi)嵌式Web容器、健康檢查、監(jiān)控和管理等。
Mybatis-Plus:
Mybatis-Plus是一個基于Mybatis的增強(qiáng)工具,它在Mybatis的基礎(chǔ)上擴(kuò)展了許多實(shí)用的功能,可以幫助開發(fā)人員更加高效地完成數(shù)據(jù)庫操作,提高開發(fā)效率和代碼質(zhì)量。
Druid:
Druid是一個高性能的數(shù)據(jù)庫連接池,它可以與各種關(guān)系型數(shù)據(jù)庫進(jìn)行集成,如MySQL、Oracle、PostgreSQL等。Druid提供了可擴(kuò)展、高可用、高性能的數(shù)據(jù)庫連接管理功能,可以幫助開發(fā)人員更加高效地完成數(shù)據(jù)庫操作。

有了基本的理解 接下來我們用這些組合實(shí)現(xiàn)多數(shù)據(jù)源功能

??1. pom.xml 添加依賴

加入一些必要的依賴:

這里是引用

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--spring-boot-web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.2</version>
        </dependency>
        <!-- druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.16</version>
        </dependency>
	   <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--   mysql     -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>

??2. application.yml

多數(shù)據(jù)源的一個簡單yml配置:

spring:
  datasource:
    druid:
      initial-size: 5
      min-idle: 5
      max-active: 5
      db1:
        url: jdbc:mysql://localhost:6030/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&useInformationSchema=true
        username: root
        password: root
        driver-class-name: com.mysql.cj.jdbc.Driver
      db2:
        url: jdbc:mysql://localhost:6030/demo1?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&useInformationSchema=true
        username: root
        password: root
        driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: false

? 3. 排除默認(rèn)加載

在項目啟動類中排除druid屬性默認(rèn)加載(也可以直接在配置中加載 我的項目配置沒有成功就直接用這種方式了)
不加這個多數(shù)據(jù)源可能無法都加載出來

@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)

?? 4. Mybatis-Plus 配置

添加mybatisplus的多數(shù)據(jù)源配置

@Configuration
public class MybatisPlusConfig {
    /** mybatis 3.4.1 pagination config start ***/
    @Bean
    public PaginationInterceptor paginationInterceptor() {
		//        return new PaginationInterceptor();
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        paginationInterceptor.setDialectType("postgresql");
        return paginationInterceptor;
    }
    /**
     * SQL執(zhí)行效率插件(優(yōu)化sql的執(zhí)行效率 不需要可以不加)
     * 
     */
    @Bean
    @Profile({"dev","qa"})// 設(shè)置 dev test 環(huán)境開啟
    public PerformanceInterceptor performanceInterceptor() {
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        performanceInterceptor.setMaxTime(1000);
        performanceInterceptor.setFormat(true);
        return performanceInterceptor;
    }
	/**
	 * 多數(shù)據(jù)源的創(chuàng)建 有幾個就寫幾個 
	 */
    @Bean(name = "db1")
    @ConfigurationProperties(prefix = "spring.datasource.druid.db1" )
    public DataSource db1() {
        return DruidDataSourceBuilder.create().build();
    }
    @Bean(name = "db2")
    @ConfigurationProperties(prefix = "spring.datasource.druid.db2" )
    public DataSource db2() {
        return DruidDataSourceBuilder.create().build();
    }
    /**
     * 動態(tài)數(shù)據(jù)源配置
     * @return
     */
    @Bean
    @Primary
    public DataSource multipleDataSource(@Qualifier("db1") DataSource db1, @Qualifier("db2") DataSource db2) {
        DynamicDataSource dynamicDataSource = new DynamicDataSource();
        Map< Object, Object > targetDataSources = new HashMap<>();
        targetDataSources.put(DataSourceEnum.DB1.getValue(), db1);
        targetDataSources.put(DataSourceEnum.DB2.getValue(), db2);
        //添加數(shù)據(jù)源
        dynamicDataSource.setTargetDataSources(targetDataSources);
        //設(shè)置默認(rèn)數(shù)據(jù)源
        dynamicDataSource.setDefaultTargetDataSource(db1);
        return dynamicDataSource;
    }
    @Bean("sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(multipleDataSource(db1(),db2()));
        //sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/*/*Mapper.xml"));
        MybatisConfiguration configuration = new MybatisConfiguration();
        //configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
        configuration.setJdbcTypeForNull(JdbcType.NULL);
        configuration.setMapUnderscoreToCamelCase(true);
        configuration.setCacheEnabled(false);
        sqlSessionFactory.setConfiguration(configuration);
        sqlSessionFactory.setPlugins(new Interceptor[]{
                //PerformanceInterceptor(),OptimisticLockerInterceptor()
                paginationInterceptor()
                //添加分頁功能
        });
        //sqlSessionFactory.setGlobalConfig(globalConfiguration());
        return sqlSessionFactory.getObject();
    }
}

??5. 多數(shù)據(jù)源實(shí)例:

?? 5.1 DataSourceEnum

枚舉:

public enum DataSourceEnum {
    DB1("db1"),DB2("db2");
    private String value;
    DataSourceEnum(String value){this.value=value;}
    public String getValue() {
        return value;
    }
}

?? 5.2 DataSource

自定義多數(shù)據(jù)源切換:

/** 
 * 自定義多數(shù)據(jù)源切換
 * @author zzh
 * @date 2023/4/28 15:19:21
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface DataSource {
    DataSourceEnum value() default DataSourceEnum.DB1;
}

?? 5.3 DataSourceAspect

切面處理類:

@Aspect
@Order(1)
@Component
public class DataSourceAspect {
    @Pointcut("@annotation(com.taosdata.example.mybatisplusdemo.datasource.annotation.DataSource)"
            + "|| @within(com.taosdata.example.mybatisplusdemo.datasource.annotation.DataSource)")
    public void dsPc() {
    }
    @Before("dsPc()  && @annotation(dataSource)")
    public void doBefore(DataSource dataSource)  {
        DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().getValue());
    }
    @After("dsPc()")
    public void doAfter() {
        DynamicDataSourceContextHolder.clearDataSourceType();
    }
}

?? 5.4 DruidConfiguration

driud配置類 配置啟動視圖和過濾規(guī)則

@Configuration
public class DruidConfiguration {
    @Bean
    public ServletRegistrationBean startViewServlet(){
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
        // IP白名單
        servletRegistrationBean.addInitParameter("allow","127.0.0.1");
        // IP黑名單(共同存在時,deny優(yōu)先于allow)
        servletRegistrationBean.addInitParameter("deny","127.0.0.1");
        //控制臺管理用戶
        servletRegistrationBean.addInitParameter("loginUsername","admin");
        servletRegistrationBean.addInitParameter("loginPassword","123456");
        //是否能夠重置數(shù)據(jù)
        servletRegistrationBean.addInitParameter("resetEnable","false");
        return servletRegistrationBean;
    }
    @Bean
    public FilterRegistrationBean statFilter(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        //添加過濾規(guī)則
        filterRegistrationBean.addUrlPatterns("/*");
        //忽略過濾的格式
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}

?? 5.5 DynamicDataSource

動態(tài)數(shù)據(jù)源決策

public class DynamicDataSource extends AbstractRoutingDataSource {
    /**
     * @description:  動態(tài)數(shù)據(jù)源決策
     * @return
     */
    @Override
    protected Object determineCurrentLookupKey() {
        String dataSourceType = DynamicDataSourceContextHolder.getDataSourceType();
        return dataSourceType;
    }
}

?? 5.6 DynamicDataSourceContextHolder

多數(shù)據(jù)源上下文

public class DynamicDataSourceContextHolder {
    public static final Logger log = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class);
    /**
     * 使用ThreadLocal維護(hù)變量,ThreadLocal為每個使用該變量的線程提供獨(dú)立的變量副本,
     * 所以每一個線程都可以獨(dú)立地改變自己的副本,而不會影響其它線程所對應(yīng)的副本。
     */
    private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();
    /**
     * 設(shè)置數(shù)據(jù)源的變量
     */
    public static void setDataSourceType(String dsType) {
        log.info("切換到{}數(shù)據(jù)源", dsType);
        CONTEXT_HOLDER.set(dsType);
    }
    /**
     * 獲得數(shù)據(jù)源的變量
     */
    public static String getDataSourceType() {
        return CONTEXT_HOLDER.get();
    }
    /**
     * 清空數(shù)據(jù)源變量
     */
    public static void clearDataSourceType() {
        CONTEXT_HOLDER.remove();
    }
}

?? 總結(jié):

至此,一個非常簡單的多數(shù)據(jù)源配置就基本搞定了。

以上就是SpringBoot+Mybatis-Plus+Druid實(shí)現(xiàn)多數(shù)據(jù)源配置功能的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Druid多數(shù)據(jù)源的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java DOM4J 讀取XML實(shí)例代碼

    java DOM4J 讀取XML實(shí)例代碼

    最近學(xué)習(xí)Java,在處理XML文檔的時候,查閱相關(guān)資料,發(fā)現(xiàn)了DOM4J這個jre庫,相對C#的XML處理來說,功能還算是跟得
    2013-09-09
  • Curator實(shí)現(xiàn)zookeeper的節(jié)點(diǎn)監(jiān)聽詳解

    Curator實(shí)現(xiàn)zookeeper的節(jié)點(diǎn)監(jiān)聽詳解

    這篇文章主要介紹了Curator實(shí)現(xiàn)zookeeper的節(jié)點(diǎn)監(jiān)聽詳解,Curtor框架中一共有三個實(shí)現(xiàn)監(jiān)聽的方式,一種是NodeCache監(jiān)聽指定節(jié)點(diǎn),一種是pathChildrenCache監(jiān)聽子節(jié)點(diǎn),一種是TreeCache可以監(jiān)控所有節(jié)點(diǎn) 相當(dāng)于以上兩種的合集,需要的朋友可以參考下
    2023-12-12
  • 使用maven項目pom.xml文件配置打包功能和靜態(tài)資源文件自帶版本號功能

    使用maven項目pom.xml文件配置打包功能和靜態(tài)資源文件自帶版本號功能

    在Maven項目中,通過pom.xml文件配置打包功能,可以控制構(gòu)建過程,生成可部署的包,同時,為了緩存控制與版本更新,可以在打包時給靜態(tài)資源文件如JS、CSS添加版本號,這通常通過插件如maven-resources-plugin實(shí)現(xiàn)
    2024-09-09
  • mybatis中sql語句CDATA標(biāo)簽的用法說明

    mybatis中sql語句CDATA標(biāo)簽的用法說明

    這篇文章主要介紹了mybatis中sql語句CDATA標(biāo)簽的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 基于Springboot實(shí)現(xiàn)JWT認(rèn)證的示例代碼

    基于Springboot實(shí)現(xiàn)JWT認(rèn)證的示例代碼

    本文主要介紹了基于Springboot實(shí)現(xiàn)JWT認(rèn)證,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • SpringBoot集成jjwt和使用方式

    SpringBoot集成jjwt和使用方式

    本文詳細(xì)介紹了JWT依賴(以jjwt為例)的引入和使用方法,首先,需要在項目中引入jwt依賴,隨后在Spring的啟動類application.yml中進(jìn)行相應(yīng)配置,最后,提供了一份完整的jwt工具類代碼,供讀者直接使用,以上內(nèi)容便是作者的個人經(jīng)驗分享,期望能為讀者提供參考并得到支持
    2024-10-10
  • Java concurrency之LockSupport_動力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency之LockSupport_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了Java concurrency之LockSupport的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 詳解SpringBoot中添加@ResponseBody注解會發(fā)生什么

    詳解SpringBoot中添加@ResponseBody注解會發(fā)生什么

    這篇文章主要介紹了詳解SpringBoot中添加@ResponseBody注解會發(fā)生什么,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Idea集成ApiFox插件及使用小結(jié)

    Idea集成ApiFox插件及使用小結(jié)

    本文介紹了如何使用Apifox和IntelliJ IDEA插件來整理和生成接口文檔,包括配置Apifox和IntelliJ IDEA插件、代碼案例以及使用方法,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Mybatis如何動態(tài)創(chuàng)建表

    Mybatis如何動態(tài)創(chuàng)建表

    這篇文章主要介紹了Mybatis如何動態(tài)創(chuàng)建表問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評論