incloud开发文档 5.1.0 Help

多数据源支持

平台支持多数据源开发,即:在同一个服务中使用多个数据库的数据源,方便开发者在一个服务中同时操作多个数据库。 虽然平台支持多数据源,但是在实际开发中,建议一个服务只使用一个数据源,这样可以避免数据源的混乱, 而且在微服务的开发中,一个服务只使用一个数据源是最佳实践。

配置多数据源

配置多数源分几种情况,如果你的业务应用跟平台的数据库在同一个数据库的情况下,你可以直接使用平台提供的数据源维护功能, 具体可参考:

数据源管理-关系数据源

在这里创建的数据源,不仅仅只是把数据保存在表里,同时也会把相应的数据源的spring bean动态注入到spring容器中, 然后你就可以在你的业务代码中直接使用了。

例如你创建的数据源名称为: test ,那么在你的业务代码中,你就可以直接使用平台提供的注解@DS("test")注入到你的业务代码中。 例如下面的代码:

@DS("incloud5") public List<DemoPurchaseVo> demo() { List<DemoPurchase> list = super.list(); log.debug("list:{}", list); return list != null ? DozerUtils.mapList(dozerMapper,list,DemoPurchaseVo.class) : null; }

这段代码中的数据源名称就是incloud5 ,这个数据源名称就是你在数据源管理中创建的数据源名称。 系统默认的数据源是master ,当然你不需要写,这个master数据源就是你在配置文件里配置的spring.datasource的数据源。

如果你的业务应用跟平台的数据库不在同一个数据库的情况下,你需要在你的业务应用中配置数据源,然后在你的业务代码中使用@DS注解注入到你的业务代码中。 具体配置数据源的方式,可以在自己应用的yaml文件中配置,例如:

incloud: database: postgres table: packages: - com.netwisd.base.demo.entity index: update: false openapi: prefix: demo datasource: - pool-name: master #url: jdbc:mysql://${INCLOUD_MYSQL_SERVICE_HOST}:${INCLOUD_MYSQL_SERVICE_PORT}/${INCLOUD_DB_SCHEMA}?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useSSL=false #url: jdbc:postgresql://${INCLOUD_POSTGRESQL_SERVICE_HOST}:${INCLOUD_POSTGRESQL_SERVICE_PORT}/${INCLOUD_DB_DATABASE}?currentSchema=${INCLOUD_DB_SCHEMA} url: jdbc:postgresql://${INCLOUD_POSTGRESQL_SERVICE_HOST}:${INCLOUD_POSTGRESQL_SERVICE_PORT}/${INCLOUD_DB_DATABASE}?currentSchema=incloud5_huabei #url: jdbc:dm://${INCLOUD_DM_SERVICE_HOST}:${INCLOUD_DM_SERVICE_PORT}?schema=${INCLOUD_DB_SCHEMA}&compatible_mode=oracle username: ${INCLOUD_DB_USER} password: ${INCLOUD_DB_PWD} type: com.alibaba.druid.pool.DruidDataSource #driverClassName: com.mysql.cj.jdbc.Driver driverClassName: org.postgresql.Driver #driverClassName: dm.jdbc.driver.DmDriver druid: initial-size: 5 min-idle: 5 max-active: 50 max-wait: 30000 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 3600000 validation-query: select 1 test-while-idle: true test-on-borrow: false test-on-return: false pool-prepared-statements: false max-pool-prepared-statement-per-connection-size: 50 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=6000 - pool-name: incloud5 url: jdbc:mysql://${INCLOUD_MYSQL_SERVICE_HOST}:${INCLOUD_MYSQL_SERVICE_PORT}/${INCLOUD_DB_SCHEMA}?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useSSL=false #url: jdbc:postgresql://${INCLOUD_POSTGRESQL_SERVICE_HOST}:${INCLOUD_POSTGRESQL_SERVICE_PORT}/${INCLOUD_DB_SCHEMA}?currentSchema=demo #url: jdbc:dm://${INCLOUD_DM_SERVICE_HOST}:${INCLOUD_DM_SERVICE_PORT}?schema=${INCLOUD_DB_SCHEMA}&compatible_mode=oracle username: ${INCLOUD_DB_USER} password: ${INCLOUD_DB_PWD} type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver #driverClassName: org.postgresql.Driver #driverClassName: dm.jdbc.driver.DmDriver druid: initial-size: 5 min-idle: 5 max-active: 50 max-wait: 30000 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 3600000 validation-query: select 1 test-while-idle: true test-on-borrow: false test-on-return: false pool-prepared-statements: false max-pool-prepared-statement-per-connection-size: 50 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=6000

请记得,pool-name: master,master就是我们默认的数据源,也就是你的spring应用的默认数据源,你不需要显式的写指定。 在incloud.database下面设定的是你的业务应用的默认数据源,这里面的数据源也会被spring容器管理,你可以在你的业务代码中使用@DS注解注入到你的业务代码中。 例如 @DS("incloud5")

那么同样poolName的数据源会覆盖前面的,如果你在spring.datasource中配置了一个叫master的数据源,在这里又配置了一个,那么这里的master会覆盖前面的master。

Last modified: 20 一月 2025