Springboot-Jpa多数据库配置-2.0+版本

pom.xml增加:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

配置表同JdbcTemplate配置.

主数据源:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactoryPrimary",
transactionManagerRef = "transactionManagerPrimary",
basePackages = {"com.example.demo.p"})
public class PrimaryConfig {
@Bean(name = "primaryDataSource")
@Primary
@Qualifier("primaryDataSource")
@ConfigurationProperties(prefix="spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}

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

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

//@Autowired
//private JpaProperties jpaProperties;

//private Map<String, Object> getVendorProperties() {
// return jpaProperties.getHibernateProperties(new HibernateSettings());//与1.5版本不同,注意.
//}

@Primary
@Bean(name = "entityManagerFactoryPrimary")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary(EntityManagerFactoryBuilder builder) {
return builder.
dataSource(primaryDatasource)
//.properties(getVendorProperties())
.packages("com.example.demo.p")
.persistenceUnit("primaryPersistenceUnit")
.build();
}

@Primary
@Bean(name = "transactionManagerPrimary")
public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
}
}

主Entity:

@Entity
@Table(name = "xx")
public class Dtl {
@Id
@Column(name = "id")
private Long id;

@Column(name = "TICKER_SYMBOL")
private String tickerSymbol;

public Dtl() {}

public Dtl(String tickerSymbol) {
this.tickerSymbol = tickerSymbol;
}

public Long getId() {
return id;
}

public String getTickerSymbol() {
return tickerSymbol;
}

public void setTickerSymbol(String tickerSymbol) {
this.tickerSymbol = tickerSymbol;
}
}

主Repository:

public interface GetDtlP extends JpaRepository<Dtl, Long> {
List<Dtl> findByTickerSymbol(String tickerSymbol);
}

次数据源:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactorySecondary",
transactionManagerRef = "transactionManagerSecondary",
basePackages = {"com.example.demo.s"})
public class SecondaryConfig {
@Bean(name = "secondaryDataSource")
@Qualifier("secondaryDataSource")
@ConfigurationProperties(prefix="spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}

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

@Autowired
private JpaProperties jpaProperties;

private Map<String, Object> getVendorProperties() {
return jpaProperties.getHibernateProperties(new HibernateSettings());
}

@Bean(name = "entityManagerFactorySecondary")
public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary(EntityManagerFactoryBuilder builder) {
return builder.
dataSource(secondaryDataSource)
.properties(getVendorProperties())
.packages("com.example.demo.s")
.persistenceUnit("SecondaryPersistenceUnit")
.build();
}

@Bean(name = "entityManagerSecondary")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return entityManagerFactorySecondary(builder).getObject().createEntityManager();
}

@Bean(name = "transactionManagerSecondary")
public PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());
}
}

次Entity:

@Entity
@Table(name = "xx")
public class Dtl {
@Id
@Column(name = "id")
private Long id;

@Column(name = "TICKER_SYMBOL")
private String tickerSymbol;

public Dtl() {}

public Dtl(String tickerSymbol) {
this.tickerSymbol = tickerSymbol;
}

public Long getId() {
return id;
}

public String getTickerSymbol() {
return tickerSymbol;
}

public void setTickerSymbol(String tickerSymbol) {
this.tickerSymbol = tickerSymbol;
}
}

次Repository:

public interface GetDtlS extends JpaRepository<Dtl, Long> {
List<Dtl> findByTickerSymbol(String tickerSymbol);
}

测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class JpaTest {

@Autowired
protected GetDtlP getDtlP;

@Autowired
protected GetDtlS getDtlS;

@Test
public void test() throws Exception {
List a = getDtlP.findByTickerSymbol("3");
List b = getDtlS.findByTickerSymbol("3");
Assert.assertEquals(a, b);
}
}
posted @ 2018-06-21 16:41  一路漂泊  阅读(2099)  评论(0编辑  收藏  举报