Spring Boot 配置双数据源 (Oracle 和 OpenGauss) 支持 JdbcTemplate 和 JPA
要在 Spring Boot 中配置双数据源,一个 Oracle 数据源,一个 OpenGauss 数据源,并且让两个数据源都支持 JdbcTemplate 和 JPA,可以按照以下步骤进行操作:
- 引入所需的依赖:
<!-- Oracle -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.8.0.0</version>
</dependency>
<!-- OpenGauss -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.24</version>
</dependency>
<!-- Spring Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
- 配置数据源: 在 application.properties(或 application.yml)文件中添加以下配置:
# Oracle 数据源配置
spring.datasource.oracle.url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.oracle.username=your-username
spring.datasource.oracle.password=your-password
spring.datasource.oracle.driver-class-name=oracle.jdbc.OracleDriver
# OpenGauss 数据源配置
spring.datasource.opengauss.url=jdbc:postgresql://localhost:5432/your-database
spring.datasource.opengauss.username=your-username
spring.datasource.opengauss.password=your-password
spring.datasource.opengauss.driver-class-name=org.postgresql.Driver
- 配置 JdbcTemplate: 创建两个 JdbcTemplate bean,并分别配置对应的数据源。
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = 'oracleDataSource')
@ConfigurationProperties(prefix = 'spring.datasource.oracle')
public DataSource oracleDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = 'opengaussDataSource')
@ConfigurationProperties(prefix = 'spring.datasource.opengauss')
public DataSource opengaussDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public JdbcTemplate oracleJdbcTemplate(@Qualifier('oracleDataSource') DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean
public JdbcTemplate opengaussJdbcTemplate(@Qualifier('opengaussDataSource') DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
- 配置 JPA: 创建两个 EntityManagerFactory bean,并分别配置对应的数据源。
@Configuration
@EnableJpaRepositories(
basePackages = 'com.example.oracle.repository',
entityManagerFactoryRef = 'oracleEntityManagerFactory',
transactionManagerRef = 'oracleTransactionManager'
)
public class OracleJpaConfig {
@Primary
@Bean(name = 'oracleEntityManagerFactory')
public LocalContainerEntityManagerFactoryBean oracleEntityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier('oracleDataSource') DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages('com.example.oracle.entity')
.persistenceUnit('oracle')
.build();
}
@Primary
@Bean(name = 'oracleTransactionManager')
public PlatformTransactionManager oracleTransactionManager(
@Qualifier('oracleEntityManagerFactory') EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
@Configuration
@EnableJpaRepositories(
basePackages = 'com.example.opengauss.repository',
entityManagerFactoryRef = 'opengaussEntityManagerFactory',
transactionManagerRef = 'opengaussTransactionManager'
)
public class OpenGaussJpaConfig {
@Bean(name = 'opengaussEntityManagerFactory')
public LocalContainerEntityManagerFactoryBean opengaussEntityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier('opengaussDataSource') DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages('com.example.opengauss.entity')
.persistenceUnit('opengauss')
.build();
}
@Bean(name = 'opengaussTransactionManager')
public PlatformTransactionManager opengaussTransactionManager(
@Qualifier('opengaussEntityManagerFactory') EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
- 创建实体类和对应的 Repository 接口:
分别创建 Oracle 和 OpenGauss 的实体类和 Repository 接口,并使用
@Repository注解标识 Repository 接口。
现在,你就可以在代码中通过 @Autowired 注解使用 JdbcTemplate 和 JPA 的相关实例,分别操作 Oracle 和 OpenGauss 数据库了。
原文地址: https://www.cveoy.top/t/topic/p1NS 著作权归作者所有。请勿转载和采集!