Spring Boot是一个用于快速构建基于Spring框架的Java应用程序的开发框架。它简化了Spring应用程序的配置和部署过程,提供了一种约定大于配置的开发方式。
在同一个包中配置两个DataSources意味着我们希望在一个Spring Boot应用程序中使用两个不同的数据库。这种情况下,我们可以通过以下步骤来配置:
application.properties
或application.yml
配置文件中添加两个数据源的配置信息。例如:
spring.datasource.url=jdbc:mysql://localhost:3306/db1
spring.datasource.username=username1
spring.datasource.password=password1
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/db2
spring.datasource.secondary.username=username2
spring.datasource.secondary.password=password2
spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactory",
transactionManagerRef = "transactionManager",
basePackages = { "com.example.repository1" }
)
public class DataSource1Config {
@Primary
@Bean(name = "dataSource1")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("dataSource1") DataSource dataSource
) {
return builder
.dataSource(dataSource)
.packages("com.example.entity1")
.build();
}
@Primary
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory
) {
return new JpaTransactionManager(entityManagerFactory);
}
}
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "secondaryEntityManagerFactory",
transactionManagerRef = "secondaryTransactionManager",
basePackages = { "com.example.repository2" }
)
public class DataSource2Config {
@Bean(name = "dataSource2")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("dataSource2") DataSource dataSource
) {
return builder
.dataSource(dataSource)
.packages("com.example.entity2")
.build();
}
@Bean(name = "secondaryTransactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("secondaryEntityManagerFactory") EntityManagerFactory entityManagerFactory
) {
return new JpaTransactionManager(entityManagerFactory);
}
}
注意,@EnableJpaRepositories
注解用于启用JPA仓库,并指定实体类和仓库接口所在的包。
@Qualifier
注解指定要使用的数据源。例如:
@Service
public class MyService {
private final MyRepository1 repository1;
private final MyRepository2 repository2;
public MyService(
@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory1,
@Qualifier("secondaryEntityManagerFactory") EntityManagerFactory entityManagerFactory2
) {
this.repository1 = new MyRepository1(entityManagerFactory1);
this.repository2 = new MyRepository2(entityManagerFactory2);
}
// 使用repository1和repository2进行数据库操作
}
通过以上步骤,我们就可以在同一个包中配置两个DataSources,并在应用程序中使用它们进行数据库操作。
推荐的腾讯云相关产品:腾讯云数据库MySQL、腾讯云云服务器CVM、腾讯云容器服务TKE。
腾讯云数据库MySQL产品介绍链接地址:https://cloud.tencent.com/product/cdb
腾讯云云服务器CVM产品介绍链接地址:https://cloud.tencent.com/product/cvm
腾讯云容器服务TKE产品介绍链接地址:https://cloud.tencent.com/product/tke
领取专属 10元无门槛券
手把手带您无忧上云