新建实体类User
package org.hx.springboot_jpamulti_demo31.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity(name = "user")
public class User {
@Id
@GeneratedValue
private Integer id;
private String name;
private String passwd;
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", passwd='" + passwd + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
}
配置application.properties文件
# 数据源一
spring.datasource.one.username=root
spring.datasource.one.password=123456
spring.datasource.one.jdbcUrl=jdbc:mysql:/
# 数据源二
spring.datasource.two.username=root
spring.datasource.two.password=123456
spring.datasource.two.jdbcUrl=jdbc:mysql:/
# Jpa配置
spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.database-platform=mysql
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect
新建UserDao1接口继承JpaRepository
package org.hx.springboot_jpamulti_demo31.dao1;
import org.hx.springboot_jpamulti_demo31.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserDao1 extends JpaRepository<User,Integer> {
}
新建UserDao2接口继承 JpaRepository
package org.hx.springboot_jpamulti_demo31.dao2;
import org.hx.springboot_jpamulti_demo31.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserDao2 extends JpaRepository<User,Integer> {
}
新建DataSourceConfig数据配置类
package org.hx.springboot_jpamulti_demo31.config;
import com.zaxxer.hikari.HikariDataSource;
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;
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties("spring.datasource.one")
@Primary
DataSource dataSourceOne(){
return new HikariDataSource();
}
@Bean
@ConfigurationProperties("spring.datasource.two")
DataSource dataSourceTwo(){
return new HikariDataSource();
}
}
新建jpaConfigOne类
package org.hx.springboot_jpamulti_demo31.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 javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
@Configuration
@EnableJpaRepositories(basePackages = "org.hx.springboot_jpamulti_demo31.dao1",entityManagerFactoryRef = "localContainerEntityManagerFactoryBean1",transactionManagerRef = "platformTransactionManager1")
public class jpaConfigOne {
@Autowired
@Qualifier("dataSourceOne")
DataSource dataSource;
@Autowired
JpaProperties jpaProperties;
@Bean
@Primary
LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean1(EntityManagerFactoryBuilder builder){
return builder.dataSource(dataSource)
.packages("org.hx.springboot_jpamulti_demo31.model")
.properties(jpaProperties.getProperties())
.persistenceUnit("pu1")
.build();
}
@Bean
PlatformTransactionManager platformTransactionManager1(EntityManagerFactoryBuilder builder){
return new JpaTransactionManager(localContainerEntityManagerFactoryBean1(builder).getObject());
}
}
新建jpaConfigTwo类
package org.hx.springboot_jpamulti_demo31.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 javax.sql.DataSource;
@Configuration
@EnableJpaRepositories(basePackages = "org.hx.springboot_jpamulti_demo31.dao2",entityManagerFactoryRef = "localContainerEntityManagerFactoryBean2",transactionManagerRef = "platformTransactionManager2")
public class jpaConfigTwo {
@Autowired
@Qualifier("dataSourceTwo")
DataSource dataSource;
@Autowired
JpaProperties jpaProperties;
@Bean
LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean2(EntityManagerFactoryBuilder builder){
return builder.dataSource(dataSource)
.packages("org.hx.springboot_jpamulti_demo31.model")
.properties(jpaProperties.getProperties())
.persistenceUnit("pu2")
.build();
}
@Bean
PlatformTransactionManager platformTransactionManager2(EntityManagerFactoryBuilder builder){
return new JpaTransactionManager(localContainerEntityManagerFactoryBean2(builder).getObject());
}
}
在测试类中进行测试
package org.hx.springboot_jpamulti_demo31;
import org.hx.springboot_jpamulti_demo31.dao1.UserDao1;
import org.hx.springboot_jpamulti_demo31.dao2.UserDao2;
import org.hx.springboot_jpamulti_demo31.model.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class SpringbootJpamultiDemo31ApplicationTests {
@Autowired
UserDao1 userDao1;
@Autowired
UserDao2 userDao2;
@Test
void contextLoads() {
List<User> userList1 = userDao1.findAll();
System.out.println("List1: "+userList1);
List<User> userList2 = userDao2.findAll();
System.out.println("List2: "+userList2);
}
}