jfinal多数据源配置后无法根据configName找到数据源

项目是之前程序员写的,我接手不久,有些东西看不太懂,麻烦各位解答一下!

项目初始配置了数据源

  1. @Override
  2. public void configPlugin(Plugins me) {
  3. // 基础核心数据库  onlyone
  4.     DruidPlugin druidPlugin = new DruidPlugin(ConfigPropKit.get("jdbc.url"),
  5. ConfigPropKit.get("jdbc.username"),
  6. ConfigPropKit.get("jdbc.password"),
  7. ConfigPropKit.get("jdbc.driverClassName"));
  8. druidPlugin.set(10, 100, 1000);
  9. druidPlugin.addFilter(new StatFilter());
  10. druidPlugin.addFilter(new WallFilter());
  11. druidPlugin.setLogAbandoned(true);
  12. druidPlugin.setRemoveAbandoned(true);
  13. druidPlugin.setValidationQuery("SELECT 1");
  14. druidPlugin.setTestOnBorrow(true);
  15. me.add(druidPlugin);
  16.  
  17. // 基础自动绑定model与表关系插件
  18. AutoTableBindPlugin autoTableBindPlugin = new AutoTableBindPlugin(druidPlugin, SimpleNameStyles.LOWER);
  19. autoTableBindPlugin.setCache(new MyCache());
  20. autoTableBindPlugin.setShowSql(ConfigPropKit.getToBool("jdbc.showsql", true));
  21. autoTableBindPlugin.setContainerFactory(new CaseInsensitiveContainerFactory());
  22. autoTableBindPlugin.setDialect(new MysqlDialect());   //使用AnsiSqlDialect
  23. autoTableBindPlugin.addJars("bmnsp-model-1.0.jar");
  24. autoTableBindPlugin.addScanPackages("org.bmnsp.model");
  25. me.add(autoTableBindPlugin);
  26. // 新增 配置文件插件
  27. me.add(new ConfigPlugin());
  28. // 缓存插件
  29. me.add(new EhCachePlugin());
  30. // 新增 quarz定时任务插件
  31. me.add(new QuartzPlugin("job.properties"));
  32. if(JFinalKit.getConstants().getDevMode()) {
  33. logger.debug("--------插件配置完毕!!!");
  34. }
  35. }

紧接着下面又第二个数据源的配置

  1. @Override
  2. public void afterJFinalStart() {
  3. // 清空缓存
  4. CacheKit.getCacheManager().clearAll();
  5. // 缓存配置
  6. config();
  7. //  配置token 集群实现
  8. TokenManager.init(new TokenCache("session", "tokenCache"));
  9. if(JFinalKit.getConstants().getDevMode()) {
  10. logger.debug("--------启动完毕!!!");
  11. }
  12. // 添加备份数据源
  13. DruidPlugin druidPlugin1 = new DruidPlugin(
  14. ConfigPropKit.get("jdbc2.url"),
  15. ConfigPropKit.get("jdbc2.username"),
  16. ConfigPropKit.get("jdbc2.password"),
  17. ConfigPropKit.get("jdbc2.driverClassName"));
  18. druidPlugin1.set(10, 100, 5000);
  19. druidPlugin1.addFilter(new StatFilter());
  20. druidPlugin1.start();
  21. DbKit.addConfig(new Config(Consts.GBSDB, druidPlugin1.getDataSource(), new MysqlDialect()));
  22. Sqlconfig.URL=ConfigPropKit.get("jdbc.url");
  23. Sqlconfig.USERNAME=ConfigPropKit.get("jdbc.username");
  24. Sqlconfig.PASSWORD=ConfigPropKit.get("jdbc.password");
  25. }

在这个里“Consts.GBSDB”已经定义在Consts类

  1. public static final String GBSDB = "gps_db";

在控制器进行以下调用时就会报错

  1. List<Record> list = Db.use(Consts.GBSDB).find("SELECT en.card_id, en.card_x, en.card_y, en.card_z, en.time FROM tb_locationdata en JOIN ( SELECT card_id, max(id) mxid FROM tb_locationdata GROUP BY card_id ORDER BY id DESC ) tmp ON en.card_id = tmp.card_id AND en.id = tmp.mxid where en.time > DATE_SUB(NOW(),INTERVAL  5 second);");

报错如下

  1. java.lang.IllegalArgumentException: Config not found by configName: gps_db
  2. at com.jfinal.plugin.activerecord.DbPro.<init>(DbPro.java:74) ~[jfinal-ry-3.0.jar:na]
  3. at com.jfinal.plugin.activerecord.DbPro.use(DbPro.java:81) ~[jfinal-ry-3.0.jar:na]
  4. at com.jfinal.plugin.activerecord.Db.use(Db.java:35) ~[jfinal-ry-3.0.jar:na]
  5. at org.bmnsp.web.job.OneMinutesJob.execute(OneMinutesJob.java:50) ~[OneMinutesJob.class:na]
  6. at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[quartz-2.2.1.jar:na]
  7. at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [quartz-2.2.1.jar:na]
  8. [message]: Job (org.bmnsp.web.job.OneMinutesJob.org.bmnsp.web.job.OneMinutesJob threw an exception.
  9. [class]: org.quartz.core.ErrorLogger
  10. [time]: 2020-09-11 18:01:40.025 DefaultQuartzScheduler_Worker-1 org.quartz.core.ErrorLogger.schedulerError ERROR 
  11.  
  12. org.quartz.SchedulerException: Job threw an unhandled exception.
  13. at org.quartz.core.JobRunShell.run(JobRunShell.java:213) ~[quartz-2.2.1.jar:na]
  14. at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [quartz-2.2.1.jar:na]
  15. Caused by: java.lang.IllegalArgumentException: Config not found by configName: gps_db
  16. at com.jfinal.plugin.activerecord.DbPro.<init>(DbPro.java:74) ~[jfinal-ry-3.0.jar:na]
  17. at com.jfinal.plugin.activerecord.DbPro.use(DbPro.java:81) ~[jfinal-ry-3.0.jar:na]
  18. at com.jfinal.plugin.activerecord.Db.use(Db.java:35) ~[jfinal-ry-3.0.jar:na]
  19. at org.bmnsp.web.job.OneMinutesJob.execute(OneMinutesJob.java:50) ~[OneMinutesJob.class:na]
  20. at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[quartz-2.2.1.jar:na]
  21. ... 1 common frames omitted


评论区

JFinal

2020-09-11 20:11

关键是 AutoTableBindPlugin 这个里头不知道干了啥,这个不是 jfinal 官方提供的,jfinal 官方早就提供了生成器,自动生成 Model、BaseModel、MappingKit 等等, AutoTableBindPlugin 完全没有必要

回到具体问题,异常关键是:Config not found by configName: gps_db

这个异常出现在你代码中的地点在:OneMinutesJob.execute(OneMinutesJob.java:50)

上面这行代码的第 50 行,使用了 Db.use("gps_db"), 而这个 gps_db 根本就不存在

那么如何让这个东东存在呢? 很简单,在 new ActiveRecordPlugin 的时候,第一个参数就是了:
ActiveRecordPlugin arp = new ActiveRecordPlugin("gps_db", 其它参数在此);

最后,一定要先稍微看下文档,节省大量时间

JFinal

2020-09-11 20:13

浏览下有关 ActiveRecordPlugin 的文档, 主要就是 new 的时候传点参,第一个参是 configName,该变量与数据源绑定对于 model 的使用,数据源是自动识别的

对于 Db.find/query 等 API 默认使用 "主数据源",使用别的数据源这样用:
Db.use(其它数据源/configName).find(...);

惺忪忪

2020-09-11 20:28

@JFinal 那我要先定义下数据源的名称后在测试调用,但是这里DbKit.addConfig(new Config(Consts.GBSDB, druidPlugin1.getDataSource(), new MysqlDialect()));我又看到您在其他地方介绍过DbKit.addConfig,但没详细说明,这个是定义什么的呢?

registernet

2020-09-13 14:39

正常情况下这个数据源的设置方法是没问题的,请确保你的afterJfinalStart里面的那些初始化代码被调用了.另外,这个备份数据源为啥不将初始化放在configPlugin里呢?看到文档没说的太明白的时候,翻翻源码,比文档靠谱.

prelove

2021-02-17 09:44

类似的问题我这边遇到过,new ActiveRecordPlugin("slave", 其它参数在此);这个是用了的普通情况确实没有问题。从库报Config not found by configName,经查,是从库负载过高导致阻塞了~~~所以可能某些情况下跟代码本身之外的环境因素也要考虑。。。

热门反馈

扫码入社