spring boot 如何配置多个数据源,mysql和oracle

发布时间 2023-07-19 16:31:56作者: 乖怪丶

在Spring Boot中配置多个数据源,例如MySQL和Oracle,可以通过以下步骤实现:

  1. 添加依赖

pom.xml文件中添加MySQL和Oracle的依赖:

<!-- MySQL -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

<!-- Oracle -->
<dependency>
    <groupId>com.oracle.ojdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>19.3.0.0</version>
</dependency>
  1. 配置数据源

application.ymlapplication.properties文件中配置MySQL和Oracle的数据源:

spring:
  datasource:
    mysql:
      url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
      username: mysql_user
      password: mysql_password
      driver-class-name: com.mysql.cj.jdbc.Driver
    oracle:
      url: jdbc:oracle:thin:@localhost:1521:orcl
      username: oracle_user
      password: oracle_password
      driver-class-name: oracle.jdbc.driver.OracleDriver
  1. 创建数据源配置类

创建一个配置类,用于定义两个数据源的Bean:

@Configuration
public class DataSourceConfig {

    @Bean(name = "mysqlDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.mysql")
    public DataSource mysqlDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "oracleDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.oracle")
    public DataSource oracleDataSource() {
        return DataSourceBuilder.create().build();
    }
}
  1. 创建JdbcTemplate

为每个数据源创建一个JdbcTemplate,以便在DAO层使用:

@Configuration
public class JdbcTemplateConfig {

    @Bean(name = "mysqlJdbcTemplate")
    public JdbcTemplate mysqlJdbcTemplate(@Qualifier("mysqlDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    @Bean(name = "oracleJdbcTemplate")
    public JdbcTemplate oracleJdbcTemplate(@Qualifier("oracleDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}
  1. 使用JdbcTemplate

在DAO层,可以通过@Autowired@Qualifier注解注入对应的JdbcTemplate,然后使用它们执行SQL操作:

@Repository
public class MyDao {

    @Autowired
    @Qualifier("mysqlJdbcTemplate")
    private JdbcTemplate mysqlJdbcTemplate;

    @Autowired
    @Qualifier("oracleJdbcTemplate")
    private JdbcTemplate oracleJdbcTemplate;

    // 使用mysqlJdbcTemplate和oracleJdbcTemplate执行SQL操作
}