javascript
企业分布式微服务云SpringCloud SpringBoot mybatis (十)Spring Boot多数据源配置与使用Spring-data-jpa支持...
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支持...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fedora镜像下载地址
- 下一篇: SpringBoot集成Thymelea