如何在Quartz的Job类中获取到Service?

请问如何在Quartz的Job类中获取到Service,我在Job类中获取Service都是Null。
使用网上的方法也没有效果,求助!

报错信息

java.lang.NullPointerException
    at com.wufu.util.SpringContextUtil.getBean(SpringContextUtil.java:26)
    at com.xinfu.quartz.QuartzJob.execute(QuartzJob.java:27)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)

声明定时任务

       long time = System.currentTimeMillis()+2000;
            SchedulerFactory sf = new StdSchedulerFactory();
            Scheduler sched = sf.getScheduler();
            Date runTime = DateBuilder.evenSecondDate(testTimestampToDate(time));
            JobDetail job = JobBuilder.newJob(QuartzJob.class)
                    .withIdentity("job1", "group1")
                    .usingJobData("param", 389)
                    .build();
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("trigger1", "group1")
                    .startAt(runTime)
                    .build();

Job类

public class QuartzJob extends ApplicationObjectSupport implements Job {
    @Override
    public void execute(JobExecutionContext content) throws JobExecutionException {
        try {
            RefundService rs = (RefundService)SpringContextUtil.getBean("RefundService");
                        RefundService rs2 = (RefundService)  SpringContextUtil.getBeanByClass(RefundService.class);
            System.out.println(rs.refund());
                        System.out.println(rs2.refund());
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

获取Bean工具类

@Component
public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext context;

    @Override
    @SuppressWarnings("static-access" )
    public void setApplicationContext(ApplicationContext contex) throws BeansException {
        this.context = contex;
    }
    public static Object getBean(String beanName){
        return context.getBean(beanName);
    }
    public static String getMessage(String key){
        return context.getMessage(key, null, Locale.getDefault());
    }
    public static Object getBeanByClass(Class elementType) {
        return context.getBean(elementType);
    }
}

ApplicationContext.xml

    <bean id="SpringContextUtil" class="com.XXX.util.SpringContextUtil"  lazy-init="false"></bean>

    <bean id="RefundService" class="com.XXX.serv.RefundService"  ></bean>
0

4个回答

RefundService有没有在XML中声明Bean??

0
qq_34872748
L星火燎原 回复shane_s: 你的RefundService 实现类上加上这个@Service("RefundService")
8 个月之前 回复
shane_s
shane_s 回复qq_34872748: 所有的代码都在这里了,我看了半天也没找出来问题出在哪里,您能帮我看看吗?
8 个月之前 回复
qq_34872748
L星火燎原 回复shane_s: 那就是你这写法有问题了,我们项目中都是这样的ArchivesDao dao = BeanHelper.getBean(ArchivesDao.class),类反射一下,才能使用这个类里面的内容
8 个月之前 回复
shane_s
shane_s 声明了的,依然是NullPointerException
8 个月之前 回复

改成

SpringContextUtil.getBean("refundServiceImpl");
或者
SpringContextUtil.getBean(RefundService.class);

试试呢!

还不行的话打印一下spring管理的bean信息,看看有没叫 refundService或refundServiceImpl的。

参考代码


    @Autowired
    ApplicationContext applicationContext;


        LOGGER.info("★★★★★★★★ ApplicationContext = {}", applicationContext);
        int i = 1;
        for (String beanName : applicationContext.getBeanDefinitionNames())
        {
            LOGGER.info("{}.\t{}", i, beanName);
            i++;
        } 

0
qq_16127313
爱码少年 或者你写个单元测试代码,参考 https://gitee.com/00fly/java-code-frame/tree/master/springmvc-dbutils/src/test/java/com/fly/test
8 个月之前 回复
qq_16127313
爱码少年 任意spring管理的代码里面
8 个月之前 回复
shane_s
shane_s 谢谢您的回答,通过class获取也没有生效,您说的打印bean信息这段代码要放在哪块执行呢?
8 个月之前 回复

你是不是上下文中没有加载到spring配置文件或者是配置信息,导致根本找不到上下文从而获取不到bean,还有就是把job也加入到spring容器中应该可以直接用@Autowire注入其他的bean的吧

0

首先得把你的Service让Spring容器托管,这样你在使用的时候才能够找到,托管方式太多了,只要是能让Spring识别它是Spring的一个组件就可以,比如在Service实现类上加@Service,或者@Component,或者@Bean,或者直接在xml文件中配置等等,使用的时候可以直接用@Autowired注解注入,这种方法比较方便。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java quartz job 注入 service
![这是一个servlet,获取service的bean并set进去](https://img-ask.csdn.net/upload/201601/05/1451979045_269193.png)rn![图片说明](https://img-ask.csdn.net/upload/201601/05/1451979273_154293.png)rn![报错了,求大神解答,谢谢](https://img-ask.csdn.net/upload/201601/05/1451979124_356678.png)
如何在web service中获取运行目录?
例:rn public class CHelloWorld : System.Web.Services.WebServicern rn [WebMethod]rn public string GetCurentDir()rn rn // 返回当前这个web service所在程序的目录,如何实现?rn rn rn
quartz 中job 调用service类报空指针异常
job是在quartz中实例化出来的,不受spring的管理。所以就导致注入不进去 在job中加入如下代码即可实现service类的注入: SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); ...
如何在htm页面获取到sessionID?
用js?还是htm有这种标记?
如何在服务器端获取到浏览器大小
在客户端获取:document.body.clientHeight;rn这个值怎么才能让服务器端代码获取到呢?
如何在css中获取到Action中的值
今天做了一个简单的实验,用户在输入框中输入三个0~255之间的正整数,作为RGB的值,传到Action是一个字符串。 然后用逗号将其分开,分别赋值到三个int类型的变量:R,G,B,在传到另外一个jsp页面,动态改变字体颜色。 这个是输入RGB值得jsp页面 &lt;form action="ColorChangeAction" align="center" name="colorchan...
如何在textbox中获取到listbox中移出的值
listbox显示一个菜单 用remove移出选中的项 然后添加到textbox中 rn怎样把项一个一个地添加都textbox中
解决quartz的Job类使用注解@Service为null的办法
public class QuartzJobFactory implements Job { @Autowired private RuleEventMatchMapper ruleEventMatchMapper; @Override public void execute(JobExecutionContext jobExecutionContext) thr...
Quartz Job
Quartz Job.txt
请问,如何在xamarin ios 中获取到wifi流量
请问,如何在xamarin ios 中获取到wifi流量 rnrn我知道用object-c语言可以访问 rn+ (NSArray *)getDataCountersrnrn BOOL success;rn struct ifaddrs *addrs;rn const struct ifaddrs *cursor;rn const struct if_data *networkStatisc; rn rn使用这个ifaddrs结构访问到流量,但是在咱们xamarin ios中如何获取wifi流量?rnrn
请问如何在程序运行时获取到堆栈中的信息?
最近做完了一个软件,rn在DEBUG版本中运行程序时如果出错直接点出错对话框的取消按钮就可rn进入VC的调试状态,并能看到堆栈中的信息,从而分析排错。rn可是当这个版本在没有装VC的机器上运行出错时就不知道是什么错了,rn请问各位高手,有没有办法在程序运行时获取到堆栈中的信息?rn这样就可以输出到文件中进行分析排错了。rn还有就是如果是release版本有没有办法?rnrn多谢!!!
如何在 vuex action 中获取到 vue 实例
问题:在做运营开发工具的时候 我想要请求后台服务器保存成功后 弹出一个弹框(饿了吗 的 message 弹框), 由于$message 是挂在 Vue原型链上的方法 (Vue.prototype.$message = Message;)。以下action.js 中的this不指向Vue,因此以下代码会报错。 //action.js ...
如何在asp中获取到checkbox值
rn<%if Request.QueryString("mark")="southidc" thenrnid=Trim(request("id"))rnanswer=trim(request("answer"))rnrnif request("answer")=id then rn conn.execute "Update Orders set answer=answer+1 where id="&idrn end ifrnrnresponse.redirect "order.asp"rnEnd Ifrn%>rn rn<% rnid=Request("id")rnif id="" thenrnrnset rs=server.CreateObject("adodb.recordset") rnsql="select * from Orders order by ID desc"rnrs.open sql,conn,1,1 rnif rs.eof and rs.bof then rnresponse.write " 没有该类信息!"rn%> rn rn rn "> <%=rs(Title)>rnrnrn<%rnrs.movenext rnif rs.eof then exit forrnnext rn%>rnrnrn我的目的是想在勾选前面的checkbox后,再点击提交,然后让数据库里面的值能增1,为什么就是不能实现呢,请高手们指点啊~!rn很急~!rnrn
如何在页面中获取到ModelAndView绑定的值
文章内容主要是如何在JSP中获取ModelAndView.addObject绑定的值以及如何在JS中获取ModelAndView.addObject绑定的值,有其他方式的话可以补充到评论区大家共同学习
如何在ASP.NET的页面中获取到传过来的值?
   也就是在后置的代码里可以通过Request["参数名"]来获取,可是我是想在ASPX页面上直接显示,也就是<% .... %>rnrnrn请问应该怎么设置啊?是不是<% Request["itemid"] %>啊...我试过了..不太行..
如何在一个无窗口程序中获取到系统消息?
目前的方法是:rn示例代码如下:rnrnWinMain()rnrn while (GetMessage(...))rn rn ....rn rnrnrnwhile中死也进不来rnrn请问如何建立一个无窗口的程序,我只需要接收消息(U盘的插拔会向所有程序发一个消息的,我要接收这个消息,但不想用窗口,不要说建立一个窗口然后隐藏,这样不好)
Activity 如何获取到各种服务service
1、每个activity都是ContextImpl(从源码创建一个activity的代码中可以看出) 2、每个activity可以getSystemService(String name)其实调用的是ContextImpl中的方法:getSystemService(String name) 3、ContextImpl中又调用了SystemServiceRegistry.getSystemSer
如何停止QUARTZ中的JOB
HI,Every onernrn手上有一个发送邮件的定时程序,支持实时、定时、周期三种发送方式。rnrn拿实时来说吧:程序要发送十万封邮件,如何做到这十万封邮件发送完毕之后,JOB停止,并且通知相关调用方,做其他操作?rnrn实时:接到任务后立即启动--相当于只指定了开始时间、没有指定结束时间rn定时:指定任务在特定日期特定时间启动rn周期:指定任务在特定周期特定时间启动,循环次数、循环时间间隔
获取Quartz中Job的执行状态
StdSchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); int state = scheduler.getTriggerState(triggerName, triggerGroup);state的值代表该任务触发器
得到quartz中Job的执行状态
StdSchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); int state = scheduler.getTriggerState(triggerName, triggerGroup); state的值代表该任务触
quartz开发job类@Autowired为什么不起作用?
用quartz开发调度任务很长时间了。还开发了一个调度可视化管理小平台,公司内部用的。等过段时间把平台开发细节分享一下。今天主要说说题目的事儿。开发job类时候,@Autowired注解怎么就不起作用了。解答:实际上不是不起作用了,是因为@Autowired是把属性注入到了Spring注入的job类实例中。而我们的job类中方法执行时候,quartz会重新实例化一个jobClass,这个实例和Spr
java quartz job定时器
demo中主要实现了两点问题。 1.job每天固定时间(如12点)扫描执行一次 2.job每隔一段时间(如5分钟)扫描执行一次 使用了quartz-all-1.6.3.jar log4j-1.2.13.jar jta-spec1_0_1.jar commons-digester-1.8.jar commons-collections.jar commons-beanutils-1.7.0.jar这些支持jar包。
quartz job持久化
实现把job持久化数据库,里面有具体的说明文档 Quartz 1 1 通过quartz创建持久化定时执行任务 3 1.1 首先创建一个基本的web工程,所需jar包 3 1.2 Quartz配置文件quartz.properties 4 1.3 创建job 6 1.3.1 实现org.quartz.Job接口 6 1.3.2 把以上job持久化到数据库中 6 1.4 启动job所需条件 6 1.4.1 在web.xml中加入如下监听 6
在service层,通过get方法获取到map集合中的值报错
//根据用户的id,查询上级的信息         List> list = mapper.findSuperiorById(userId);                  if (list != null && list.size() > 0) {             //获取上级的设备id             System.out.println(list);     
泛型中获取到Class
在公共基础类中:public class CommonDaoImpl<T> extends HibernateDaoSupport implements ICommonDao<T> { //泛型转换 private Class entity = (Class)GenericSuperClass.getClass(this.getClass());在公共基础类的方法中:public Li
JOB quartz执行代码
[code=&quot;java&quot;] 整个测试项目发布出来了 [/code]
Quartz无状态的JOB
package com.lz.quartz.job; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import java.time.Instant; import java.time.LocalDateTime; import ja...
java job quartz
java job quartz , 每天凌晨执行 ,但是我想每次重启的时候就执行一次。然后在按照配置来做 。。请问能做到吗?rn有会配置的吗?[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/16.gif][/img]rn 急 .... 在线等........
easyui combobox如何在获取到焦点自动展开下拉列表
![图片说明](https://img-ask.csdn.net/upload/201612/26/1482742917_752663.png)nn我想要做combobox在tab键切换到的时候能自动展开列表,。easyui里没有找到获取焦点的方法。求大神赐教呀
如何在load事件里获取到window.dialogArguments的值
父窗体传给子对话框值 在显示自对话框的时候要根据父窗体传递过来的window.dialogArguments做条件 并给相应的操作rn如何在load事件中获取到呢
如何在wince平台下获取到frame buffer的大小?
如何在wince平台下获取到frame buffer的大小?
如何在知道年和月的情况下,获取到该月的天数
如题,请高手指点!
struts2+spring 如何在容器外获取到bean
现在获取spring bean是在struts2中的action直接注入,但是如果我现在在action外面有一个类需要用到spring的bean,如何获取?
如何在spring quartz类中拿到ServletContext
我用了个监听类,实现接口ServletContextListener。rn在tomcat启动时把一些初始数据存进application里:rnrequest.getServletContext().setAttribute("item",item);rn但是这些数据会更新的,我想用spring quartz定时更新一下这些内容,rn现在不知道这个定时的类该怎么拿到 ServletContext,是不是也要实现什么接口或者继承什么类才可以呢?
Quartz Job Scheduling Framework
Quartz 在开源任务调度框架中的翘首,它提供了强大任务调度机制,难能可贵的是它同时保持了使用的简单性。Quartz 允许开发人员灵活地定义触发器的调度时间表,并可以对触发器和任务进行关联映射。
Quartz Job API
什么是作业调度,作业调度为什么说是重要的,企业应用中的作业调度,非企业应用中的作业调度,作业调度与工作流,关于作业调度其他可选择方案
怎样用quartz 调度Job
怎样用quartz 调度Job   1.所需要的第三方包: quartz-1.5.2.jarcommons-beanutils.jarcommons-digester-1.7.jarcommons-logging.jarcommons-logging-api.jarlog4j-1.2.11.jar 2.定义自己的job:   public class ScanJob implements Job ...
Quartz -Job 学习总结
Quartz是个非常好用的主流JOB框架,目前大多数银行都是在用这个框架做一些重要的定时任务处理。基本上使用的都是数据库表方式的持久化,如果需要使用数据库进行持久化,需要在配置文件中加入下面代码。 [code=&quot;java&quot;] org.quartz.jobStore.class= org.quartz.impl.jdbcjobstore.JobStoreTX [/code] 而下面的...
Quartz:向Job传递数据
JobDetail job1 = newJob(MyJob.class).withIdentity(&amp;quot;job1&amp;quot;, &amp;quot;group1&amp;quot;).build(); newJob方法其实返回一个JobBuilder实例,通过调用JobBuilder的方法配置任务属性,最后调用build方法返回构造的任务实例(任务实例实现了JobDetail)。 每个任务其实都是一个实现了JobDetail接口的实例,这个实...
quartz(Job系统)
俗称Job系统,能够很好的完成java任务的自动执行,提供了较为详细的定时方案。支持多种定时模式。
相关热词 c#异步发送kafka c#窗体编号 c# 操作二进制文件 c# 反射 机制 c#线程 窗体失去响应 c#角度转弧度 c# 解析gps数据 c# vs设置 语法版本 c# json含回车 c#多线程demo