spring boot jpa之多数据源

来源:互联网 发布:淘宝背景音乐怎么修改 编辑:程序博客网 时间:2024/06/08 17:03

spring boot jpa之多数据源

1.配置多数据源,配置信息如下图所示:

                 

2.datasource类的配置,具体代码如下

               
package com.zxl.examples.config;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import javax.sql.DataSource;/** * Created by Administrator on 2017/8/11. * * 数据源的配置 * */@Configurationpublic class DataSourceConfig {    @Bean(name = "primaryDataSource")    @Qualifier("primaryDataSource")    @ConfigurationProperties(prefix="spring.datasource.primary")    public DataSource primaryDataSource() {        return DataSourceBuilder.create().build();    }    @Bean(name = "secondaryDataSource")    @Qualifier("secondaryDataSource")    @Primary    @ConfigurationProperties(prefix="spring.datasource.secondary")    public DataSource secondaryDataSource() {        return DataSourceBuilder.create().build();    }}
package com.zxl.examples.config;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;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.PlatformTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.persistence.EntityManager;import javax.sql.DataSource;import java.util.Map;/** * Created by Administrator on 2017/8/11. * * 数据源一 */@Configuration@EnableTransactionManagement@EnableJpaRepositories(        entityManagerFactoryRef="entityManagerFactoryPrimary",        transactionManagerRef="transactionManagerPrimary",        basePackages= { "com.zxl.examples.service" }) //设置Repository所在位置public class PrimaryConfig {    @Autowired    @Qualifier("primaryDataSource")    private DataSource primaryDataSource;    @Primary    @Bean(name = "entityManagerPrimary")    public EntityManager entityManager(EntityManagerFactoryBuilder builder) {        return entityManagerFactoryPrimary(builder).getObject().createEntityManager();    }    @Primary    @Bean(name = "entityManagerFactoryPrimary")    public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {        return builder                .dataSource(primaryDataSource)                .properties(getVendorProperties(primaryDataSource))                .packages("com.zxl.examples.entity") //设置实体类所在位置                .persistenceUnit("primaryPersistenceUnit")                .build();    }    @Autowired    private JpaProperties jpaProperties;    private Map getVendorProperties(DataSource dataSource) {        return jpaProperties.getHibernateProperties(dataSource);    }    @Primary    @Bean(name = "transactionManagerPrimary")    public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {        return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());    }}
package com.zxl.examples.config;/** * Created by Administrator on 2017/8/11. * * * 数据源2 */import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;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.data.jpa.repository.config.EnableJpaRepositories;import org.springframework.orm.jpa.JpaTransactionManager;import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;import org.springframework.transaction.PlatformTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.persistence.EntityManager;import javax.sql.DataSource;import java.util.Map;@Configuration@EnableTransactionManagement@EnableJpaRepositories(        entityManagerFactoryRef="entityManagerFactorySecondary",        transactionManagerRef="transactionManagerSecondary",        basePackages= { "com.zxl.examples.service2" }) //设置Repository所在位置public class SecondaryConfig {    @Autowired    @Qualifier("secondaryDataSource")    private DataSource secondaryDataSource;    @Bean(name = "entityManagerSecondary")    public EntityManager entityManager(EntityManagerFactoryBuilder builder) {        return entityManagerFactorySecondary(builder).getObject().createEntityManager();    }    @Bean(name = "entityManagerFactorySecondary")    public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary (EntityManagerFactoryBuilder builder) {        return builder                .dataSource(secondaryDataSource)                .properties(getVendorProperties(secondaryDataSource))                .packages("com.zxl.examples.entity") //设置实体类所在位置                .persistenceUnit("primaryPersistenceUnit")                .build();    }    @Autowired    private JpaProperties jpaProperties;    private Map getVendorProperties(DataSource dataSource) {        return jpaProperties.getHibernateProperties(dataSource);    }    @Bean(name = "transactionManagerSecondary")    PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) {        return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());    }}

                 3.datasource下的service层的代码展现如下图所示
                

             4.多数据源的controller调用代码如下图:
             


5.调用结果如下图所示:


原创粉丝点击