1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Spring Boot + Spring Data JPA项目配置多数据源

Spring Boot + Spring Data JPA项目配置多数据源

时间:2018-07-13 23:08:01

相关推荐

Spring Boot + Spring Data JPA项目配置多数据源

在以前的常规项目中,直接XML配置文件中配置多个数据源即可,在最新推荐的做法中,我们使用配置类来设置。

首先配置两个数据源:

package com.web.config;import javax.sql.DataSource;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;@Configurationpublic class DataSourceConfig {@Bean(name = "primaryDS")@Qualifier("primaryDS")@Primary@ConfigurationProperties(prefix="spring.primary.datasource")public DataSource primaryDataSource(){return DataSourceBuilder.create().build();}@Bean(name = "secondaryDS")@Qualifier("secondaryDS")@ConfigurationProperties(prefix="spring.secondary.datasource")public DataSource secondaryDataSource(){return DataSourceBuilder.create().build();}}

@Primary 的意思是默认实现。

然后分别配置两个数据源的详细信息。

配置一:

package com.web.config;import java.util.Map;import javax.persistence.EntityManager;import javax.sql.DataSource;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;/*** @author bbaiggey**/@Configuration@EnableTransactionManagement@EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactoryPrimary",transactionManagerRef="transactionManagerPrimary",basePackages= { "com.anxpp.web.core.repo.work" })//设置dao(repo)所在位置public class RepositoryPrimaryConfig {@Autowiredprivate JpaProperties jpaProperties;@Autowired@Qualifier("primaryDS")private DataSource primaryDS;@Bean(name = "entityManagerPrimary")@Primarypublic EntityManager entityManager(EntityManagerFactoryBuilder builder) {return entityManagerFactoryPrimary(builder).getObject().createEntityManager();}@Bean(name = "entityManagerFactoryPrimary")@Primarypublic LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {return builder.dataSource(primaryDS).properties(getVendorProperties(primaryDS)).packages("com.anxpp.web.core.entity.po") //设置实体类所在位置.persistenceUnit("primaryPersistenceUnit").build();}private Map<String, String> getVendorProperties(DataSource dataSource) {return jpaProperties.getHibernateProperties(dataSource);}@Bean(name = "transactionManagerPrimary")@PrimaryPlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());}}

配置二:

package com.web.config;import java.util.Map;import javax.persistence.EntityManager;import javax.sql.DataSource;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;@Configuration@EnableTransactionManagement@EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactorySecondary",transactionManagerRef="transactionManagerSecondary",basePackages= { "com.anxpp.web.core.repo.dev" })public class RepositorySecondaryConfig {@Autowiredprivate JpaProperties jpaProperties;@Autowired @Qualifier("secondaryDS")private DataSource secondaryDS;@Bean(name = "entityManagerSecondary")public EntityManager entityManager(EntityManagerFactoryBuilder builder) {return entityManagerFactorySecondary(builder).getObject().createEntityManager();}@Bean(name = "entityManagerFactorySecondary")public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary (EntityManagerFactoryBuilder builder) {return builder.dataSource(secondaryDS).properties(getVendorProperties(secondaryDS)).packages("com.anxpp.web.core.entity.po").persistenceUnit("secondaryPersistenceUnit").build();}private Map<String, String> getVendorProperties(DataSource dataSource) {return jpaProperties.getHibernateProperties(dataSource);}@Bean(name = "transactionManagerSecondary")PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) {return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());}}

上文中 com..web.core.repo.dev 表示数据访问接口的包,其中的repo访问数据库时,会自动使用RepositorySecondaryConfig。

实体也类似。

数据库连接配置:

#Workspring.primary.datasource.url=jdbc:oracle:thin:@//ip:port/db1spring.primary.datasource.username=usernamespring.primary.datasource.password=passwordspring.primary.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver#Developmentspring.secondary.datasource.url=jdbc:oracle:thin:@//ip:port/db2spring.secondary.datasource.username=usernamespring.secondary.datasource.password=passwordspring.secondary.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver#multiple Settingspring.jpa.hibernate.ddl-auto=updatespring.jpa.show-sql=true

然后就可以直接使用了。

配置完成

当然,也可以配置更多数据源。

需求是因为多个数据库,需要一些细粒度的数据对比同步,在Java代码中更容易操作,所以就使用两个数据源的Java代码来完成了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。