博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring-Data-Jpa的使用(2)--多数据源配置
阅读量:6124 次
发布时间:2019-06-21

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

hot3.png

在使用spring-data-jpa时,如果要配置多数据源,一般为以下三个步骤:

  • 在配置文件配置多数据源
  • 不同源的 repository 放入不同包路径
  • 声明不同的包路径下使用不同的数据源、事务支持

1.配置文件配置多数据源


spring.primary.datasource.url=jdbc:mysql://localhost:3306/testspring.primary.datasource.username=rootspring.primary.datasource.password=rootspring.primary.datasource.driver-class-name=com.mysql.jdbc.Driverspring.secondary.datasource.url=jdbc:mysql://localhost:3306/test1spring.secondary.datasource.username=rootspring.secondary.datasource.password=rootspring.secondary.datasource.driver-class-name=com.mysql.jdbc.Driver

2.不同源的 repository 放入不同包路径


repository路径

3.声明不同的包路径下使用不同的数据源


将数据源注入到 Factory,配置 repository、domian 的位置,需要设置一个默认的数据源

@Configuration@EnableTransactionManagement@EnableJpaRepositories(        entityManagerFactoryRef = "entityManagerFactoryPrimary",        transactionManagerRef = "transactionManagerPrimary",        basePackages = {"com.zb.boot.repository.primary"}//声明路径)public class PrimaryConfig {    @Autowired    private JpaProperties jpaProperties;    @Autowired    @Qualifier("primaryDataSource")    private DataSource primaryDataSource;    public EntityManager entityManager(EntityManagerFactoryBuilder builder){        return entityManagerFactoryPrimary(builder).getObject().createEntityManager();    }    @Bean(name = "entityManagerFactoryPrimary")    @Primary    public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary(EntityManagerFactoryBuilder builder){        return builder.dataSource(primaryDataSource)                .properties(getVendorProperties(primaryDataSource))                .packages("com.zb.boot.model")//实体类的路径                .persistenceUnit("primaryPersistenceUnit")                .build();    }    public Map
getVendorProperties(DataSource dataSource){ return jpaProperties.getHibernateProperties(dataSource); } @Bean(name = "transactionManagerPrimary") @Primary PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder){ return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject()); }}
@Configuration@EnableTransactionManagement@EnableJpaRepositories(        entityManagerFactoryRef="entityManagerFactorySecondary",        transactionManagerRef="transactionManagerSecondary",        basePackages= { "com.zb.boot.repository.secondary" })public class SecondaryConfig {    @Autowired    private JpaProperties jpaProperties;    @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.zb.boot.model")                .persistenceUnit("secondaryPersistenceUnit")                .build();    }    private Map
getVendorProperties(DataSource dataSource) { return jpaProperties.getHibernateProperties(dataSource); } @Bean(name = "transactionManagerSecondary") PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) { return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject()); }}

读取两个配置源,构建两个数据源:

@Configurationpublic class DataSourceConfig {    @Bean(name = "primaryDataSource")    @Qualifier("primaryDataSource")    @ConfigurationProperties(prefix = "spring.primary.datasource")    public DataSource primaryDataSource(){        return DataSourceBuilder.create().build();    }    @Bean(name = "secondaryDataSource")    @Qualifier("secondaryDataSource")    @Primary    @ConfigurationProperties(prefix = "spring.secondary.datasource")    public DataSource secondaryDataSource(){        return DataSourceBuilder.create().build();    }}

转载于:https://my.oschina.net/u/3660989/blog/1793321

你可能感兴趣的文章
【设计模式系列】单例模式的7种写法
查看>>
汉字转拼音 (转)
查看>>
Machine Learning Techniques -6-Support Vector Regression
查看>>
会计基础_001
查看>>
ajax请求拿到多条数据拼接显示在页面中
查看>>
小程序: 查看正在写的页面
查看>>
dedecms生成文档数据库崩溃 mysql daemon failed to start
查看>>
Linux的50个基本命令
查看>>
Objective-C中创建单例方法的步骤
查看>>
Jenkins持续集成环境部署
查看>>
emoji等表情符号存mysql的方法
查看>>
检查磁盘利用率并且定期发送告警邮件
查看>>
MWeb 1.4 新功能介绍二:静态博客功能增强
查看>>
linux文本模式和文本替换功能
查看>>
Windows SFTP 的安装
查看>>
摄像机与绕任意轴旋转
查看>>
rsync 服务器配置过程
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
Elasticsearch增删改查
查看>>