中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Springboot 2.1.5 配置JPA多數據源的方法

發布時間:2021-06-30 15:29:43 來源:億速云 閱讀:276 作者:chen 欄目:大數據

這篇文章主要介紹“Springboot 2.1.5 配置JPA多數據源的方法”,在日常操作中,相信很多人在Springboot 2.1.5 配置JPA多數據源的方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Springboot 2.1.5 配置JPA多數據源的方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

最近在學sprinJpa,照著網上博客想試著配一下Jpa的多數據源,但發現因為springboot版本太高的問題,網上的demo都不適用,導致找了很久才找到解決辦法。現在把操作過程記錄如下。

一、yml配置

spring:
  datasource:
    test1:
      driver-class-name: com.mysql.jdbc.Driver
      password: 123456
      #url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
      #springboot2.0以上
      jdbc-url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
      username: root
    test2:
      driver-class-name: com.mysql.jdbc.Driver
      password: 123456
      #url: jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
      #springboot2.0以上
      jdbc-url: jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
      username: root
  jpa:
    ## 是否打印sql
    show-sql: true
    properties:
      hibernate:
        # 指定引擎為Innodb
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect
        hbm2ddl:
          # create: 每次加載 hibernate 時都會刪除上一次的生成的表,
          # 然后根據你的 model 類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執行,
          # 這就是導致數據庫表數據丟失的一個重要原因。
          # create-drop :每次加載 hibernate 時根據 model 類生成表,但是 sessionFactory 一關閉,表就自動刪除。
          # update:最常用的屬性,第一次加載 hibernate 時根據 model 類會自動建立起表的結構(前提是先建立好數據庫),以后加載 hibernate 時根據 model 類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。要注意的是當部署到服務器后,表結構是不會被馬上建立起來的,是要等 應用第一次運行起來后才會。
          # validate :每次加載 hibernate 時,驗證創建數據庫表結構,只會和數據庫中的表進行比較,不會創建新表,但是會插入新值。
          auto: update

二、注冊datasource到spring容器

@Configuration
public class DataSourceConfig {
    @Bean(name = "primaryDataSource")
    @Primary
    @Qualifier("primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.test1")
    public DataSource primaryDataSource() {
        System.out.println("-------------------- primaryDataSource初始化 ---------------------");
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "secondaryDataSource")
    @Qualifier("secondaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.test2")
    public DataSource secondaryDataSource() {
        System.out.println("-------------------- secondaryDataSource初始化---------------------");
        return DataSourceBuilder.create().build();
    }
}

三、注冊jpa相關對象進入spring容器

數據源1:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef="entityManagerFactoryPrimary",
        transactionManagerRef="transactionManagerPrimary",
        basePackages= { "com.czcstudy.springbootdemo.day1.dao.test1" }) //設置Repository所在位置
public class RepositoryPrimaryConfig {
    @Autowired
    @Qualifier("primaryDataSource")
    private DataSource primaryDataSource;
    @Autowired
    private JpaProperties jpaProperties;
    @Autowired
    private HibernateProperties hibernateProperties;

    @Primary
    @Bean(name = "entityManagerFactoryPrimary")
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary(
            EntityManagerFactoryBuilder builder) {
		//網上文章大多數都是jpaProperties.getHibernateProperties(dataSource);就直接得到了hibernate的配置map,
		//但這個方法在springboot2.0+好像就舍棄了,所以這里改成這樣。
        Map<String, Object> properties = hibernateProperties.determineHibernateProperties(
                jpaProperties.getProperties(), new HibernateSettings());
        return builder.dataSource(primaryDataSource).properties(properties)
                .packages("com.czcstudy.springbootdemo.day1.bean.po").build();//實體包路徑
    }

    @Primary
    @Bean(name = "transactionManagerPrimary")
    public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
        return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
    }

數據源2:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef="entityManagerFactorySecondary",
        transactionManagerRef="transactionManagerSecondary",
        basePackages= { "com.czcstudy.springbootdemo.day1.dao.test2" }) //設置Repository所在位置
public class RepositorySecondaryConfig {
    @Autowired
    @Qualifier("secondaryDataSource")
    private DataSource secondaryDataSource;
    @Autowired
    private JpaProperties jpaProperties;
    @Autowired
    private HibernateProperties hibernateProperties;

    @Bean(name = "entityManagerFactorySecondary")
    public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary(
            EntityManagerFactoryBuilder builder) {
		//網上文章大多數都是jpaProperties.getHibernateProperties(dataSource);就直接得到了hibernate的配置map,
		//但這個方法在springboot2.0+好像就舍棄了,所以這里改成這樣。
        Map<String, Object> properties = hibernateProperties.determineHibernateProperties(
                jpaProperties.getProperties(), new HibernateSettings());
        return builder.dataSource(secondaryDataSource).properties(properties)
                .packages("com.czcstudy.springbootdemo.day1.bean.po").build();//實體的包路徑
    }

    @Bean(name = "transactionManagerSecondary")
    public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
        return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());
    }
}

四、使用spring事務例

@Service
public class JpaTestServiceImpl implements JpaTestService {
    @Autowired
    private UserJpaTest2Dao userRepository2;

    @Override
    @Transactional(value = "transactionManagerSecondary",rollbackFor = RuntimeException.class)
    public void test(){
        List<UserJpaTest> userJpaTestList  = userRepository2.findAll();
        System.out.println(userJpaTestList);
    }
}

其中指定的value就是前面注冊的PlatformTransactionManager對象名稱,多數據源時需要指定。

五、小結

以上就是springboot2.1.5 配置jpa多數據源的方法,啟動項目我們可以看到

Springboot 2.1.5 配置JPA多數據源的方法

HikariPool連接池已經啟動了,這是springboot的默認數據庫連接池,所以連接池我們這里就不自己配了。

到此,關于“Springboot 2.1.5 配置JPA多數據源的方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郴州市| 南昌县| 右玉县| 锡林郭勒盟| 商丘市| 塔河县| 贵南县| 商南县| 淮北市| 陆良县| 临海市| 遵义县| 肥西县| 岳普湖县| 汝州市| 昌邑市| 红原县| 武安市| 深圳市| 嘉善县| 贵阳市| 从江县| 富平县| 平安县| 奉化市| 晋州市| 家居| 琼中| 昌江| 阿坝县| 汕头市| 望江县| 凤城市| 孝义市| 剑川县| 泸州市| 泉州市| 台南县| 北海市| 东宁县| 那曲县|