# 数据源配置

起始于 0.8.1-a13

# 主数据源

spring-boot-autoconfigure提供了JdbcTemplateDataSource的 bean 注册配置,常用的一些数据库类型配置示例如下,框架默认将该方式配置的数据源认为是主数据源,也叫默认数据源。

在数据访问中,注入的 Dao bean 在进行 SQL 语句操作时,默认使用主数据源;在进行实体相关的 crud 操作时,使用实体配置的数据源,实体在没有明确指定其他数据源的情况下,实体默认关联主数据源。

H2:

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:file:./.h2/dev;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1
    username: sa
    password: 1

MySQL:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: root

# 多数据源

框架拓展了数据源的配置,支持在连接主数据源的同时创建与其他数据库的连接。多数据源一般是给必须要配置其他连接的场景使用,若像是 MySQL 中切换不同的 schema,可以直接使用from schema.table...或在实体上配置 schema 属性即可。

多数据源配置类参考org.springframework.boot.autoconfigure.jdbc.DataSourceProperties,与主数据源的配置格式一致,只是前缀有所不同:

fly:
  data-sources:
    multiDataSource1:
      driverClassName: org.h2.Driver
      url: "jdbc:h2:file:./target/multi1;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"
      username: sa
      password: 1

和主数据源配置一样,支持使用fly.data-sources.multiDataSource1.type指定数据源实现类,目前默认且仅支持HikariDataSource

# 数据访问切换数据源

假设已有多数据源multiDataSource1,下面将简单列举数据访问中切换非主数据源的方法。

  • SQL操作
@Autowired
private Dao dao;

public void sql() {
    DaoOperations multi1Dao = dao.useDataSource("multiDataSource1");
    List<RowMap> result = multi1Dao.createSQLQuery("select 1 from dual").list();
}
  • 实体 CRUD 操作

实体配置关联其他数据源:

@Entity(dataSource = "multiDataSource1")
public class Multi1Entity {
   ...
}

配置后,Dao 进行实体相关 crud 操作,固定自动切换到该数据源

@Autowired
private Dao dao;

public void entity() {
  	Multi1Entity entity = new Multi1Entity();
    dao.insert(entity);
}
顶部