最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

jpa多數(shù)據(jù)源時(shí)Hibernate配置自動生成表不生效的解決

 更新時(shí)間:2022年02月25日 09:06:27   作者:天涯淚小武  
這篇文章主要介紹了jpa多數(shù)據(jù)源時(shí)Hibernate配置自動生成表不生效的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

jpa配置多數(shù)據(jù)源教程很多,在Springboot2之后有一些變化,來看一下。

application.yml如下

spring:
  application:
    name: t3cc
  datasource:
    primary:
        jdbc-url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${DB_NAME:anbang}?useUnicode=true&characterEncoding=UTF8&serverTimezone=Hongkong
        username: root
        password: root
    secondary:
        jdbc-url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${DB_NAME:anbang1}?useUnicode=true&characterEncoding=UTF8&serverTimezone=Hongkong
        username: root
        password: root
  jpa:
    database: mysql
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect  #不加這句則默認(rèn)為myisam引擎
    hibernate:
      ddl-auto: update
      naming:
        physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
    open-in-view: true
    properties:
        enable_lazy_load_no_trans: true
    show-sql: true
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_SERVER:localhost:8848}
###############################---log---##############################
logging:
  file: ./logback.log

yml里配置了兩個(gè)數(shù)據(jù)源,和一些jpa和Hibernate的配置。

下面是DataSource的配置

/**
 * @author wuweifeng wrote on 2019/3/5.
 */
@Configuration
public class DataSourceConfig { 
    @Primary
    @Bean(name = "primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource dataSourceOrder() {
        return DataSourceBuilder.create().build();
    }
 
    @Bean(name = "secondaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource dataSourceAuth() {
        return DataSourceBuilder.create().build();
    } 
}

下面是第一個(gè)數(shù)據(jù)源的配置

package com.mm.dmp.t3cc.config; 
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
 
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
 
/**
 * @author wuweifeng wrote on 2019/3/5.
 */
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "entityManagerFactoryPrimary",
        transactionManagerRef = "transactionManagerPrimary",
        basePackages = {"com.mm.dmp.t3cc.core.repository.one"})
public class OneConfig {
 
    @Resource
    @Qualifier("primaryDataSource")
    private DataSource primaryDataSource;
 
    @Primary
    @Bean(name = "entityManagerPrimary")
    public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
        return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
    }
 
    @Resource
    private JpaProperties jpaProperties;
 
    @Resource
    private HibernateProperties properties;
 
    /**
     * 設(shè)置實(shí)體類所在位置
     */
    @Primary
    @Bean(name = "entityManagerFactoryPrimary")
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary(EntityManagerFactoryBuilder builder) { 
        LocalContainerEntityManagerFactoryBean entityManagerFactory = builder
                .dataSource(primaryDataSource)
                //.packages(classes)
                //設(shè)置實(shí)體類所在位置
                .packages("com.mm.dmp.t3cc.core.entity.one")
                .persistenceUnit("primaryPersistenceUnit")
                //.properties(jpaProperties.getProperties())
                .properties(properties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings()))
                .build();
        return entityManagerFactory;
    }
 
    @Primary
    @Bean(name = "transactionManagerPrimary")
    public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
        return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
    } 
}

這里會和別人的配置不一樣,主要區(qū)別在于HibernateProperties。別人的在第61行,我注釋掉的那行,會直接使用jpaProperties.getProperties()。當(dāng)你這樣寫之后,會發(fā)現(xiàn)yml里配置的Hibernate的update自動生成表,和命名方式并沒有生效。

原因我們可以看一下。

這里就是jpaProperties.getProperties()的地方,如果打斷點(diǎn)可以看到,只有箭頭這一個(gè)配置被加載進(jìn)去了。上面的Hibernate的ddl和naming并沒有進(jìn)去。

來看一下HibernateProperties

這里才是真正讓自動建表生效的地方,然而并沒有加載進(jìn)去。那么就需要我們手工來添加了。

這里面有個(gè)determineHibernateProperties方法,就是來組合jpaProperties和HibernateProperties的地方。我們應(yīng)該使用這個(gè)方法來組合整個(gè)配置的map對象。

也就是在OneConfig類中,把兩個(gè)Properties都定義出來,然后組合一下,就是箭頭的地方。在debug時(shí),就可以看到Hibernate的配置也都加載進(jìn)來了。

OK,以上就是動態(tài)數(shù)據(jù)源配置Hibernate自動建表不生效的原因。

下面是第二個(gè)數(shù)據(jù)源的配置

package com.mm.dmp.t3cc.config; 
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
 
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
 
/**
 * @author wuweifeng wrote on 2019/3/5.
 */
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "entityManagerFactorySecondary",
        transactionManagerRef = "transactionManagerSecondary",
        basePackages = {"com.mm.dmp.t3cc.core.repository.two"}) //設(shè)置Repository所在位置
public class TwoConfig {
 
    @Resource
    @Qualifier("secondaryDataSource")
    private DataSource secondaryDataSource;
 
    @Resource
    private JpaProperties jpaProperties;
 
    @Resource
    private HibernateProperties properties;
 
    @Bean(name = "entityManagerSecondary")
    public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
        return entityManagerFactorySecondary(builder).getObject().createEntityManager();
    }
 
    @Bean(name = "entityManagerFactorySecondary")
    public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary(EntityManagerFactoryBuilder builder) {
        LocalContainerEntityManagerFactoryBean entityManagerFactory
                = builder
                .dataSource(secondaryDataSource)
                //.packages(classes)
                //設(shè)置實(shí)體類所在位置
                .packages("com.mm.dmp.t3cc.core.entity.two")
                .persistenceUnit("secondaryPersistenceUnit")
                .properties(properties.determineHibernateProperties(jpaProperties.getProperties(), new
                        HibernateSettings()))
                .build();
        return entityManagerFactory;
    }
 
    @Bean(name = "transactionManagerSecondary")
    public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
        return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());
    }
}

如果你覺得這樣比較麻煩,并且還有分庫分表的需求,那么可以使用sharding jdbc來操作,移步這一篇文章

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mybatis的動態(tài)SQL和模糊查詢實(shí)例詳解

    mybatis的動態(tài)SQL和模糊查詢實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于mybatis的動態(tài)SQL和模糊查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 聊聊java變量的初始化之后的默認(rèn)值

    聊聊java變量的初始化之后的默認(rèn)值

    這篇文章主要介紹了聊聊java變量的初始化之后的默認(rèn)值,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java后臺本地文件轉(zhuǎn)為MultipartFile類型的實(shí)現(xiàn)方式

    java后臺本地文件轉(zhuǎn)為MultipartFile類型的實(shí)現(xiàn)方式

    在Java后臺將本地文件轉(zhuǎn)換為MultipartFile類型,可以通過使用FileItemFactory創(chuàng)建FileItem,然后使用CommonsMultipartFile類構(gòu)造一個(gè)MultipartFile對象,將本地文件流轉(zhuǎn)換為MultipartFile,getMultipartFiles()和getMultipartFiles()方法
    2025-02-02
  • SpringIOC DI循環(huán)依賴實(shí)例詳解

    SpringIOC DI循環(huán)依賴實(shí)例詳解

    這篇文章主要介紹了SpringIOC——DI循環(huán)依賴,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Java二叉樹的四種遍歷方式詳解

    Java二叉樹的四種遍歷方式詳解

    這篇文章主要介紹了Java二叉樹的四種遍歷,二叉樹的遍歷可以分為前序、中序、后序、層次遍歷,需要的朋友可以參考下
    2021-11-11
  • 簡單了解Java synchronized關(guān)鍵字同步

    簡單了解Java synchronized關(guān)鍵字同步

    這篇文章主要介紹了簡單了解Java synchronized關(guān)鍵字同步,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java concurrency線程池之線程池原理(二)_動力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency線程池之線程池原理(二)_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了Java concurrency線程池之線程池原理第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 解決Java的InputMismatchException異常

    解決Java的InputMismatchException異常

    這篇文章介紹了解決Java的InputMismatchException異常的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • windows下vscode+vs2019開發(fā)JNI的示例

    windows下vscode+vs2019開發(fā)JNI的示例

    本文給大家普及windows下vscode+vs2019開發(fā)JNI的示例以及各個(gè)環(huán)節(jié)的注意事項(xiàng),文章通過示例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-06-06
  • java 文件和byte互轉(zhuǎn)的實(shí)例

    java 文件和byte互轉(zhuǎn)的實(shí)例

    下面小編就為大家分享一篇java 文件和byte互轉(zhuǎn)的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11

最新評論

绥棱县| 微博| 郎溪县| 乐昌市| 安阳县| 巴彦县| 洪洞县| 邯郸市| 广元市| 和林格尔县| 肃宁县| 尖扎县| 名山县| 阳曲县| 乐安县| 沁水县| 灵石县| 长春市| 甘谷县| 天津市| 金坛市| 怀安县| 衡南县| 漯河市| 北海市| 璧山县| 泾阳县| 高台县| 安福县| 宜昌市| 永嘉县| 曲沃县| 河间市| 宁乡县| 健康| 武胜县| 铜鼓县| 措勤县| 彝良县| 永平县| 鞍山市|