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

用Java基于Spring框架搭建一套支持多數(shù)據(jù)源的web系統(tǒng)框架

這篇具有很好參考價(jià)值的文章主要介紹了用Java基于Spring框架搭建一套支持多數(shù)據(jù)源的web系統(tǒng)框架。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

在使用Java Spring框架搭建支持多數(shù)據(jù)源的Web系統(tǒng)框架時(shí),你可以按照以下步驟進(jìn)行:

步驟一:添加依賴

首先,在pom.xml文件中添加Spring Boot和相關(guān)數(shù)據(jù)庫(kù)依賴:

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot Starter Data JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- 數(shù)據(jù)庫(kù)驅(qū)動(dòng)依賴,例如MySQL -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>

步驟二:配置多數(shù)據(jù)源

  1. 創(chuàng)建多個(gè)數(shù)據(jù)源配置類,每個(gè)數(shù)據(jù)源對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)連接:
  2. @Configuration
    @EnableTransactionManagement
    public class DataSourceConfig {
    
        @Bean(name = "dataSource1")
        @ConfigurationProperties(prefix = "spring.datasource.datasource1")
        public DataSource dataSource1() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "entityManagerFactory1")
        public LocalContainerEntityManagerFactoryBean entityManagerFactory1(
                EntityManagerFactoryBuilder builder,
                @Qualifier("dataSource1") DataSource dataSource) {
            return builder
                    .dataSource(dataSource)
                    .packages("com.example.domain.datasource1")
                    .persistenceUnit("datasource1")
                    .build();
        }
    
        @Bean(name = "transactionManager1")
        public PlatformTransactionManager transactionManager1(
                @Qualifier("entityManagerFactory1") EntityManagerFactory entityManagerFactory) {
            return new JpaTransactionManager(entityManagerFactory);
        }
    }
    
  3. 配置?application.properties?文件,設(shè)置多數(shù)據(jù)源的連接信息:
    ## 數(shù)據(jù)源1配置
    spring.datasource.datasource1.url=jdbc:mysql://localhost:3306/db1
    spring.datasource.datasource1.username=root
    spring.datasource.datasource1.password=rootPassword
    spring.datasource.datasource1.driver-class-name=com.mysql.cj.jdbc.Driver
    
    ## 數(shù)據(jù)源2配置
    spring.datasource.datasource2.url=jdbc:mysql://localhost:3306/db2
    spring.datasource.datasource2.username=root
    spring.datasource.datasource2.password=rootPassword
    spring.datasource.datasource2.driver-class-name=com.mysql.cj.jdbc.Driver
    

    步驟三:定義實(shí)體類和Repository

  4. 創(chuàng)建實(shí)體類和對(duì)應(yīng)的Repository接口,分別對(duì)應(yīng)不同的數(shù)據(jù)源。
  5. 步驟四:創(chuàng)建Controller

    編寫Controller類,處理業(yè)務(wù)邏輯,并根據(jù)需要調(diào)用不同數(shù)據(jù)源的Repository。

    @Configuration
    public class DataSourceConfig {
    
        @Primary
        @Bean(name = "dataSource1")
        @ConfigurationProperties(prefix = "spring.datasource.datasource1")
        public DataSource dataSource1() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "entityManagerFactory1")
        public LocalContainerEntityManagerFactoryBean entityManagerFactory1(EntityManagerFactoryBuilder builder,
                                                                           @Qualifier("dataSource1") DataSource dataSource) {
            return builder
                    .dataSource(dataSource)
                    .packages("com.example.entity1")
                    .persistenceUnit("dataSource1")
                    .build();
        }
    
        @Bean(name = "transactionManager1")
        public PlatformTransactionManager transactionManager1(@Qualifier("entityManagerFactory1") EntityManagerFactory entityManagerFactory) {
            return new JpaTransactionManager(entityManagerFactory);
        }
    
        @Bean(name = "dataSource2")
        @ConfigurationProperties(prefix = "spring.datasource.datasource2")
        public DataSource dataSource2() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "entityManagerFactory2")
        public LocalContainerEntityManagerFactoryBean entityManagerFactory2(EntityManagerFactoryBuilder builder,
                                                                           @Qualifier("dataSource2") DataSource dataSource) {
            return builder
                    .dataSource(dataSource)
                    .packages("com.example.entity2")
                    .persistenceUnit("dataSource2")
                    .build();
        }
    
        @Bean(name = "transactionManager2")
        public PlatformTransactionManager transactionManager2(@Qualifier("entityManagerFactory2") EntityManagerFactory entityManagerFactory) {
            return new JpaTransactionManager(entityManagerFactory);
        }
    }
    

    在這段代碼中,我們配置了兩個(gè)數(shù)據(jù)源(dataSource1dataSource2),每個(gè)數(shù)據(jù)源都有對(duì)應(yīng)的實(shí)體管理工廠(entityManagerFactory1entityManagerFactory2)以及事務(wù)管理器(transactionManager1transactionManager2)。

    步驟五:使用多數(shù)據(jù)源

    在服務(wù)或業(yè)務(wù)邏輯中,根據(jù)需要使用不同的數(shù)據(jù)源??梢酝ㄟ^(guò)在Repository中指定數(shù)據(jù)源的方式來(lái)實(shí)現(xiàn):

    @Repository
    public interface UserRepository extends JpaRepository<User, Long> {
        // 使用第一個(gè)數(shù)據(jù)源
    }
    
    @Repository
    public interface ProductRepository extends JpaRepository<Product, Long> {
        // 使用第二個(gè)數(shù)據(jù)源
    }
    

    步驟六:配置多數(shù)據(jù)源交換

    在需要切換數(shù)據(jù)源的地方,可以使用@Primary@Qualifier注解來(lái)指定使用哪個(gè)數(shù)據(jù)源。比如在Service層或Controller層中:

    @Service
    public class UserService {
        
        @Autowired
        @Qualifier("userRepository")
        private UserRepository userRepository;
    
        // 使用第一個(gè)數(shù)據(jù)源的Repository操作數(shù)據(jù)
    }
    
    @Service
    public class ProductService {
    
        @Autowired
        @Qualifier("productRepository")
        private ProductRepository productRepository;
    
        // 使用第二個(gè)數(shù)據(jù)源的Repository操作數(shù)據(jù)
    }
    

    步驟七:測(cè)試多數(shù)據(jù)源功能

    最后,通過(guò)編寫測(cè)試用例來(lái)驗(yàn)證多數(shù)據(jù)源的功能是否正常工作??梢苑謩e測(cè)試不同數(shù)據(jù)源的讀寫操作,以確保整個(gè)系統(tǒng)的多數(shù)據(jù)源支持已經(jīng)成功搭建。在這段代碼中,我們使用了@EnableJpaRepositories注解分別為兩個(gè)數(shù)據(jù)源配置了不同的JpaRepository包路徑、實(shí)體管理工廠引用和事務(wù)管理器引用。這樣就可以確保每個(gè)數(shù)據(jù)源的JpaRepository都能正確地與對(duì)應(yīng)的實(shí)體管理工廠和事務(wù)管理器關(guān)聯(lián)起來(lái)。

    @EnableJpaRepositories(
            basePackages = "com.example.repository1",
            entityManagerFactoryRef = "entityManagerFactory1",
            transactionManagerRef = "transactionManager1"
    )
    public class DataSource1JpaConfig {
        // 這里配置針對(duì)dataSource1的JpaRepository
    }
    
    @EnableJpaRepositories(
            basePackages = "com.example.repository2",
            entityManagerFactoryRef = "entityManagerFactory2",
            transactionManagerRef = "transactionManager2"
    )
    public class DataSource2JpaConfig {
        // 這里配置針對(duì)dataSource2的JpaRepository
    }
    

    當(dāng)需要在多數(shù)據(jù)源環(huán)境下執(zhí)行事務(wù)管理時(shí),需要進(jìn)行額外的配置以確保事務(wù)能夠正確地跨多個(gè)數(shù)據(jù)源進(jìn)行管理。

    步驟八:配置多數(shù)據(jù)源事務(wù)管理

  6. 創(chuàng)建一個(gè)事務(wù)管理器工廠類,用于創(chuàng)建支持多數(shù)據(jù)源的事務(wù)管理器:
    @Configuration
    public class TransactionManagerConfig {
    
        @Bean
        @Primary
        public PlatformTransactionManager transactionManager(
                @Qualifier("dataSource1TransactionManager") PlatformTransactionManager dataSource1TransactionManager,
                @Qualifier("dataSource2TransactionManager") PlatformTransactionManager dataSource2TransactionManager) {
            ChainedTransactionManager transactionManager = new ChainedTransactionManager(
                    dataSource1TransactionManager, dataSource2TransactionManager);
            return transactionManager;
        }
    }
    
  7. 在需要進(jìn)行事務(wù)管理的Service方法上添加?@Transactional?注解,以確保事務(wù)能夠正確地跨多個(gè)數(shù)據(jù)源進(jìn)行管理。
    @Service
    public class MultiDataSourceService {
    
        @Autowired
        private UserRepository userRepository;
    
        @Autowired
        private ProductRepository productRepository;
    
        @Transactional(transactionManager = "transactionManager")
        public void transferBetweenDataSources(User user, Product product) {
            // 在此方法中進(jìn)行跨數(shù)據(jù)源的業(yè)務(wù)操作
            userRepository.save(user);
            productRepository.save(product);
        }
    }
    

    步驟九:測(cè)試多數(shù)據(jù)源事務(wù)管理

    編寫測(cè)試用例來(lái)驗(yàn)證多數(shù)據(jù)源事務(wù)管理的功能是否正常工作??梢阅M跨數(shù)據(jù)源的業(yè)務(wù)操作,并驗(yàn)證事務(wù)是否能夠正確地回滾或提交。

    @Service
    public class MultiDataSourceService {
    
        @Autowired
        private UserRepository userRepository;
    
        @Autowired
        private ProductRepository productRepository;
    
        @Transactional(transactionManager = "transactionManager")
        public void transferBetweenDataSources(User user, Product product) {
            // 在第一個(gè)數(shù)據(jù)源保存用戶信息
            userRepository.save(user);
    
            // 模擬異常情況,使第二個(gè)數(shù)據(jù)源保存產(chǎn)品信息時(shí)出現(xiàn)錯(cuò)誤
            if (product.getName().equals("error")) {
                throw new RuntimeException("Error occurred while saving product");
            }
    
            // 在第二個(gè)數(shù)據(jù)源保存產(chǎn)品信息
            productRepository.save(product);
        }
    }
    

    在這段代碼中,我們定義了一個(gè)MultiDataSourceService服務(wù)類,其中的transferBetweenDataSources方法模擬了一個(gè)跨數(shù)據(jù)源的業(yè)務(wù)操作:先在第一個(gè)數(shù)據(jù)源保存用戶信息,然后在第二個(gè)數(shù)據(jù)源保存產(chǎn)品信息。如果產(chǎn)品名稱為"error",則會(huì)拋出運(yùn)行時(shí)異常。

    通過(guò)在該方法上添加@Transactional(transactionManager = "transactionManager")注解,確保了事務(wù)能夠正確地跨多個(gè)數(shù)據(jù)源進(jìn)行管理。當(dāng)出現(xiàn)異常時(shí),事務(wù)會(huì)回滾,保證數(shù)據(jù)的一致性。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-840289.html

到了這里,關(guān)于用Java基于Spring框架搭建一套支持多數(shù)據(jù)源的web系統(tǒng)框架的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • spring boot下基于spring data jpa配置mysql+達(dá)夢(mèng)多數(shù)據(jù)源(以不同包路徑方式,mysql為主數(shù)據(jù)源)

    :mysql 達(dá)夢(mèng)/dameng jpa 多數(shù)據(jù)源 spring boot:2.1.17.RELEASE mysql驅(qū)動(dòng):8.0.21(跟隨boot版本) 達(dá)夢(mèng)驅(qū)動(dòng):8.1.2.192 lombok:1.18.12(跟隨boot版本) 以mysql為主數(shù)據(jù)源,達(dá)夢(mèng)為第二數(shù)據(jù)源方式配置 適用于舊項(xiàng)目二次開發(fā)接入達(dá)夢(mèng)數(shù)據(jù)庫(kù)或基于通用二方/三方包做業(yè)務(wù)擴(kuò)展等場(chǎng)景 將以不

    2024年02月05日
    瀏覽(59)
  • 數(shù)據(jù)源作用以及spring配置數(shù)據(jù)源

    數(shù)據(jù)源,簡(jiǎn)單理解為數(shù)據(jù)源頭,提供了應(yīng)用程序所需要數(shù)據(jù)的位置。數(shù)據(jù)源保證了應(yīng)用程序與目標(biāo)數(shù)據(jù)之間交互的規(guī)范和協(xié)議,它可以是數(shù)據(jù)庫(kù),文件系統(tǒng)等等。其中數(shù)據(jù)源定義了位置信息,用戶驗(yàn)證信息和交互時(shí)所需的一些特性的配置,同時(shí)它封裝了如何建立與數(shù)據(jù)源的連

    2024年02月07日
    瀏覽(27)
  • springboot多數(shù)據(jù)源支持自定義連接池

    springboot 多數(shù)據(jù)源網(wǎng)上的文章很多,但大多都是互相抄襲,雖然可以實(shí)現(xiàn)多數(shù)據(jù)源的效果,但都是使用的默認(rèn)的連接池,如果盲目使用可能會(huì)導(dǎo)致自定義的連接池參數(shù)沒(méi)生效從而引發(fā)數(shù)據(jù)庫(kù)連接問(wèn)題。下面是參考官方文檔多數(shù)據(jù)源支持自定義連接池的配置。 https://docs.spring.i

    2024年01月20日
    瀏覽(42)
  • 【Spring Boot 3】【數(shù)據(jù)源】自定義多數(shù)據(jù)源

    軟件開發(fā)是一門實(shí)踐性科學(xué),對(duì)大多數(shù)人來(lái)說(shuō),學(xué)習(xí)一種新技術(shù)不是一開始就去深究其原理,而是先從做出一個(gè)可工作的DEMO入手。但在我個(gè)人學(xué)習(xí)和工作經(jīng)歷中,每次學(xué)習(xí)新技術(shù)總是要花費(fèi)或多或少的時(shí)間、檢索不止一篇資料才能得出一個(gè)可工作的DEMO,這占用了我大量的時(shí)

    2024年02月01日
    瀏覽(24)
  • 【Spring Boot 3】【數(shù)據(jù)源】自定義JPA數(shù)據(jù)源

    軟件開發(fā)是一門實(shí)踐性科學(xué),對(duì)大多數(shù)人來(lái)說(shuō),學(xué)習(xí)一種新技術(shù)不是一開始就去深究其原理,而是先從做出一個(gè)可工作的DEMO入手。但在我個(gè)人學(xué)習(xí)和工作經(jīng)歷中,每次學(xué)習(xí)新技術(shù)總是要花費(fèi)或多或少的時(shí)間、檢索不止一篇資料才能得出一個(gè)可工作的DEMO,這占用了我大量的時(shí)

    2024年01月21日
    瀏覽(32)
  • 【Spring Boot 3】【數(shù)據(jù)源】自定義JDBC多數(shù)據(jù)源

    軟件開發(fā)是一門實(shí)踐性科學(xué),對(duì)大多數(shù)人來(lái)說(shuō),學(xué)習(xí)一種新技術(shù)不是一開始就去深究其原理,而是先從做出一個(gè)可工作的DEMO入手。但在我個(gè)人學(xué)習(xí)和工作經(jīng)歷中,每次學(xué)習(xí)新技術(shù)總是要花費(fèi)或多或少的時(shí)間、檢索不止一篇資料才能得出一個(gè)可工作的DEMO,這占用了我大量的時(shí)

    2024年01月23日
    瀏覽(28)
  • 【Spring Boot 3】【數(shù)據(jù)源】自定義JPA多數(shù)據(jù)源

    軟件開發(fā)是一門實(shí)踐性科學(xué),對(duì)大多數(shù)人來(lái)說(shuō),學(xué)習(xí)一種新技術(shù)不是一開始就去深究其原理,而是先從做出一個(gè)可工作的DEMO入手。但在我個(gè)人學(xué)習(xí)和工作經(jīng)歷中,每次學(xué)習(xí)新技術(shù)總是要花費(fèi)或多或少的時(shí)間、檢索不止一篇資料才能得出一個(gè)可工作的DEMO,這占用了我大量的時(shí)

    2024年01月22日
    瀏覽(31)
  • spring 數(shù)據(jù)源配置

    寫在最前面 前端時(shí)間在處理公司老項(xiàng)目改造使用新框架的事情,對(duì)于spring數(shù)據(jù)源配置這塊有些疑惑,就翻了一下資料,了解了下spring 數(shù)據(jù)源配置相關(guān)的知識(shí),這里記錄一下。 默認(rèn)數(shù)據(jù)源 spring boot 默認(rèn)支持4種數(shù)據(jù)源類型,定義在 org.springframework.boot.autoconfigure.jdbc.DataSourceAut

    2024年02月09日
    瀏覽(25)
  • Spring配置數(shù)據(jù)源

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

    數(shù)據(jù)源(連接池)是提高程序性能如出現(xiàn)的 事先實(shí)例化數(shù)據(jù)源,初始化部分連接資源 使用連接資源時(shí)從數(shù)據(jù)源中獲取 使用完畢后將連接資源歸還給數(shù)據(jù)源 常見的數(shù)據(jù)源有: DBCP、C3P0、BoneCP、Druid idea中創(chuàng)建一個(gè)maven項(xiàng)目,導(dǎo)入如下所需的基本坐標(biāo)(mysql、Junit、spring-contex) 兩種數(shù)

    2023年04月15日
    瀏覽(19)
  • SpringBoot整合多數(shù)據(jù)源,并支持動(dòng)態(tài)新增與切換(詳細(xì)教程)

    SpringBoot整合多數(shù)據(jù)源,并支持動(dòng)態(tài)新增與切換(詳細(xì)教程)

    推薦文章: ????1、springBoot對(duì)接kafka,批量、并發(fā)、異步獲取消息,并動(dòng)態(tài)、批量插入庫(kù)表; ????2、SpringBoot用線程池ThreadPoolTaskExecutor異步處理百萬(wàn)級(jí)數(shù)據(jù); ????3、java后端接口API性能優(yōu)化技巧 ????4、SpringBoot+MyBatis流式查詢,處理大規(guī)模數(shù)據(jù),提高系統(tǒng)的性能和響應(yīng)能力。 一

    2024年02月10日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包