diff --git a/src/main/java/top/fjy8018/jpadatasource/config/DataAccessConfig.java b/src/main/java/top/fjy8018/jpadatasource/config/DataAccessConfig.java index 429a033..870a5e0 100644 --- a/src/main/java/top/fjy8018/jpadatasource/config/DataAccessConfig.java +++ b/src/main/java/top/fjy8018/jpadatasource/config/DataAccessConfig.java @@ -1,11 +1,23 @@ package top.fjy8018.jpadatasource.config; import com.zaxxer.hikari.HikariDataSource; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.boot.context.properties.ConfigurationProperties; +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 top.fjy8018.jpadatasource.entity.backup.Order; +import top.fjy8018.jpadatasource.entity.primary.Product; +import top.fjy8018.jpadatasource.repository.backup.OrderRepository; +import top.fjy8018.jpadatasource.repository.primary.ProductRepository; + +import javax.sql.DataSource; /** * @author F嘉阳 @@ -40,5 +52,49 @@ public class DataAccessConfig { return secondDataSourceProperties().initializeDataSourceBuilder() .type(HikariDataSource.class).build(); } + + @Bean + @Primary + public LocalContainerEntityManagerFactoryBean firstEntityManagerFactory( + EntityManagerFactoryBuilder builder, @Qualifier("firstDataSource") DataSource dataSource) { + return builder + .dataSource(dataSource) + .packages(Product.class) + .persistenceUnit("first") + .build(); + } + + @Bean + public LocalContainerEntityManagerFactoryBean secondEntityManagerFactory( + EntityManagerFactoryBuilder builder, @Qualifier("secondDataSource") DataSource dataSource) { + return builder + .dataSource(dataSource) + .packages(Order.class) + .persistenceUnit("second") + .build(); + } + + @Bean + public PlatformTransactionManager primaryTransactionManager( + @Qualifier("firstEntityManagerFactory") LocalContainerEntityManagerFactoryBean entityManagerFactory) { + return new JpaTransactionManager(entityManagerFactory.getObject()); + } + + @Bean + public PlatformTransactionManager backupTransactionManager( + @Qualifier("secondEntityManagerFactory") LocalContainerEntityManagerFactoryBean entityManagerFactory) { + return new JpaTransactionManager(entityManagerFactory.getObject()); + } + + @EnableJpaRepositories(basePackageClasses = ProductRepository.class, + entityManagerFactoryRef = "firstEntityManagerFactory", transactionManagerRef = "primaryTransactionManager") + @Primary + public class PrimaryConfiguration { + } + + @EnableJpaRepositories(basePackageClasses = OrderRepository.class, + entityManagerFactoryRef = "secondEntityManagerFactory", transactionManagerRef = "backupTransactionManager") + public class secondConfiguration { + } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 3d26e7a..7417067 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -23,4 +23,5 @@ spring: properties: hibernate: format_sql: true - use_sql_comments: true \ No newline at end of file + use_sql_comments: true + generate-ddl: true \ No newline at end of file