springboot 配置多数据源

application.properties的数据源配置:

#本地测试主数据源

spring.primary.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.primary.datasource.url=jdbc:oracle:thin:@your datasource  ip address:1521:ORCL
spring.primary.datasource.username=your primary  datasource username
spring.primary.datasource.password=your primary  datasource  password
#从数据源
spring.secondary.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.secondary.datasource.url=jdbc:oracle:thin:@your another datasource ip address:1521:ORCL
spring.secondary.datasource.username=your secondary datasource username
spring.secondary.datasource.password=your secondary datasource  password

这边本人用的是连接两个oracle的数据库,如果想连接别的数据库,可自行修改驱动, url的配置。

数据源配置类:

主数据源:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "primaryEntityManagerFactory", transactionManagerRef = "primaryTransactionManager", basePackages = {
        "com.xxxx.repositories.primary" }) // 设置Repository所在位置
public class PrimaryConfig {

    @Autowired
    private Environment env;// 1

    @Primary
    @Bean
    @ConfigurationProperties(prefix = "spring.primary.datasource")
    public DataSourceProperties primaryDataSourceProperties() {// 2
        return new DataSourceProperties();
    }

    @Primary
    @Bean(name = "primaryDataSource")
    public DataSource primaryDataSource() { // 3
        DataSourceProperties dataSourceProperties = primaryDataSourceProperties();
        return DataSourceBuilder.create().driverClassName(dataSourceProperties.getDriverClassName())
                .url(dataSourceProperties.getUrl()).username(dataSourceProperties.getUsername())
                .password(dataSourceProperties.getPassword()).build();
    }

    @Primary
    @Bean(name = "primaryTransactionManager")
    public PlatformTransactionManager primaryTransactionManager() { // 4
        EntityManagerFactory factory = primaryEntityManagerFactory().getObject();
        return new JpaTransactionManager(factory);
    }

    @Primary
    @Bean(name = "primaryEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean primaryEntityManagerFactory() {// 5
        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setDataSource(primaryDataSource());
        factory.setPackagesToScan("com.xxxx.model");
        factory.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
        factory.setPersistenceUnitName("primaryPersistenceUnit");
        Properties jpaProperties = new Properties();
        jpaProperties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
        jpaProperties.put("hibernate.show-sql", env.getProperty("hibernate.show-sql"));
        jpaProperties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
        factory.setJpaProperties(jpaProperties);
        return factory;
    }

    public EntityManager entityManager() {
        return primaryEntityManagerFactory().getObject().createEntityManager();
    }
}

从数据源配置:

   

@Configuration
   @EnableTransactionManagement
   @EnableJpaRepositories(entityManagerFactoryRef = "secondaryEntityManagerFactory", transactionManagerRef = "secondaryTransactionManager", basePackages = {
             "com.xxxx.repositories.secondary" }) // 设置Repository所在位置
   public class SecondaryConfig {

@Autowired
private Environment env;// 1

@Bean
@ConfigurationProperties(prefix = "spring.secondary.datasource")
public DataSourceProperties secondaryDataSourceProperties() {// 2
 return new DataSourceProperties();
}

@Bean(name = "secondaryDataSource")
public DataSource secondaryDataSource() { // 3
 DataSourceProperties dataSourceProperties = secondaryDataSourceProperties();
 return DataSourceBuilder.create().driverClassName(dataSourceProperties.getDriverClassName())
   .url(dataSourceProperties.getUrl()).username(dataSourceProperties.getUsername())
   .password(dataSourceProperties.getPassword()).build();
}

@Bean(name = "secondaryTransactionManager")
public PlatformTransactionManager secondaryTransactionManager() { // 4
 EntityManagerFactory factory = secondaryEntityManagerFactory().getObject();
 return new JpaTransactionManager(factory);
}

@Bean(name = "secondaryEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean secondaryEntityManagerFactory() {// 5
 LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
 factory.setDataSource(secondaryDataSource());
 factory.setPackagesToScan("com.xxxx.model");
 factory.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
 factory.setPersistenceUnitName("secondaryPersistenceUnit");
 Properties jpaProperties = new Properties();
 jpaProperties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
 jpaProperties.put("hibernate.show-sql", env.getProperty("hibernate.show-sql"));
 jpaProperties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
 factory.setJpaProperties(jpaProperties);
 return factory;
}

public EntityManager entityManager() {
 return secondaryEntityManagerFactory().getObject().createEntityManager();
 }
}读写的配置得基于各位自己的业务来写了,这里就不做过多的赘述。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值