springboot + druid + hibernate多数据源

该文章是从别人的文章基础上进行修改和添加的,基础配置先看原文。本文只讲有些修改的地方。本人也是新手一枚,有什么错误的地方还望大家不吝指教。

先上mvn配置
在这里插入图片描述

1. 多数据源DataSource的配置

@Configuration
//由于我的datasource没有配置在application.yml中所以需要PropertySource指定位置
@PropertySource("classpath:application-datasource.yml") 
public class DruidConfig {
    private static final Logger LOGGER = LoggerFactory.getLogger(DruidConfig.class);

    @Bean(name = "primaryDataSource")
    @Qualifier("primaryDataSource")
    /*
    	只有主连接才加上@Primary
    */
    @Primary
    @ConfigurationProperties(prefix = "primary")
    public DataSource getPrimaryDataSource() {
    /*
    	注意项: maven必须引入druid与springboot整合的jar包
    		不要引用成druid本身的包了,要不然找不到这个Builder类
    */
        return DruidDataSourceBuilder.create().build();
    }

    @Bean(name = "secondaryDataSource")
    @Qualifier("secondaryDataSource")
    @ConfigurationProperties(prefix = "secondary")
    public DataSource getSecondaryDataSource() {
        return DruidDataSourceBuilder.create().build();
    }
}

下面这个是application-datasource.yml,各位根据自己的具体需求去改
在这里插入图片描述

2.EntityManager的配置

这个得根据上面配置的数据源来分别设定,以下代码仅为主数据源的配置,从数据源按照同样配置改下参数名即可。主从两个的repository和entity扫描路径不要配置一样,否则会导致重复注册。而且在这儿配置了扫描路径后,不需要在启动类上再增加@EntityScan注解,仍不会配置从数据源的参照原文。注:原文中的getVendorProperties(DataSource dataSource)这个方法已不适用,获取properties详见以下代码

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef="entityManagerFactoryPrimary",
        transactionManagerRef="transactionManagerPrimary",
        basePackages= { "com.*" }) //设置Repository所在及其子包位置
public class PrimaryConfig {

    @Autowired
    @Qualifier("primaryDataSource")
    private DataSource primaryDataSource;

    @Autowired
    private HibernateProperties hibernateProperties;

    @Autowired
    private JpaProperties jpaProperties;

    @Primary
    @Bean(name = "entityManagerPrimary")
    public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
        return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
    }

    @Primary
    @Bean(name = "entityManagerFactoryPrimary")
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {
    //获取properties改为以下方法
        Map<String, Object> properties = hibernateProperties.determineHibernateProperties(
                jpaProperties.getProperties(), new HibernateSettings());
        return builder.
                dataSource(primaryDataSource)
                .properties(properties)
                .packages("com.*") //设置实体类及子包所在位置
                .persistenceUnit("primaryPersistenceUnit")
                .build();
    }
    @Primary
    @Bean(name = "transactionManagerPrimary")
    public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
        return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
    }

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值