在插件中使用Db 为空 null异常问题

使用 quartz 插件。实现job接口实现类中,注入的service  有使用Db.find 等的方法,Db 对象为空。

(通过controller来访问注入后调用该类中service的方法,没有问题。)

大概可能是什么原因导致?

(quartz 会创建新的线程来执行实现类,和此有关吗?)

评论区

Terely

2019-10-09 22:22

是不是和反射动态创建的实现类有关

要输就输给追求

2019-10-09 22:31

你的service是用注解注入的吧。注解注入不进去的

JFinal

2019-10-10 15:03

null 问题用单步调试定位即可,这个没有多少回答的空间

Terely

2019-10-15 11:19

@JFinal https://www.oschina.net/question/374_123098?sort=time 是这个同样的问题。没找到解决方案。

Terely

2019-10-15 15:11

@JFinal 经过实验得到如下结论:
quartz.properties 中 配置jobStore存储方式一般有两种配置方式;
第一种:org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX 。 通常是存储到数据库中(还需要配置,数据库链接,驱动等或者使用自定义的provider来支持)。
这种情况下,在service中 无法使用DB. DbKit, 他们都是空。JFnal.me也是原始未初始化状态。原因不明。
第二种: org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore 。 在内存中存储。
使用该方式,那么在注入的service中的 Db 等均可以正常使用。(其他地方均无任何变动)
由于对于 quartz 了解不是特别深入,出现该问题的原因不明确。不知道@JFinal 是否了解?

JFinal

2019-10-15 16:09

@Terely jfinal 官方从未提供过 quartz 这个功能, jfinal 官方提供的是 cron4j 插件:
https://www.jfinal.com/doc/9-1