# 数据源配置
起始于 0.8.1-a13
# 主数据源
spring-boot-autoconfigure提供了JdbcTemplate和DataSource的 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);
}