国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > Java > 正文

spring boot springjpa 支持多個(gè)數(shù)據(jù)源的實(shí)例代碼

2024-07-14 08:40:20
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1.SpringBoot的程序啟動(dòng)類(lèi)

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.web.SpringBootServletInitializer; import org.springframework.context.annotation.ComponentScan; @ComponentScan @EnableAutoConfiguration //@EnableJpaRepositories(basePackages = "com.sonychina.backend.repository") public class Application extends SpringBootServletInitializer {   public static void main(String[] args) {     SpringApplication app = new SpringApplication(Application.class);     app.run(args);     //SpringApplication.run(Application.class, args);   }   @Override   protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {     return application.sources(Application.class);   } } 

 2.雙數(shù)據(jù)源配置類(lèi)

import java.util.Map; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.autoconfigure.orm.jpa.EntityManagerFactoryBuilder; import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties; import org.springframework.boot.context.properties.ConfigurationProperties; 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.LocalContainerEntityManagerFactoryBean; import com.test.entity.statistic.SysUser; import com.test.repository.system.SystemRepository; @Configuration @EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactoryPrimary",   basePackageClasses= {SystemRepository.class}) public class GlobalDataConfiguration { // @Autowired // private DBConfig dbConfig;   @Autowired   private JpaProperties jpaProperties;   @Bean(name="primaryDataSource")   @Primary   @ConfigurationProperties(prefix="datasource.primary")   public DataSource primaryDataSource() {     System.out.println("-------------------- primaryDataSource init ---------------------");     return DataSourceBuilder.create().build();   }   @Bean(name="secondaryDataSource")   @ConfigurationProperties(prefix="datasource.secondary")   public DataSource secondaryDataSource() {     System.out.println("-------------------- secondaryDataSource init ---------------------"); //   DataSourceBuilder factory = DataSourceBuilder  //       .create(DBConfig.class.getClassLoader())  //       .driverClassName(dbConfig.getDriver())  //       .url(dbConfig.getUrl())  //       .username(dbConfig.getUser())  //       .password(dbConfig.getPassword());  //   return factory.build();     return DataSourceBuilder.create().build();   } // @Bean(name = "entityManagerPrimary") // @Primary // public EntityManager entityManager(EntityManagerFactoryBuilder builder) { //   return customerEntityManagerFactory(builder).getObject().createEntityManager(); // }   @Bean(name="entityManagerFactoryPrimary")   @Primary   public LocalContainerEntityManagerFactoryBean customerEntityManagerFactory(EntityManagerFactoryBuilder builder) {     return builder.dataSource(primaryDataSource())           .properties(getVendorProperties(primaryDataSource()))           .packages(SysUser.class)           .persistenceUnit("system")           .build();   }   private Map<String, String> getVendorProperties(DataSource dataSource) {     return jpaProperties.getHibernateProperties(dataSource);   } } 

3.第二個(gè)jpa實(shí)體管理器

import java.util.Map; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.orm.jpa.EntityManagerFactoryBuilder; import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties; 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 com.test.entity.manage.Banner; import com.test.repository.manage.BannerRepository; @Configuration @EnableTransactionManagement @EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactorySecondary",   transactionManagerRef="transactionManagerSecondary",   basePackageClasses= {BannerRepository.class}) public class SecondEMFBConfig {   @Autowired   private JpaProperties jpaProperties;   @Autowired@Qualifier("secondaryDataSource")   private DataSource dataSource; // @Bean(name = "entityManagerPrimary") // @Primary // public EntityManager entityManager(EntityManagerFactoryBuilder builder) { //   return customerEntityManagerFactory(builder).getObject().createEntityManager(); // }   @Bean(name="entityManagerFactorySecondary")   public LocalContainerEntityManagerFactoryBean customerEntityManagerFactory(EntityManagerFactoryBuilder builder) {     return builder.dataSource(dataSource)           .properties(getVendorProperties(dataSource))           .packages(Banner.class)           .persistenceUnit("customers")           .build();   }   private Map<String, String> getVendorProperties(DataSource dataSource) {     return jpaProperties.getHibernateProperties(dataSource);   }   @Bean(name = "transactionManagerSecondary")   PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) {     return new JpaTransactionManager(customerEntityManagerFactory(builder).getObject());   } } 

4.repository類(lèi)舉例

import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import com.test.entity.manage.Banner; public interface BannerRepository extends JpaRepository<Banner, Long> {   @Modifying   @Query("update Banner m set m.name=?1 where m.id=?2")   public void update(String bannerName, Long id); } 

1.5.注意:對(duì)@Primary修飾的LocalContainerEntityManagerFactoryBean可以不用指定TransactionManager,spring上下文自動(dòng)使用默認(rèn)的JpaTransactionManager,但是對(duì)于第二個(gè)或第三個(gè)等等必須指定TransactionManager。可以參考springboot官方文檔中的相關(guān)章節(jié)。 

總結(jié)

以上所述是小編給大家介紹的spring boot springjpa 支持多個(gè)數(shù)據(jù)源的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 八宿县| 大埔县| 遂川县| 洞口县| 太保市| 大渡口区| 鄂温| 江源县| 岳阳县| 庆元县| 峨边| 德清县| 高安市| 高青县| 淅川县| 本溪| 广宗县| 巴青县| 克东县| 遂宁市| 洛隆县| 万宁市| 和田市| 灯塔市| 平乡县| 茌平县| 石河子市| 威海市| 麦盖提县| 万载县| 如东县| 通山县| 渭南市| 修武县| 马山县| 土默特右旗| 尚志市| 兴化市| 杨浦区| 怀集县| 沙洋县|