日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

企业分布式微服务云SpringCloud SpringBoot mybatis (十)Spring Boot多数据源配置与使用Spring-data-jpa支持...

發(fā)布時間:2023/12/15 javascript 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 企业分布式微服务云SpringCloud SpringBoot mybatis (十)Spring Boot多数据源配置与使用Spring-data-jpa支持... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Spring-data-jpa支持

對于數(shù)據(jù)源的配置可以沿用上例中DataSourceConfig的實現(xiàn)。

新增對第一數(shù)據(jù)源的JPA配置,注意兩處注釋的地方,用于指定數(shù)據(jù)源對應的Entity實體和Repository定義位置,用@Primary區(qū)分主數(shù)據(jù)源。

@Configuration @EnableTransactionManagement @EnableJpaRepositories( entityManagerFactoryRef="entityManagerFactoryPrimary", transactionManagerRef="transactionManagerPrimary", basePackages= { "com.didispace.domain.p" }) //設置Repository所在位置 public class PrimaryConfig {

@Autowired @Qualifier("primaryDataSource") private DataSource primaryDataSource;@Primary @Bean(name = "entityManagerPrimary") public EntityManager entityManager(EntityManagerFactoryBuilder builder) {return entityManagerFactoryPrimary(builder).getObject().createEntityManager(); }@Primary @Bean(name = "entityManagerFactoryPrimary") public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {return builder.dataSource(primaryDataSource).properties(getVendorProperties(primaryDataSource)).packages("com.didispace.domain.p") //設置實體類所在位置.persistenceUnit("primaryPersistenceUnit").build(); }@Autowired private JpaProperties jpaProperties;private Map<String, String> getVendorProperties(DataSource dataSource) {return jpaProperties.getHibernateProperties(dataSource); }@Primary @Bean(name = "transactionManagerPrimary") public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject()); } 復制代碼

} 新增對第二數(shù)據(jù)源的JPA配置,內容與第一數(shù)據(jù)源類似,具體如下:

@Configuration @EnableTransactionManagement @EnableJpaRepositories( entityManagerFactoryRef="entityManagerFactorySecondary", transactionManagerRef="transactionManagerSecondary", basePackages= { "com.didispace.domain.s" }) //設置Repository所在位置 public class SecondaryConfig {

@Autowired @Qualifier("secondaryDataSource") private DataSource secondaryDataSource;@Bean(name = "entityManagerSecondary") public EntityManager entityManager(EntityManagerFactoryBuilder builder) {return entityManagerFactorySecondary(builder).getObject().createEntityManager(); }@Bean(name = "entityManagerFactorySecondary") public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary (EntityManagerFactoryBuilder builder) {return builder.dataSource(secondaryDataSource).properties(getVendorProperties(secondaryDataSource)).packages("com.didispace.domain.s") //設置實體類所在位置.persistenceUnit("secondaryPersistenceUnit").build(); }@Autowired private JpaProperties jpaProperties;private Map<String, String> getVendorProperties(DataSource dataSource) {return jpaProperties.getHibernateProperties(dataSource); }@Bean(name = "transactionManagerSecondary") PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) {return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject()); } 復制代碼

} 完成了以上配置之后,主數(shù)據(jù)源的實體和數(shù)據(jù)訪問對象位于:com.didispace.domain.p,次數(shù)據(jù)源的實體和數(shù)據(jù)訪問接口位于:com.didispace.domain.s。

分別在這兩個package下創(chuàng)建各自的實體和數(shù)據(jù)訪問接口

主數(shù)據(jù)源下,創(chuàng)建User實體和對應的Repository接口 @Entity public class User {

@Id @GeneratedValue private Long id;@Column(nullable = false) private String name;@Column(nullable = false) private Integer age;public User(){}public User(String name, Integer age) {this.name = name;this.age = age; }// 省略getter、setter 復制代碼

} public interface UserRepository extends JpaRepository<User, Long> {

}

從數(shù)據(jù)源下,創(chuàng)建Message實體和對應的Repository接口 @Entity public class Message {

@Id @GeneratedValue private Long id;@Column(nullable = false) private String name;@Column(nullable = false) private String content;public Message(){}public Message(String name, String content) {this.name = name;this.content = content; }// 省略getter、setter 復制代碼

} public interface MessageRepository extends JpaRepository<Message, Long> {

} 接下來通過測試用例來驗證使用這兩個針對不同數(shù)據(jù)源的配置進行數(shù)據(jù)操作。

@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(Application.class) public class ApplicationTests {

@Autowired private UserRepository userRepository; @Autowired private MessageRepository messageRepository;@Test public void test() throws Exception {userRepository.save(new User("aaa", 10));userRepository.save(new User("bbb", 20));userRepository.save(new User("ccc", 30));userRepository.save(new User("ddd", 40));userRepository.save(new User("eee", 50));Assert.assertEquals(5, userRepository.findAll().size());messageRepository.save(new Message("o1", "aaaaaaaaaa"));messageRepository.save(new Message("o2", "bbbbbbbbbb"));messageRepository.save(new Message("o3", "cccccccccc"));Assert.assertEquals(3, messageRepository.findAll().size());} 復制代碼

}

源碼來源:http://minglisoft.cn/honghu/technology.html

總結

以上是生活随笔為你收集整理的企业分布式微服务云SpringCloud SpringBoot mybatis (十)Spring Boot多数据源配置与使用Spring-data-jpa支持...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。