SpringBoot项目配置多数据源

  由于对接的项目比较老,要与其数据库进行交互,而且数据库类型不一致,所以我们的项目需要支持多数据源(接口平台),这个还是非常好配置的,SpringBoot给我们提供了多数据源配置的方案,并且每个数据源对应一个JdbcTemplate,这样就方便很多,具体配置如下:

application.properties文件内配置多数据源信息

  首先在application.properties或者yml文件内配置多数据源信息,具体配置如下:

# ds1数据源配置
spring.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.ds1.url=jdbc:mysql://localhost:3306/zz?useUnicode=true&characterEncoding=utf8
spring.datasource.ds1.username=zz
spring.datasource.ds1.password=zz

# ds2数据源配置
spring.datasource.ds2.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.ds2.url=jdbc:oracle:thin:@localhost:1521:orcl
spring.datasource.ds2.username=system
spring.datasource.ds2.password=050508

指定数据源与配置信息

  上面我们配置好了数据源,但是已经不是SpringBoot默认的数据源配置信息了,所以我们还要指定不同的数据源实例对应哪个配置信息,配置如下:

/**
 * 多数据源配置
 */
@Configuration
public class DataSourceConfig {

  /**
   * ds1数据源配置
   *
   * @return 配置信息
   */
  @Primary
  @Bean(name = "ds1DataSourceProperties")
  @ConfigurationProperties(prefix = "spring.datasource.ds1")
  public DataSourceProperties ds1DataSourceProperties() {
    return new DataSourceProperties();
  }

  /**
   * ds1数据源
   *
   * @param dataSourceProperties 配置信息
   * @return 数据源实例
   */
  @Primary
  @Bean(name = "ds1DataSource")
  public DataSource ds1DataSource(@Qualifier("ds1DataSourceProperties") DataSourceProperties dataSourceProperties) {
    return dataSourceProperties.initializeDataSourceBuilder().build();
  }

  /**
   * ds2数据源配置
   *
   * @return 配置信息
   */
  @Primary
  @Bean(name = "ds2DataSourceProperties")
  @ConfigurationProperties(prefix = "spring.datasource.ds2")
  public DataSourceProperties ds2DataSourceProperties() {
    return new DataSourceProperties();
  }

  /**
   * ds2数据源
   *
   * @param dataSourceProperties 配置信息
   * @return 数据源实例
   */
  @Primary
  @Bean(name = "ds2DataSource")
  public DataSource ds2DataSource(@Qualifier("ds2DataSourceProperties") DataSourceProperties dataSourceProperties) {
    return dataSourceProperties.initializeDataSourceBuilder().build();
  }

}

配置JdbcTemplate与数据源关系

  配置完数据源信息,我们想直接用不同的JdbcTemplate来操作不同的数据库,所以我们还要创建几个JdbcTemplate实例,并且这些实例与不同的数据源进行绑定,配置信息如下:

/**
 * JdbcTemplate 多数据源配置
 *
 * @author 明山
 * @see DataSourceConfig
 */
@Configuration
public class JdbcTemplateDataSourceConfig {

  /**
   * ds1 JdbcTemplate 配置
   *
   * @param dataSource 数据源
   * @return JdbcTemplate
   */
  @Primary
  @Bean(name = "ds1JdbcTemplate")
  public JdbcTemplate jdbcTemplate(@Qualifier("ds1DataSource") DataSource dataSource) {
    return new JdbcTemplate(dataSource);
  }

  /**
   *ds2 JdbcTemplate 配置
   *
   * @param dataSource 数据源
   * @return JdbcTemplate
   */
  @Bean(name = "ds2JdbcTemplate")
  public JdbcTemplate hdwmsJdbcTemplate(@Qualifier("ds2DataSource") DataSource dataSource) {
    return new JdbcTemplate(dataSource);
  }
}

使用JdbcTemplate

  配置完后,我们可以直接在具体的类中使用了,使用方式如下:

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

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