springboot创建多个数据源

application.properties文件内容如下:

server.port=8080

logging.path=/user/local/log
logging.level.com.favorites=DEBUG
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=ERROR


spring.datasource.first.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.first.jdbc-url=jdbc:oracle:thin:@192.144.212.207:1521:piccjk
spring.datasource.first.username=xww_test
spring.datasource.first.password=123456

spring.datasource.second.jdbc-url=jdbc:mysql://localhost:3306/order
spring.datasource.second.username=root
spring.datasource.second.password=123456
spring.datasource.second.driver-class-name=com.mysql.jdbc.Driver

spring.jpa.hibernate.first-dialect=org.hibernate.dialect.OracleDialect
spring.jpa.hibernate.second-dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.open-in-view=true
spring.jpa.show-sql=true
DataSourceConfiguration类内容如下:
package com.picc.jk.config;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfiguration {

    /**
     *  第一个数据连接,默认优先级最高
     * @return
     */
    @Bean(name = "dataSourceFirst")
    @Qualifier("dataSourceFirst")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.first")
    public DataSource dataSourceFirst() {
        //这种方式的配置默认只满足spring的配置方式,如果使用其他数据连接(druid),需要自己独立获取配置
        return DataSourceBuilder.create().build();
    }

    /**
     * 第二个数据源
     * @return
     */
    @Bean(name = "dataSourceSecond")
    @Qualifier("dataSourceSecond")
    @ConfigurationProperties(prefix = "spring.datasource.second")
    public DataSource dataSourceSecond() {
        return DataSourceBuilder.create().build();
    }
}

JpaFirstConfiguration类如下:
package com.picc.jk.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
import java.util.Map;

@Configuration
@EnableJpaRepositories(
        basePackages = "com.picc.jk.service",
        entityManagerFactoryRef = "firstEntityManagerFactoryBean",
        transactionManagerRef = "firstTransactionManager")
@EnableTransactionManagement
public class JpaFirstConfiguration {

    @Resource
    private HibernateProperties hibernateProperties;
    @Resource
    @Qualifier("dataSourceFirst")
    private DataSource dataSource;

    //jpa其他参数配置
    @Resource
    private JpaProperties jpaProperties;

    //实体管理工厂builder
    @Resource
    private EntityManagerFactoryBuilder factoryBuilder;

    @Value("${spring.jpa.hibernate.first-dialect}")
    private String firstDialect;// 获取对应的数据库方言

    /**
     * 配置第一个实体管理工厂的bean
     * @return
     */
    @Bean(name = "firstEntityManagerFactoryBean")
    @Primary
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
        Map<String, Object> properties = hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings());
        properties.put("hibernate.dialect",firstDialect);
        return factoryBuilder.
                dataSource(dataSource).
                packages("com.picc.jk.bean").
                persistenceUnit("firstPersistenceUnit").
                properties(properties).
                build();
    }

    /**
     * EntityManager不过解释,用过jpa的应该都了解
     * @return
     */
    @Bean(name = "firstEntityManager")
    @Primary
    public EntityManager entityManager() {
        return entityManagerFactoryBean().getObject().createEntityManager();
    }

    /**
     * jpa事务管理
     * @return
     */
    @Bean(name = "firstTransactionManager")
    @Primary
    public JpaTransactionManager transactionManager() {
        JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
        jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
        return jpaTransactionManager;
    }
}
JpaSecondConfiguration类内容如下:
package com.picc.jk.config;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;

import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
import java.util.Map;

/**
 * 第二个数据源,jpa的相关配置
 */
@Configuration
@EnableJpaRepositories(
        basePackages = "com.picc.jk.service",
        entityManagerFactoryRef = "secondEntityManagerFactoryBean",
        transactionManagerRef = "secondTransactionManager")
@EnableTransactionManagement
public class JpaSecondConfiguration {

    //第二个数据源,必须加Qualifier
    @Resource
    private HibernateProperties hibernateProperties;
    @Resource
    @Qualifier("dataSourceSecond")
    private DataSource dataSource;

    //jpa其他参数配置
    @Resource
    private JpaProperties jpaProperties;

    //实体管理工厂builder
    @Resource
    private EntityManagerFactoryBuilder factoryBuilder;

    @Value("${spring.jpa.hibernate.second-dialect}")
    private String secondDialect;// 获取对应的数据库方言
    /**
     * 配置第二个实体管理工厂的bean
     * @return
     */
    @Bean(name = "secondEntityManagerFactoryBean")
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
        Map<String, Object> properties = hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings());
        properties.put("hibernate.dialect",secondDialect);
        return factoryBuilder.
                dataSource(dataSource).
                packages("com.picc.jk.secondbean").
                properties(properties).
                build();
    }

    /**
     * EntityManager不过解释,用过jpa的应该都了解
     * @return
     */
    @Bean(name = "secondEntityManager")
    public EntityManager entityManager() {
        return entityManagerFactoryBean().getObject().createEntityManager();
    }

    /**
     * jpa事务管理
     * @return
     */
    @Bean(name = "secondTransactionManager")
    public JpaTransactionManager transactionManager() {
        JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
        jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
        return jpaTransactionManager;
    }
}

数据库连接:

@Autowired 
@Qualifier("firstEntityManager") 
@PersistenceContext
private EntityManager firstEntityManager;

@Autowired
@Qualifier("secondEntityManager")
@PersistenceContext
private EntityManager secondEntityManager;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值