博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot下springdatajpa配置多数据源
阅读量:2446 次
发布时间:2019-05-10

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

1.我们需要在application.yml中配置第多个连接

结构:

spring:

  profiles:local

  datasource:

      aDataSource:

         type:xx

         url:xx

         username:xx

         ....

      bDataSource: 

         type:xx

         url:xx

         username:xx

         ....

2.我们需要创建一个DataSourceConfig,将上面多个数据源进行注册

@Configurationpublic class DataSourceConfig {    @Bean(name = "aDataSource")    @Qualifier("aDataSource")    @Primary    @ConfigurationProperties(prefix="spring.datasource.aDataSource")    public DataSource wdxhDataSource() {        return DataSourceBuilder.create().build();    }    @Bean(name = "bDataSource")    @Qualifier("bDataSource")    @ConfigurationProperties(prefix="spring.datasource.bDataSource")    public DataSource fileUploadDataSource() {        return DataSourceBuilder.create().build();    }}

@Primary,加此注解标注为主从关系;

@Qualifier,加上此注册则表示根据id去声名或者扫描某个组件,如两个数据源中的表名相同则需要预先把两个组名的名字区分开来,

如:@Repository("a_user_repository"),然后通过上面的注释@Autowaried @Qualifier("a_user_repository")来精确的找到组件id进行注入,否则会报组件未定义的错误

3.我们需要定义多个DatabaseConfig来配置所对应的扫描路径,如repository路径entity路径等。

@Configuration@EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactoryA",        transactionManagerRef = "transactionManagerA",        basePackages = {
"com.test.persistence.A.repository"})@EnableTransactionManagementpublic class FileUploadDatabaseConfiguration { @Autowired @Qualifier("aDataSource") private DataSource aDataSource; @Autowired private JpaProperties jpaProperties; @Bean
@Primary
public JpaVendorAdapter jpaVendorAdapter() {        HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();        adapter.setDatabase(Database.MYSQL);        adapter.setShowSql(false);        adapter.setGenerateDdl(true);        adapter.setDatabasePlatform("org.hibernate.dialect.MySQL5Dialect");        return adapter;    }    @Bean(name = "entityManagerFactoryA") @Primary public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {    return builder            .dataSource(aDataSource)            .properties(getVendorProperties(aDataSource))            .packages("com.test.persistence.A.entity") //设置实体类所在位置            .persistenceUnit("aPersistenceUnit")            .build();}private Map
getVendorProperties(DataSource dataSource) { return jpaProperties.getHibernateProperties(dataSource);}@Bean(name = "transactionManagerA")@Primarypublic JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) { JpaTransactionManager manager = new JpaTransactionManager(); manager.setEntityManagerFactory(entityManagerFactory); return manager;}@Beanpublic BeanPostProcessor persistenceTranslation() { return new PersistenceAnnotationBeanPostProcessor();}

类似的,新增DatabaseConfig,其结构一样就可以了,区别是DataSource是需要对应的,无@Primary注解。

3.调用对应的repository进行表操作,这里跟平时注入没什么两样

@Autowired

private RepostoryA repostoryA;

@Autowired

private RepostoryB repostoryB;

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

你可能感兴趣的文章
在React中使用Font Awesome 5
查看>>
React Hooks入门
查看>>
盖茨比乔布斯_用盖茨比快速浏览WordPress站点
查看>>
vue.js表单验证_Vue.js中的模板驱动表单验证
查看>>
软件测试结束标志_使用功能标志进行生产中的测试
查看>>
css网格_在CSS网格中放置,跨度和密度
查看>>
火狐动态调试css_使用Firefox开发工具调试CSS网格
查看>>
服务周期性工作内容_使服务工作者生命周期神秘化
查看>>
响应式屏幕_检测角度的响应式屏幕尺寸
查看>>
nuxt.js 全局 js_在Nuxt.js应用中实现身份验证
查看>>
具有NgClass和NgStyle的Angular 2+类
查看>>
网络抓取_使用ScrapeStack轻松进行网络抓取
查看>>
koa express_Koa简介-Express的未来
查看>>
github请求超时_在GitHub中创建第一个请求请求
查看>>
JavaScript函数式编程介绍:使用map(),filter()和reduce()进行列表处理
查看>>
构建自定义JavaScript Scrollspy导航
查看>>
laravel/dusk_Laravel Dusk简介
查看>>
slim3框架 教程_SLIM 3入门,PHP微框架
查看>>
谷歌中阻止冒泡在火狐中失效_如何在Google表格中转换货币
查看>>
wps表格日期计算天数_如何计算Google表格中两个日期之间的天数
查看>>