Solon v3.2.1

数据源之“配置与构建”

</> markdown

Solon 是强调多个数据源的框架,可用两种方式构建数据源的托管 Bean(效果相同):

  • 使用@Bean方法构建(自己随意配置)
  • 使用 solon.dataSources 特定配置格式自动构建

1、使用@Bean方法(手动构建)

添加配置。配置名随意,与 @Bean 函数的注入对上就可以(就是普通托管对象的构建方式)。

demo.db_order: #数据源
    driverClassName: "xx"
    jdbcUrl: "xxx"
    username: "xxx"
    paasword: "xxx"

demo.db_user: #动态数据源
    strict: true #是否严格的
    default: db_user_r #指定默认的内部数据源
    db_user_r: #内部数据源1
      dataSourceClassName: "com.zaxxer.hikari.HikariDataSource"
      driverClassName: "xx"
      jdbcUrl: "xxx" #属性名要与 type 类的属性对上
      username: "xxx"
      paasword: "xxx"
    db_user_w: #内部数据源2
      dataSourceClassName: "com.zaxxer.hikari.HikariDataSource"
      driverClassName: "xx"
      jdbcUrl: "xxx" #属性名要与 type 类的属性对上
      username: "xxx"
      paasword: "xxx"
      
demo.db_log: #分片数据源
    file: "classpath:sharding.yml"

添加 Java 配置类。注意 @Inject 对应的配置名,相关的属性配置要与对应的注入类有关。

@Configuration
public class DsConfig {
    @Bean(name="db_order", typed=true)
    public DataSource db_order(@Inject("${demo.db_order}") HikariDataSource ds){
        return ds;
    }
    
    @Bean("db_user")
    public DataSource db_user(@Inject("${demo.db_user}") DynamicDataSource ds){
        return ds;
    }
    
    @Bean("db_log")
    public DataSource db_log(@Inject("${demo.db_log}") ShardingDataSource ds){
        return ds;
    }
}

构建后在 Solon 容器里会有三个数据源 Bean :

数据源类型备注
db_orderHikariDataSource
db_userDynamicDataSource内部还有 db_user_r,db_user_w 子数据源(不能通过容器获取)
db_logShardingDataSource

2、使用 solon.dataSources 特定配置格式(自动构建)

(v2.9.0 后支持)根据配置自动构建,是“使用 Java 配置类进行构建”方式的自然演化。

2.1、格式说明

配置以 solon.dataSources 开头(注意是以"s"结尾的,强调多数据源特性),内容为 Map 结构。格式如下:

solon.dataSources:
  name1!:
    class: "....DataSource"
    prop..: ...
  name2:
    class: "....DataSource"
    prop...: ...

说明:

  • name* 表示数据源注册到容器的名字(例如:db_user, db_order)
    • name*! (加 ! 号)表示还要按类型注册到容器,相当于默认(只能有一个)。使用或关联时,仍是name*
  • class 表示数据源的类名(必须是 DataSource 接口的实现类)
  • prop... 表示数据源的属性配置(需要什么属性,要看 class 的需求)

2.2、配置示例

有自动构建支持后。相当于省去了 Java 的配置类代码。其中 DynamicDataSource 由插件solon-data-dynamicds 提供。

solon.dataSources:
  "db_order!": #数据源(!结尾表示 typed=true)
    class: "com.zaxxer.hikari.HikariDataSource"
    driverClassName: "xx"
    jdbcUrl: "xxx"
    username: "xxx"
    paasword: "xxx"
  "db_user": #动态数据源
    class: "org.noear.solon.data.dynamicds.DynamicDataSource"
    strict: true #是否严格的
    default: db_user_r #指定默认的内部数据源
    db_user_r: #内部数据源1
      dataSourceClassName: "com.zaxxer.hikari.HikariDataSource"
      driverClassName: "xx"
      jdbcUrl: "xxx" #属性名要与 type 类的属性对上
      username: "xxx"
      paasword: "xxx"
    db_user_w: #内部数据源2
      dataSourceClassName: "com.zaxxer.hikari.HikariDataSource"
      driverClassName: "xx"
      jdbcUrl: "xxx" #属性名要与 type 类的属性对上
      username: "xxx"
      paasword: "xxx"
  "db_log": #分片数据源
    class: "org.noear.solon.data.shardingds.ShardingDataSource"
    file: "classpath:sharding.yml"

自动构建后在 Solon 容器里会有三个数据源 Bean(和上面的示例效果相同) :

数据源类型备注
db_orderHikariDataSource
db_userDynamicDataSource内部还有 db_user_r,db_user_w 子数据源(不能通过容器获取)
db_logShardingDataSource

3、特定数据源的配置参考