springboot怎么配置多数据源

avatar
作者
猴君
阅读量:0

在Spring Boot中配置多个数据源可以通过以下步骤来实现:

  1. 在pom.xml文件中添加Spring Boot对多数据源的支持依赖:
<dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency>     <groupId>com.zaxxer</groupId>     <artifactId>HikariCP</artifactId> </dependency> 
  1. 在application.properties或application.yml配置文件中配置每个数据源的连接信息:
# 数据源1 spring.datasource.url=jdbc:mysql://localhost:3306/db1 spring.datasource.username=root spring.datasource.password=root  # 数据源2 spring.datasource.secondary.url=jdbc:mysql://localhost:3306/db2 spring.datasource.secondary.username=root spring.datasource.secondary.password=root 
  1. 创建多个DataSource bean,分别对应每个数据源:
@Configuration public class DataSourceConfig {      @Primary     @Bean(name = "dataSource")     @ConfigurationProperties(prefix = "spring.datasource")     public DataSource dataSource() {         return DataSourceBuilder.create().build();     }      @Bean(name = "secondaryDataSource")     @ConfigurationProperties(prefix = "spring.datasource.secondary")     public DataSource secondaryDataSource() {         return DataSourceBuilder.create().build();     } } 
  1. 配置JpaVendorAdapter和EntityManagerFactory bean,指定每个数据源的JPA配置:
@Configuration @EnableJpaRepositories(         basePackages = "com.example.repository",          entityManagerFactoryRef = "entityManagerFactory",         transactionManagerRef = "transactionManager" ) public class JpaConfig {      @Autowired     @Qualifier("dataSource")     private DataSource dataSource;      @Autowired     @Qualifier("secondaryDataSource")     private DataSource secondaryDataSource;      @Primary     @Bean(name = "entityManagerFactory")     public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {         return builder                 .dataSource(dataSource)                 .packages("com.example.domain")                 .persistenceUnit("primary")                 .build();     }      @Bean(name = "secondaryEntityManagerFactory")     public LocalContainerEntityManagerFactoryBean secondaryEntityManagerFactory(EntityManagerFactoryBuilder builder) {         return builder                 .dataSource(secondaryDataSource)                 .packages("com.example.domain")                 .persistenceUnit("secondary")                 .build();     }      @Primary     @Bean(name = "transactionManager")     public PlatformTransactionManager transactionManager(             @Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {         return new JpaTransactionManager(entityManagerFactory);     }      @Bean(name = "secondaryTransactionManager")     public PlatformTransactionManager secondaryTransactionManager(             @Qualifier("secondaryEntityManagerFactory") EntityManagerFactory secondaryEntityManagerFactory) {         return new JpaTransactionManager(secondaryEntityManagerFactory);     } } 
  1. 在需要使用数据源的地方使用@Qualifier注解指定具体的数据源:
@Service public class MyService {      @Autowired     @Qualifier("entityManagerFactory")     private EntityManagerFactory entityManagerFactory;      // 使用entityManagerFactory进行数据库操作 } 

通过以上步骤,就可以在Spring Boot中成功配置多个数据源。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!