這篇文章主要介紹“Springboot 2.1.5 配置JPA多數(shù)據(jù)源的方法”,在日常操作中,相信很多人在Springboot 2.1.5 配置JPA多數(shù)據(jù)源的方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Springboot 2.1.5 配置JPA多數(shù)據(jù)源的方法”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)公司專注于阿拉爾企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城建設(shè)。阿拉爾網(wǎng)站建設(shè)公司,為阿拉爾等地區(qū)提供建站服務(wù)。全流程按需制作網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
最近在學(xué)sprinJpa,照著網(wǎng)上博客想試著配一下Jpa的多數(shù)據(jù)源,但發(fā)現(xiàn)因為springboot版本太高的問題,網(wǎng)上的demo都不適用,導(dǎo)致找了很久才找到解決辦法?,F(xiàn)在把操作過程記錄如下。
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 時都會刪除上一次的生成的表, # 然后根據(jù)你的 model 類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執(zhí)行, # 這就是導(dǎo)致數(shù)據(jù)庫表數(shù)據(jù)丟失的一個重要原因。 # create-drop :每次加載 hibernate 時根據(jù) model 類生成表,但是 sessionFactory 一關(guān)閉,表就自動刪除。 # update:最常用的屬性,第一次加載 hibernate 時根據(jù) model 類會自動建立起表的結(jié)構(gòu)(前提是先建立好數(shù)據(jù)庫),以后加載 hibernate 時根據(jù) model 類自動更新表結(jié)構(gòu),即使表結(jié)構(gòu)改變了但表中的行仍然存在不會刪除以前的行。要注意的是當(dāng)部署到服務(wù)器后,表結(jié)構(gòu)是不會被馬上建立起來的,是要等 應(yīng)用第一次運(yùn)行起來后才會。 # validate :每次加載 hibernate 時,驗證創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu),只會和數(shù)據(jù)庫中的表進(jìn)行比較,不會創(chuàng)建新表,但是會插入新值。 auto: update
@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(); } }
數(shù)據(jù)源1:
@Configuration @EnableTransactionManagement @EnableJpaRepositories( entityManagerFactoryRef="entityManagerFactoryPrimary", transactionManagerRef="transactionManagerPrimary", basePackages= { "com.czcstudy.springbootdemo.day1.dao.test1" }) //設(shè)置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) { //網(wǎng)上文章大多數(shù)都是jpaProperties.getHibernateProperties(dataSource);就直接得到了hibernate的配置map, //但這個方法在springboot2.0+好像就舍棄了,所以這里改成這樣。 Mapproperties = hibernateProperties.determineHibernateProperties( jpaProperties.getProperties(), new HibernateSettings()); return builder.dataSource(primaryDataSource).properties(properties) .packages("com.czcstudy.springbootdemo.day1.bean.po").build();//實(shí)體包路徑 } @Primary @Bean(name = "transactionManagerPrimary") public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) { return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject()); }
數(shù)據(jù)源2:
@Configuration @EnableTransactionManagement @EnableJpaRepositories( entityManagerFactoryRef="entityManagerFactorySecondary", transactionManagerRef="transactionManagerSecondary", basePackages= { "com.czcstudy.springbootdemo.day1.dao.test2" }) //設(shè)置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) { //網(wǎng)上文章大多數(shù)都是jpaProperties.getHibernateProperties(dataSource);就直接得到了hibernate的配置map, //但這個方法在springboot2.0+好像就舍棄了,所以這里改成這樣。 Mapproperties = hibernateProperties.determineHibernateProperties( jpaProperties.getProperties(), new HibernateSettings()); return builder.dataSource(secondaryDataSource).properties(properties) .packages("com.czcstudy.springbootdemo.day1.bean.po").build();//實(shí)體的包路徑 } @Bean(name = "transactionManagerSecondary") public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) { return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject()); } }
@Service public class JpaTestServiceImpl implements JpaTestService { @Autowired private UserJpaTest2Dao userRepository2; @Override @Transactional(value = "transactionManagerSecondary",rollbackFor = RuntimeException.class) public void test(){ ListuserJpaTestList = userRepository2.findAll(); System.out.println(userJpaTestList); } }
其中指定的value就是前面注冊的PlatformTransactionManager對象名稱,多數(shù)據(jù)源時需要指定。
以上就是springboot2.1.5 配置jpa多數(shù)據(jù)源的方法,啟動項目我們可以看到
HikariPool連接池已經(jīng)啟動了,這是springboot的默認(rèn)數(shù)據(jù)庫連接池,所以連接池我們這里就不自己配了。
到此,關(guān)于“Springboot 2.1.5 配置JPA多數(shù)據(jù)源的方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!