Pewarta Proxy

📋 Server Request & Proxy Logs

Loading active proxy settings...
Developed by Khairul Adha (adhexa.id)
Mengambil log server...

⚙️ Pengaturan Proxy Target

Skip to content

如何支持多个数据源? #148

Open

Description

@fineday009

请教下。
比如我有3个数据源,不同ip端口和库表。
直接建3个类,都继承APIJSONSQLConfig来做?
然后对每个数据源,都搞一套连接池

Activity

  1. TommyLemon commented on Oct 28, 2020

    @TommyLemon
    Member

    以上方法可行。

    也可以自定义
    DemoSQLConfig.java.getDBUri
    目前 Demo 里是根据 getDatabase 返回的 数据库类型来区分的,
    你可以根据表名或者其它方式来区分,给 getDBUri 返回不同的 uri。
    https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/demo/DemoSQLConfig.java

    如果需要前端自定义,可以加一个字段用来区分,例如
    "@uri": "jdbc:mysql://localhost:3306"
    目前需要自己实现,参考 @database, @Schema
    https://github.com/APIJSON/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/JSONObject.java

  2. fineday009 commented on Oct 28, 2020

    @fineday009
    ContributorAuthor

    以上方法可行。

    也可以自定义
    DemoSQLConfig.java.getDBUri
    目前 Demo 里是根据 getDatabase 返回的 数据库类型来区分的,
    你可以根据表名或者其它方式来区分,给 getDBUri 返回不同的 uri。
    https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/demo/DemoSQLConfig.java

    如果需要前端自定义,可以加一个字段用来区分,例如
    "@uri": "jdbc:mysql://localhost:3306"
    目前需要自己实现,参考 @database, @Schema
    https://github.com/APIJSON/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/JSONObject.java

    了解了,谢谢tommy

  3. yangjinju commented on Nov 16, 2020

    @yangjinju

    以上方法可行。

    也可以自定义
    DemoSQLConfig.java.getDBUri
    目前 Demo 里是根据 getDatabase 返回的 数据库类型来区分的,
    你可以根据表名或者其它方式来区分,给 getDBUri 返回不同的 uri。
    https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/demo/DemoSQLConfig.java

    如果需要前端自定义,可以加一个字段用来区分,例如
    "@uri": "jdbc:mysql://localhost:3306"
    目前需要自己实现,参考 @database, @Schema
    https://github.com/APIJSON/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/JSONObject.java

    您好,我这边想用前端传入一个 datasourceid,然后后台根据这个参数动态的去 redis(获取其他第三方) 获取数据源的信息(账号,密码,DBuri),再跟 DB 进行连接返回。实际上就是可能有多个DB实例,想让前端根据参数来实现跟哪个DB进行交互,请问这个该怎么实现?
    前端参数可能如下:
    { "[]": { "User": { "sex": 1 } }, "datasourceid": 1 // 数据源ID,后台可以根据数据源ID动态的获取数据源的账号,密码,url }

  4. TommyLemon commented on Nov 17, 2020

    @TommyLemon
    Member

    以上方法可行。
    也可以自定义
    DemoSQLConfig.java.getDBUri
    目前 Demo 里是根据 getDatabase 返回的 数据库类型来区分的,
    你可以根据表名或者其它方式来区分,给 getDBUri 返回不同的 uri。
    https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/demo/DemoSQLConfig.java
    如果需要前端自定义,可以加一个字段用来区分,例如
    "@uri": "jdbc:mysql://localhost:3306"
    目前需要自己实现,参考 @database, @Schema
    https://github.com/APIJSON/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/JSONObject.java

    您好,我这边想用前端传入一个 datasourceid,然后后台根据这个参数动态的去 redis(获取其他第三方) 获取数据源的信息(账号,密码,DBuri),再跟 DB 进行连接返回。实际上就是可能有多个DB实例,想让前端根据参数来实现跟哪个DB进行交互,请问这个该怎么实现?
    前端参数可能如下:
    { "[]": { "User": { "sex": 1 } }, "datasourceid": 1 // 数据源ID,后台可以根据数据源ID动态的获取数据源的账号,密码,url }

    可以在 DemoObjectParser 重写 newSQLConfig ,取出 datasourceid(建议改用 @datasourceId 这样的关键词)并赋值给 SQLConfig

    https://github.com/APIJSON/APIJSON-Demo/blob/316b4411eec25a4fd1137fd69fb1de1171e75a57/APIJSON-Java-Server/APIJSONFinal/src/main/java/apijson/demo/DemoObjectParser.java

    	@Override
     	public SQLConfig newSQLConfig(RequestMethod method, String table, String alias, JSONObject request, List<Join> joinList, boolean isProcedure) throws Exception {
     	       DemoSQLConfig config = super.newSQLConfig(method, table, alias, request, joinList, isProcedure);
     	       Map<String, Object> map = getCustomMap();
     	       Integer datasourceId = map == null ? null : map.get("@datasourceId");
     	       config.setDatasourceId(datasourceId == null ? 0 : datasourceId);
     	       return config;
     	}

    然后在 DemoSQLConfig 新增一个成员变量 datasourceId,通过它来提供 dbUri, dbAccount, dbPassword, database, schema 等属性。
    https://github.com/APIJSON/APIJSON-Demo/blob/316b4411eec25a4fd1137fd69fb1de1171e75a57/APIJSON-Java-Server/APIJSONFinal/src/main/java/apijson/demo/DemoSQLConfig.java

  5. yangjinju commented on Nov 17, 2020

    @yangjinju

    以上方法可行。
    也可以自定义
    DemoSQLConfig.java.getDBUri
    目前 Demo 里是根据 getDatabase 返回的 数据库类型来区分的,
    你可以根据表名或者其它方式来区分,给 getDBUri 返回不同的 uri。
    https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/demo/DemoSQLConfig.java
    如果需要前端自定义,可以加一个字段用来区分,例如
    "@uri": "jdbc:mysql://localhost:3306"
    目前需要自己实现,参考 @database, @Schema
    https://github.com/APIJSON/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/JSONObject.java

    您好,我这边想用前端传入一个 datasourceid,然后后台根据这个参数动态的去 redis(获取其他第三方) 获取数据源的信息(账号,密码,DBuri),再跟 DB 进行连接返回。实际上就是可能有多个DB实例,想让前端根据参数来实现跟哪个DB进行交互,请问这个该怎么实现?
    前端参数可能如下:
    { "[]": { "User": { "sex": 1 } }, "datasourceid": 1 // 数据源ID,后台可以根据数据源ID动态的获取数据源的账号,密码,url }

    可以在 DemoObjectParser 重写 newSQLConfig ,取出 datasourceid(建议改用 @datasourceId 这样的关键词)并赋值给 SQLConfig

    https://github.com/APIJSON/APIJSON-Demo/blob/316b4411eec25a4fd1137fd69fb1de1171e75a57/APIJSON-Java-Server/APIJSONFinal/src/main/java/apijson/demo/DemoObjectParser.java

    	@Override
     	public SQLConfig newSQLConfig(RequestMethod method, String table, String alias, JSONObject request, List<Join> joinList, boolean isProcedure) throws Exception {
     	       DemoSQLConfig config = super.newSQLConfig(method, table, alias, request, joinList, isProcedure);
     	       Map<String, Object> map = getCustomMap();
     	       Integer datasourceId = map == null ? null : map.get("@datasourceId");
     	       config.setDatasourceId(datasourceId == null ? 0 : datasourceId);
     	       return config;
     	}

    然后在 DemoSQLConfig 新增一个成员变量 datasourceId,通过它来提供 dbUri, dbAccount, dbPassword, database, schema 等属性。
    https://github.com/APIJSON/APIJSON-Demo/blob/316b4411eec25a4fd1137fd69fb1de1171e75a57/APIJSON-Java-Server/APIJSONFinal/src/main/java/apijson/demo/DemoSQLConfig.java

    试了下使用 @datasourceId,但是在重写 newSQLConfig 方法里的 JSONObject request 参数没有把 @datasourceId 带过来,request.getIntValue("@datasourceId") 一直都是 0,这里需要把 @datasourceId 怎么处理才能接受到呢?

  6. TommyLemon commented on Nov 17, 2020

    @TommyLemon
    Member

    以上方法可行。
    也可以自定义
    DemoSQLConfig.java.getDBUri
    目前 Demo 里是根据 getDatabase 返回的 数据库类型来区分的,
    你可以根据表名或者其它方式来区分,给 getDBUri 返回不同的 uri。
    https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/demo/DemoSQLConfig.java
    如果需要前端自定义,可以加一个字段用来区分,例如
    "@uri": "jdbc:mysql://localhost:3306"
    目前需要自己实现,参考 @database, @Schema
    https://github.com/APIJSON/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/JSONObject.java

    您好,我这边想用前端传入一个 datasourceid,然后后台根据这个参数动态的去 redis(获取其他第三方) 获取数据源的信息(账号,密码,DBuri),再跟 DB 进行连接返回。实际上就是可能有多个DB实例,想让前端根据参数来实现跟哪个DB进行交互,请问这个该怎么实现?
    前端参数可能如下:
    { "[]": { "User": { "sex": 1 } }, "datasourceid": 1 // 数据源ID,后台可以根据数据源ID动态的获取数据源的账号,密码,url }

    可以在 DemoObjectParser 重写 newSQLConfig ,取出 datasourceid(建议改用 @datasourceId 这样的关键词)并赋值给 SQLConfig
    https://github.com/APIJSON/APIJSON-Demo/blob/316b4411eec25a4fd1137fd69fb1de1171e75a57/APIJSON-Java-Server/APIJSONFinal/src/main/java/apijson/demo/DemoObjectParser.java

    	@Override
    	public SQLConfig newSQLConfig(RequestMethod method, String table, String alias, JSONObject request, List<Join> joinList, boolean isProcedure) throws Exception {
    	       DemoSQLConfig config = super.newSQLConfig(method, table, alias, request, joinList, isProcedure);
    	       Map<String, Object> map = getCustomMap();
    	       Integer datasourceId = map == null ? null : map.get("@datasourceId");
    	       config.setDatasourceId(datasourceId == null ? 0 : datasourceId);
    	       return config;
    	}

    然后在 DemoSQLConfig 新增一个成员变量 datasourceId,通过它来提供 dbUri, dbAccount, dbPassword, database, schema 等属性。
    https://github.com/APIJSON/APIJSON-Demo/blob/316b4411eec25a4fd1137fd69fb1de1171e75a57/APIJSON-Java-Server/APIJSONFinal/src/main/java/apijson/demo/DemoSQLConfig.java

    试了下使用 @datasourceId,但是在重写 newSQLConfig 方法里的 JSONObject request 参数没有把 @datasourceId 带过来,request.getIntValue("@datasourceId") 一直都是 0,这里需要把 @datasourceId 怎么处理才能接受到呢?

    忘说了,这个 request 参数是对应 User 对象的,@datasourceId 应该写在对象里面

    { "[]": { "User": { "sex": 1, "@datasourceId": 1 } }

    如果要支持全局默认参数(写在最外层),参考 @database, @Schema 在 APIJSONParser 和 APIJSONObjectParser 两个地方的处理

  7. TommyLemon commented on Jun 15, 2021

    @TommyLemon
    Member

    以上方法可行。
    也可以自定义
    DemoSQLConfig.java.getDBUri
    目前 Demo 里是根据 getDatabase 返回的 数据库类型来区分的,
    你可以根据表名或者其它方式来区分,给 getDBUri 返回不同的 uri。
    https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/demo/DemoSQLConfig.java
    如果需要前端自定义,可以加一个字段用来区分,例如
    "@uri": "jdbc:mysql://localhost:3306"
    目前需要自己实现,参考 @database, @Schema
    https://github.com/APIJSON/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/JSONObject.java

    您好,我这边想用前端传入一个 datasourceid,然后后台根据这个参数动态的去 redis(获取其他第三方) 获取数据源的信息(账号,密码,DBuri),再跟 DB 进行连接返回。实际上就是可能有多个DB实例,想让前端根据参数来实现跟哪个DB进行交互,请问这个该怎么实现?
    前端参数可能如下:
    { "[]": { "User": { "sex": 1 } }, "datasourceid": 1 // 数据源ID,后台可以根据数据源ID动态的获取数据源的账号,密码,url }

    可以在 DemoObjectParser 重写 newSQLConfig ,取出 datasourceid(建议改用 @datasourceId 这样的关键词)并赋值给 SQLConfig
    https://github.com/APIJSON/APIJSON-Demo/blob/316b4411eec25a4fd1137fd69fb1de1171e75a57/APIJSON-Java-Server/APIJSONFinal/src/main/java/apijson/demo/DemoObjectParser.java

    	@Override
     	public SQLConfig newSQLConfig(RequestMethod method, String table, String alias, JSONObject request, List<Join> joinList, boolean isProcedure) throws Exception {
     	       DemoSQLConfig config = super.newSQLConfig(method, table, alias, request, joinList, isProcedure);
     	       Map<String, Object> map = getCustomMap();
     	       Integer datasourceId = map == null ? null : map.get("@datasourceId");
     	       config.setDatasourceId(datasourceId == null ? 0 : datasourceId);
     	       return config;
     	}

    然后在 DemoSQLConfig 新增一个成员变量 datasourceId,通过它来提供 dbUri, dbAccount, dbPassword, database, schema 等属性。
    https://github.com/APIJSON/APIJSON-Demo/blob/316b4411eec25a4fd1137fd69fb1de1171e75a57/APIJSON-Java-Server/APIJSONFinal/src/main/java/apijson/demo/DemoSQLConfig.java

    试了下使用 @datasourceId,但是在重写 newSQLConfig 方法里的 JSONObject request 参数没有把 @datasourceId 带过来,request.getIntValue("@datasourceId") 一直都是 0,这里需要把 @datasourceId 怎么处理才能接受到呢?

    新增数据源关键词 @Datasource,可由业务完全自定义
    https://github.com/Tencent/APIJSON/releases/tag/4.7.0

  8. TommyLemon commented on Jun 21, 2021

    @TommyLemon
    Member

    新增 连接池及多数据源 Demo(Druid + HikariCP)
    https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server

  9. zhuweijian commented on Oct 16, 2021

    @zhuweijian

    新增 连接池及多数据源 Demo(Druid + HikariCP) https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server

    请问 这个多数据源的demo怎么配置使用,有相关文档吗?我下载这个代码尝试配置了几种的可能方式都不对

  10. TommyLemon commented on Oct 16, 2021

    @TommyLemon
    Member
  11. StaveZhao commented on Nov 4, 2021

    @StaveZhao

    https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server

    按这个 Demo 来,SpringBoot yaml 配置加 APIJSON AbstractSQLEexcutor 配置 https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONBoot-MultiDataSource

    Demo里边也没有写如何切换数据源呀,这个是需要前端请求的时候传什么参数吗???

  12. TommyLemon commented on Nov 4, 2021

    @TommyLemon
    Member

    https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server

    按这个 Demo 来,SpringBoot yaml 配置加 APIJSON AbstractSQLEexcutor 配置 https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONBoot-MultiDataSource

    Demo里边也没有写如何切换数据源呀,这个是需要前端请求的时候传什么参数吗???

    前端传 @datasource
    https://github.com/Tencent/APIJSON/blob/master/Document.md#3.2

  13. StaveZhao commented on Nov 4, 2021

    @StaveZhao

    https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server

    按这个 Demo 来,SpringBoot yaml 配置加 APIJSON AbstractSQLEexcutor 配置 https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONBoot-MultiDataSource

    Demo里边也没有写如何切换数据源呀,这个是需要前端请求的时候传什么参数吗???

    前端传 @datasource https://github.com/Tencent/APIJSON/blob/master/Document.md#3.2

    谢谢

  14. snipercy commented on Jan 18, 2022

    @snipercy

    @TommyLemon hi,TommyLemon,现在数据源有支持redis吗?有的话是否有demo?没有的话,如果要实现,你觉得应该怎么实现,需要注意什么?

  15. TommyLemon commented on Jan 18, 2022

    @TommyLemon
    Member

    @TommyLemon hi,TommyLemon,现在数据源有支持redis吗?有的话是否有demo?没有的话,如果要实现,你觉得应该怎么实现,需要注意什么?

    Redis 对接缓存即可,在 DemoSQLExecutor 重写 getCache, putCache, removeCache 方法
    #90

    注意缓存过期,需要自己根据业务需要来更新缓存。

    可以在 Request 表配置增删改数据后调用自定义的 远程函数 来删改对应的缓存

  16. anacondapy6 commented on Feb 18, 2023

    @anacondapy6

    https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server

    按这个 Demo 来,SpringBoot yaml 配置加 APIJSON AbstractSQLEexcutor 配置 https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONBoot-MultiDataSource

    Demo里边也没有写如何切换数据源呀,这个是需要前端请求的时候传什么参数吗???

    前端传 @datasource https://github.com/Tencent/APIJSON/blob/master/Document.md#3.2

    多源数据库Access的配置还在默认数据库上么?

  17. anacondapy6 commented on Feb 18, 2023

    @anacondapy6

    https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server

    按这个 Demo 来,SpringBoot yaml 配置加 APIJSON AbstractSQLEexcutor 配置 https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONBoot-MultiDataSource

    SpringBoot yaml 配置加 APIJSON AbstractSQLEexcutor 配置 这个是怎么加的,没找到地方啊

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions