1.引入JpA
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2.配置數據源
package com.example.jpa.demojpa;
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 DataSourceConfig {
@Bean(name = "primaryDataSource")
@Qualifier("primaryDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
System.out.println("primary db built");
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@Qualifier("secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
System.out.println("secondary db built");
return DataSourceBuilder.create().build();
}
}
package com.example.jpa.demojpa;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
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.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
import java.util.Map;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "masterEntityManagerFactory",
transactionManagerRef = "masterTransactionManager",
basePackages = {"jpa1"})//jpa所在包
public class MasterConfig {
@Autowired
private HibernateProperties hibernateProperties;
@Resource
@Qualifier("primaryDataSource")
private DataSource masterDataSource;
@Primary
@Bean(name = "masterEntityManager")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return masterEntityManagerFactory(builder).getObject().createEntityManager();
}
@Resource
private JpaProperties jpaProperties;
// private Map<String, Object> getVendorProperties() {
// return jpaProperties.getHibernateProperties(new HibernateSettings());
// }
/**
* 設置實體類所在位置
*/
@Primary
@Bean(name = "masterEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean masterEntityManagerFactory(EntityManagerFactoryBuilder builder) {
Map<String, Object> properties = hibernateProperties.determineHibernateProperties(
jpaProperties.getProperties(), new HibernateSettings());
return builder
.dataSource(masterDataSource)
.packages("com.example.jpa.demojpa")
.persistenceUnit("masterPersistenceUnit")
.properties(properties)
.build();
}
@Primary
@Bean(name = "masterTransactionManager")
public PlatformTransactionManager masterTransactionManager(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(masterEntityManagerFactory(builder).getObject());
}
}
package com.example.jpa.demojpa;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
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.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.annotation.Resource;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
import java.util.Map;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "slaveEntityManagerFactory",
transactionManagerRef = "slaveTransactionManager",
basePackages = {"jpa2"})//repository的目錄
public class SlaveConfig {
@Autowired
@Qualifier("secondaryDataSource")
private DataSource slaveDataSource;
@Autowired
private HibernateProperties hibernateProperties;
@Bean(name = "slaveEntityManager")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return slaveEntityManagerFactory(builder).getObject().createEntityManager();
}
@Resource
private JpaProperties jpaProperties;
@Bean(name = "slaveEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean slaveEntityManagerFactory(EntityManagerFactoryBuilder builder) {
Map<String, Object> properties = hibernateProperties.determineHibernateProperties(
jpaProperties.getProperties(), new HibernateSettings());
return builder
.dataSource(slaveDataSource)
.packages("com.example.jpa.demojpa")//實體類的目錄
.persistenceUnit("slavePersistenceUnit")
.properties(properties)
.build();
}
@Bean(name = "slaveTransactionManager")
PlatformTransactionManager slaveTransactionManager(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(slaveEntityManagerFactory(builder).getObject());
}
}
spring.datasource.primary.jdbc-url=jdbc:mysql://xxx:3306/testmydb
spring.datasource.primary.username=root
spring.datasource.primary.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.primary.password=
spring.datasource.secondary.jdbc-url=jdbc:mysql://xxx:3306/demo
spring.datasource.secondary.username=root
spring.datasource.secondary.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.secondary.password=
@Repository
public interface UserMapper2 extends JpaRepository<User2, Integer> {
}