要在 Spring Boot 中配置双数据源,一个 Oracle 数据源,一个 OpenGauss 数据源,并且让两个数据源都支持 JdbcTemplate 和 JPA,可以按照以下步骤进行操作:

  1. 引入所需的依赖:
<!-- 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>
  1. 配置数据源: 在 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
  1. 配置 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);
    }
}
  1. 配置 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);
    }
}
  1. 创建实体类和对应的 Repository 接口: 分别创建 Oracle 和 OpenGauss 的实体类和 Repository 接口,并使用 @Repository 注解标识 Repository 接口。

现在,你就可以在代码中通过 @Autowired 注解使用 JdbcTemplate 和 JPA 的相关实例,分别操作 Oracle 和 OpenGauss 数据库了。

Spring Boot 配置双数据源 (Oracle 和 OpenGauss) 支持 JdbcTemplate 和 JPA

原文地址: https://www.cveoy.top/t/topic/p1NS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录