博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
企业分布式微服务云SpringCloud SpringBoot mybatis (十)Spring Boot多数据源配置与使用Spring-data-jpa支持...
阅读量:6710 次
发布时间:2019-06-25

本文共 4687 字,大约阅读时间需要 15 分钟。

Spring-data-jpa支持

对于数据源的配置可以沿用上例中DataSourceConfig的实现。

新增对第一数据源的JPA配置,注意两处注释的地方,用于指定数据源对应的Entity实体和Repository定义位置,用@Primary区分主数据源。

@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();}@Autowiredprivate JpaProperties jpaProperties;private Map
getVendorProperties(DataSource dataSource) { return jpaProperties.getHibernateProperties(dataSource);}@Primary@Bean(name = "transactionManagerPrimary")public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) { return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());}复制代码

} 新增对第二数据源的JPA配置,内容与第一数据源类似,具体如下:

@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();}@Autowiredprivate JpaProperties jpaProperties;private Map
getVendorProperties(DataSource dataSource) { return jpaProperties.getHibernateProperties(dataSource);}@Bean(name = "transactionManagerSecondary")PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) { return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());}复制代码

} 完成了以上配置之后,主数据源的实体和数据访问对象位于:com.didispace.domain.p,次数据源的实体和数据访问接口位于:com.didispace.domain.s。

分别在这两个package下创建各自的实体和数据访问接口

主数据源下,创建User实体和对应的Repository接口 @Entity public class User {

@Id@GeneratedValueprivate 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> {

}

从数据源下,创建Message实体和对应的Repository接口 @Entity public class Message {

@Id@GeneratedValueprivate 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> {

} 接下来通过测试用例来验证使用这两个针对不同数据源的配置进行数据操作。

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

@Autowiredprivate UserRepository userRepository;@Autowiredprivate MessageRepository messageRepository;@Testpublic 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

转载地址:http://mlalo.baihongyu.com/

你可能感兴趣的文章
Emulator 29.0.3 Canary 发布,Android 模拟器
查看>>
总结一波安卓组件化开源方案
查看>>
oss-server 简单对象存储系统
查看>>
使用fastcgi_finish_request提高页面响应速度
查看>>
javascript成神之路(4):深入理解this关键字,是的就是this
查看>>
Flink1.4 Fault Tolerance源码解析-1
查看>>
Spring Cloud配置中心
查看>>
React 路由状态管理总结
查看>>
JAVA 几种引用类型学习
查看>>
Android WindowManager悬浮窗:不需要申请权限实现悬浮
查看>>
偶遇到客户的奇葩需求
查看>>
禅道 11.3 版本发布,主要完善细节,修复 bug
查看>>
无人机新用途,可精确识别危险海洋生物并向游泳者发出预警
查看>>
国家天文台-阿里云天文大数据联合中心成立
查看>>
Lua的文件操作
查看>>
更好的以太坊,会是怎样的?
查看>>
计算与推断思维 六、可视化
查看>>
阿里建“猫茂”线下购物中心,将实现新零售技术的真正落地
查看>>
高等教育转型:确保数据可用性是关键
查看>>
【基础】这15种CSS居中的方式,你都用过哪几种?
查看>>