springboot2.x jpa接入多数据源
2024-08-30 02:07:10
环境:springboot 2.1.4
数据源引入方式
- 数据源一
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactoryPrimary",
transactionManagerRef = "transactionManagerPrimary",
basePackages = {"com.xxj.primary.repository"}
)
public class SourceDataConfig { @Autowired
private HibernateProperties hibernateProperties; @Autowired
private JpaProperties jpaProperties; private Map<String, Object> getVendorProperties() {
return hibernateProperties.determineHibernateProperties(
jpaProperties.getProperties(), new HibernateSettings()
);
} @Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary") # 配置数据源获取的涞源
public DataSource primaryDataSource(){
return DataSourceBuilder.create().build();
} @Bean(name = "entityManagerFactoryPrimary")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(EntityManagerFactoryBuilder builder, @Qualifier("primaryDataSource") DataSource dataSource) {
return builder.dataSource(dataSource)
.properties(getVendorProperties())
.packages("com.xxj.primary.model")
.persistenceUnit("primaryPersistenceUnit")
.build();
} @Bean(name = "transactionManagerPrimary")
public PlatformTransactionManager propertyTransactionManager(
@Qualifier("entityManagerFactoryPrimary") EntityManagerFactory propertyEntityManagerFactory) {
return new JpaTransactionManager(propertyEntityManagerFactory);
}
}
- 数据源二
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactorySecond",
transactionManagerRef = "transactionManagerSecond",
basePackages = {"com.xxj.second.repository"}
)
public class SecondDataConfig { @Autowired
private HibernateProperties hibernateProperties; @Autowired
private JpaProperties jpaProperties; private Map<String, Object> getVendorProperties() {
Map<String, Object> map = hibernateProperties.determineHibernateProperties(
jpaProperties.getProperties(), new HibernateSettings());return map;
} @Primary
@Bean(name = "secondDataSource")
@ConfigurationProperties(prefix = "spring.datasource.second")
public DataSource targetDataSource(){
return DataSourceBuilder.create().build();
} @Primary
@Bean(name = "entityManagerFactorySecond")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(EntityManagerFactoryBuilder builder, @Qualifier("secondDataSource") DataSource dataSource) {
return builder.dataSource(dataSource)
.properties(getVendorProperties())
.packages("com.xxj.second.model")
.persistenceUnit("targetPersistenceUnit")
.build();
} @Primary
@Bean(name = "transactionManagerSecond")
public PlatformTransactionManager propertyTransactionManager(
@Qualifier("entityManagerFactorySecond") EntityManagerFactory propertyEntityManagerFactory) {
return new JpaTransactionManager(propertyEntityManagerFactory);
}
}
数据源配置
spring.datasource.primary.jdbc-url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=false&requireSSL=false
spring.datasource.primary.username = root
spring.datasource.primary.password = 1234567
spring.datasource.primary.driver-class-name = com.mysql.jdbc.Driver spring.datasource.second.jdbc-url = jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=false&rewriteBatchedStatements=true
spring.datasource.second.username = root
spring.datasource.second.password = 1234567
spring.datasource.second.driver-class-name = com.mysql.jdbc.Driver
springboot 2.x版本jpa多数据源引入跟1.x版本有些不太一样,还需要额外注意。
- 获取jpa配置的方式
- 数据源配置为jdbc-url
要注意:packages不能引用相同的model,否则会导致数据库卡死。
最新文章
- 对git的理解及常用指令
- EasyUI的DataGrid 打印导出
- php部分---面向对象,设计模式(单例模式、工厂模式)、oop六大原则;
- Windows下zlib库和libPng库的编译和使用
- RS485接线 - 为什么要给2线制RS485接3根线?
- application(CURD)--easyui
- Git联系oschina托管代码版本号
- css 8.1
- django学习过程中知识点小结
- TP框架自带的正则验证的规则
- .32-浅析webpack源码之doResolve事件流(4)
- BZOJ 4259: 残缺的字符串 [FFT]
- ELK 5.5.0 安装
- Swagger2使用参考
- Appium1.9 之 Chromedriver安装方式
- DB2序列和主键自增长
- 只用最适合的! 全面对比主流 .NET 报表控件:水晶报表、FastReport、ActiveReports 和 Stimulsoft
- ComboBox赋值ItemsSource数据源的时候会触发SelectionChanged改变事件的解决办法
- redux的一些插件总结(redux-actions,reselect)
- $微信小程序开发实践点滴——接入Bmob后端云
热门文章
- ArrayList、Vector、LinkedList的区别
- 解决Google Chrome浏览器字体模糊的问题
- python 进程与线程 精要
- 8.Struts2拦截器
- 酷狗mac版如何新建歌单?酷狗mac版收藏歌单方法
- Unity 2018 version class.jar path
- NX二次开发-UFUN修剪体UF_MODL_trim_body
- NX二次开发-UFUN拾取平面对话框UF_UI_specify_plane
- NX二次开发-获取UG界面窗口句柄UF_UI_get_default_parent
- js 彻底理解回调函数