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

Springboot整合JPA配置多數(shù)據(jù)源流程詳解

 更新時間:2022年11月18日 16:51:00   作者:Buckletime  
這篇文章主要介紹了Springboot整合JPA配置多數(shù)據(jù)源,JPA可以通過實(shí)體類生成數(shù)據(jù)庫的表,同時自帶很多增刪改查方法,大部分sql語句不需要我們自己寫,配置完成后直接調(diào)用方法即可,很方便

1. Maven

<dependency>
   <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- 數(shù)據(jù)庫連接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.9</version>
</dependency>
<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
</dependency>

2. 基本配置

DataSource

在基本配置中,我們首先來配置多數(shù)據(jù)源基本信息以及DataSource,首先在application.yml中添加如下配置信息:

spring:
  datasource:
    # oracle數(shù)據(jù)庫配置
    oracle:
      driver-class-name: oracle.jdbc.driver.OracleDriver
      url: jdbc:oracle:thin:@10.0.66.72:1521:orcl
      username: test
      password: test
    # mysql數(shù)據(jù)庫配置
    mysql:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://10.0.66.60:3306/swap_business_db?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
      username: root
      password: root
    type: com.alibaba.druid.pool.DruidDataSource
    # druid數(shù)據(jù)庫連接池
    druid:
      filters: stat
      initialSize: 5
      maxActive: 20
      maxPoolPreparedStatementPerConnectionSize: 20
      maxWait: 60000
      minEvictableIdleTimeMillis: 30000
      minIdle: 5
      poolPreparedStatements: false
      testOnBorrow: false
      testOnReturn: false
      testWhileIdle: true
      timeBetweenEvictionRunsMillis: 60000
      #Oracle模式
      validation-query: SELECT 1 FROM DUAL #用來檢測連接是否有效的sql
      #MySQL模式
      validation-queryM: SELECT 1 #用來檢測連接是否有效的sql
  jpa:
    hibernate:
      ddl-auto: none
      oracle-dialect: org.hibernate.dialect.Oracle10gDialect
      mysql-dialect: org.hibernate.dialect.MySQL8Dialect
    show-sql: false

接下來配置兩個DataSource,如下:

@Configuration
public class DataSourceConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.oracle")
    @Primary
    DataSource dsOracle() {
        return DruidDataSourceBuilder.create().build();
    }
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.mysql")
    DataSource dsMysql() {
        return DruidDataSourceBuilder.create().build();
    }
}

注意:@Primary,這個注解一定不能少,否則在項(xiàng)目啟動時會出錯,@Primary表示當(dāng)某一個類存在多個實(shí)例時,優(yōu)先使用哪個實(shí)例。

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

接下來配置Jpa的基本信息,這里兩個數(shù)據(jù)源,分別在兩個類中來配置,oracle和mysql配置如下:

3.1 JpaConfigOracle

@Configuration
@EnableJpaRepositories(basePackages = "cn.piesat.dao.oracle",
        entityManagerFactoryRef = "localContainerEntityManagerFactoryBeanOracle",
        transactionManagerRef = "platformTransactionManagerOracle")
public class JpaConfigOracle {
    @Autowired
    @Qualifier(value = "dsOracle")
    DataSource dsOracle;
    @Autowired
    JpaProperties jpaProperties;
    @Autowired
    private HibernateProperties hibernateProperties;
    @Value("${spring.jpa.hibernate.oracle-dialect}")
    private String oracleDialect;
    @Value("${spring.jpa.show-sql}")
    private String showSql;
    @Bean
    @Primary
    LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBeanOracle(EntityManagerFactoryBuilder builder) {
        return builder.dataSource(dsOracle)
                .packages("cn.piesat.model")
                .properties(getVendorProperties())
                .persistenceUnit("pu1")
                .build();
    }
    /**
     * 設(shè)置數(shù)據(jù)源屬性
     *
     * @return
     */
    private Map<String, Object> getVendorProperties() {
        Map<String, String> map = new HashMap<>();
        // 設(shè)置oracle數(shù)據(jù)庫方言
        map.put("hibernate.dialect", oracleDialect);
        map.put("show-sql", showSql);
        jpaProperties.setProperties(map);
        return hibernateProperties.determineHibernateProperties(
                jpaProperties.getProperties(), new HibernateSettings());
    }
    /**
     * 配置事務(wù)管理器
     *
     * @param builder
     * @return
     */
    @Bean
    PlatformTransactionManager platformTransactionManagerOracle(EntityManagerFactoryBuilder builder) {
        LocalContainerEntityManagerFactoryBean factoryBeanOracle = localContainerEntityManagerFactoryBeanOracle(builder);
        return new JpaTransactionManager(factoryBeanOracle.getObject());
    }
}

配置說明:JpaProperties是系統(tǒng)提供的一個實(shí)例,里邊的數(shù)據(jù)就是我們在application.yml中配置的jpa相關(guān)的配置。HibernateProperties用來手動設(shè)置數(shù)據(jù)源屬性,例如定義不同的數(shù)據(jù)庫方言。然后我們提供兩個Bean,分別是LocalContainerEntityManagerFactoryBeanPlatformTransactionManager事務(wù)管理器,不同于MyBatis和JdbcTemplate,在Jpa中,事務(wù)一定要配置。在提供LocalContainerEntityManagerFactoryBean的時候,需要指定packages,這里的packages指定的包就是這個數(shù)據(jù)源對應(yīng)的實(shí)體類所在的位置,另外在這里配置類上通過@EnableJpaRepositories注解指定dao所在的位置,以及LocalContainerEntityManagerFactoryBean和PlatformTransactionManager分別對應(yīng)的引用的名字。

這樣第一個就配置好了,第二個基本和這個類似,主要有幾個不同點(diǎn):

  • dao的位置不同
  • persistenceUnit不同
  • 相關(guān)bean的名稱不同

3.2 JpaConfigMysql

@Configuration
@EnableJpaRepositories(basePackages = "cn.piesat.dao.mysql",
        entityManagerFactoryRef = "localContainerEntityManagerFactoryBeanMysql",
        transactionManagerRef = "platformTransactionManagerMysql")
public class JpaConfigMysql {
    @Autowired
    @Qualifier(value = "dsMysql")
    DataSource dsMysql;
    @Autowired
    JpaProperties jpaProperties;
    @Autowired
    private HibernateProperties hibernateProperties;
    @Value("${spring.jpa.hibernate.mysql-dialect}")
    private String mysqlDialect;
    @Value("${spring.jpa.show-sql}")
    private String showSql;
    @Bean
    LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBeanMysql(EntityManagerFactoryBuilder builder) {
        return builder.dataSource(dsMysql)
                .packages("cn.piesat.model")
                .properties(getVendorProperties())
                .persistenceUnit("pu2")
                .build();
    }
    /**
     * 設(shè)置數(shù)據(jù)源屬性
     *
     * @return
     */
    private Map<String, Object> getVendorProperties() {
        Map<String, String> map = new HashMap<>();
        // 設(shè)置mysql數(shù)據(jù)庫方言
        map.put("hibernate.dialect", mysqlDialect);
        map.put("show-sql", showSql);
        jpaProperties.setProperties(map);
        return hibernateProperties.determineHibernateProperties(
                jpaProperties.getProperties(), new HibernateSettings());
    }
    /**
     * 配置事務(wù)管理器
     *
     * @param builder
     * @return
     */
    @Bean
    PlatformTransactionManager platformTransactionManagerMysql(EntityManagerFactoryBuilder builder) {
        LocalContainerEntityManagerFactoryBean factoryBeanMysql = localContainerEntityManagerFactoryBeanMysql(builder);
        return new JpaTransactionManager(factoryBeanMysql.getObject());
    }
}

4. Dao層接口

接下來,在對應(yīng)位置分別提供相關(guān)的實(shí)體類和dao即可,注意:實(shí)體類可以共用,dao的位置不同

oracle接口:

package cn.piesat.dao.oracle;
public interface TMasOrbitInfoDao extends JpaRepository<TMasOrbitInfo, String> {
    List<TMasOrbitInfo> findBySatelliteAndObservationDateBetween(String satellite, String start, String end);
}

mysql接口:

package cn.piesat.dao.mysql;
public interface SwapBusinessEfficiencyMainDao extends JpaRepository<SwapBusinessEfficiencyMain, String> {
    List<SwapBusinessEfficiencyMain> findByDataIdentifyAndDataTimeBetween(String identify, String start, String end);
}

到此,所有的配置就算完成了,接下來就可以在Service中注入不同的Dao,不同的Dao操作不同的數(shù)據(jù)源。

到此這篇關(guān)于Springboot整合JPA配置多數(shù)據(jù)源流程詳解的文章就介紹到這了,更多相關(guān)Springboot配置多數(shù)據(jù)源內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot3集成Knife4j的步驟以及使用(最完整版)

    Springboot3集成Knife4j的步驟以及使用(最完整版)

    這篇文章主要介紹了Springboot3集成Knife4j的步驟以及使用的相關(guān)資料,Knife4j是一種增強(qiáng)Swagger的工具,支持黑色主題和更多配置選項(xiàng),它與swagger-bootstrap-ui相比,提供了更現(xiàn)代的外觀和更多的功能,需要的朋友可以參考下
    2024-11-11
  • SpringMVC攔截器實(shí)現(xiàn)登錄認(rèn)證

    SpringMVC攔截器實(shí)現(xiàn)登錄認(rèn)證

    這篇文章主要介紹了SpringMVC攔截器實(shí)現(xiàn)登錄認(rèn)證的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 關(guān)于java開發(fā)的性能問題總結(jié)(必看)

    關(guān)于java開發(fā)的性能問題總結(jié)(必看)

    下面小編就為大家?guī)硪黄P(guān)于java開發(fā)的性能問題總結(jié)(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • springboot整合shiro與自定義過濾器的全過程

    springboot整合shiro與自定義過濾器的全過程

    這篇文章主要給大家介紹了關(guān)于springboot整合shiro與自定義過濾器以及Shiro中權(quán)限控制的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • Springboot 讀取 yml 配置文件里的參數(shù)值

    Springboot 讀取 yml 配置文件里的參數(shù)值

    本文主要介紹了Springboot 讀取 yml 配置文件里的參數(shù)值,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • JSON的String字符串與Java的List列表對象的相互轉(zhuǎn)換

    JSON的String字符串與Java的List列表對象的相互轉(zhuǎn)換

    這篇文章主要介紹了JSON的String字符串與Java的List列表對象的相互轉(zhuǎn)換,如果在瀏覽器端JSON是list則轉(zhuǎn)為string結(jié)構(gòu)來處理,需要的朋友可以參考下
    2016-04-04
  • CAT分布式實(shí)時監(jiān)控系統(tǒng)使用詳解

    CAT分布式實(shí)時監(jiān)控系統(tǒng)使用詳解

    這篇文章主要為大家介紹了CAT分布式實(shí)時監(jiān)控系統(tǒng)介紹詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Java中Comparable接口和Comparator接口的使用比較

    Java中Comparable接口和Comparator接口的使用比較

    Java中提供了兩種對集合或數(shù)組中元素進(jìn)行排序的方法,一種是實(shí)現(xiàn)Comparable接口,另一種是實(shí)現(xiàn)Comparator接口,下面這篇文章主要給大家介紹了關(guān)于Java中Comparable接口和Comparator接口使用的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • maven環(huán)境變量配置以及失敗原因解析

    maven環(huán)境變量配置以及失敗原因解析

    這篇文章主要為大家詳細(xì)介紹了maven環(huán)境變量配置教程,以及為大家解析了安裝失敗的原因,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Spring Security實(shí)現(xiàn)自定義訪問策略

    Spring Security實(shí)現(xiàn)自定義訪問策略

    本文介紹Spring Security實(shí)現(xiàn)自定義訪問策略,當(dāng)根據(jù)誰訪問哪個域?qū)ο笞龀霭踩珱Q策時,您可能需要一個自定義的訪問決策投票者,幸運(yùn)的是,Spring Security有很多這樣的選項(xiàng)來實(shí)現(xiàn)訪問控制列表(ACL)約束,下面就來學(xué)習(xí)Spring Security自定義訪問策略,需要的朋友可以參考下
    2022-02-02

最新評論