Quartz的一个Job中如何拿到HttpRequest对象

bdceo 2009-11-06 10:23:20
现在有一个问题,如题,可能我目前对Quartz的相关api还不是很了解
现在是这样一个需求:我有一个Job,Job中需要有HttpRequest对象然后调用Service层的相关方法

我现在是单独的一个类只是实现了Job接口,没有继承别的类,这样做感觉很是局限,始终无法拿到web的request对象

不知道这样设计类是不是不太合理呢?要想能在这个Job中拿到一个HttpRequest对象,不知大家有什么好的实现???

等待解决方案...
...全文
1453 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuhai55 2012-07-17
  • 打赏
  • 举报
回复
同样的问题求高手解决,用quartz做的定时器,让其按照规定的时间运行,从数据库中取出需要的数据,例如最新的一条更新时间,表中的记录数等等,然后把取出来的数据存入临时表中,需要这些数据的时候直接从临时表中取出,现在主要问题是,取出来的数据,无法用request存起来,我已使用监听器在web中配置。
profit_2009 2010-01-23
  • 打赏
  • 举报
回复
没有一个合理的答案
villagehead 2009-11-06
  • 打赏
  • 举报
回复
分层不干净导致的遗留问题,惨啊!

要不你试试easymock这样的东西弄个假的?
或者自己写一个?

构架师应该检讨一下之前的内容...

good luck
bdceo 2009-11-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 youjianbo_han_87 的回复:]
你要 request干嘛??? service 层 rquest有什么用? 充其量传点参数? 配置文件不是给你传参数的吗。
[/Quote]

你说的很多,可以在配置文件里获得参数,但是那是静态的
我现在是需要在job里获得数据库的值,一个list,然后遍历list循环调用service,
并且我的service里需要request,继而还要拿到session,
因为这个service是原来供action调用的,所以现在可能这样用不是太舒服
我看实在不行,就得把service重构了。。。
是这样,大家有知道如何在Job中获取HttpRequest的,给我留个言,先谢谢啦。
bdceo 2009-11-06
  • 打赏
  • 举报
回复
不知道在Quartz的api中是否可以在一个job中拿到HttpRequest???
主要是因为我的service这个方法里需要从request中得到一些属性参数...
大家帮忙想想该怎么设计这个Job....
youjianbo_han_87 2009-11-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bdceo 的回复:]
我的意思是,我定义的这个Job里会调用service层,
然后我的这个service原来都是Struts的action调用的,所以会传递request到service,
现在不用action了,我想在job里获得request传这个service
???不知说的明白否?
我现在的设计是这个XXXJob只实现了Job接口,没有别的,所以没法儿拿到request对象

[/Quote]

你要 request干嘛??? service 层 rquest有什么用? 充其量传点参数? 配置文件不是给你传参数的吗。

bdceo 2009-11-06
  • 打赏
  • 举报
回复
我的意思是,我定义的这个Job里会调用service层,
然后我的这个service原来都是Struts的action调用的,所以会传递request到service,
现在不用action了,我想在job里获得request传这个service
???不知说的明白否?
我现在的设计是这个XXXJob只实现了Job接口,没有别的,所以没法儿拿到request对象
youjianbo_han_87 2009-11-06
  • 打赏
  • 举报
回复
CheckCgScheduleFlag 只是一个普通的配置类,就是设置那个排程是否需要启动的文件,这样就不需要改源码里面的排程配置就可以决定,哪个job需要运行。
youjianbo_han_87 2009-11-06
  • 打赏
  • 举报
回复
排程不是你那样做的吧。可以在job中调用service层方法,不需要httpRequest就可以调用service啊。

排程里面设置的参数只要设置1个:那就是 URL路径。(如果你用struts的话,那就是 类似:http://localhost:8081/pki/EaiXclssAction.do?method=processXclss),然后在这个action方法里面调用service层方法。

1. 配置排程 job(quartz)

<!--排程启动类-->
<bean id="scheduleXCLSSInvoicePrint" class="com.erp.quartz.ScheduleStart"></bean>

<bean id="methodInvokingJobDetailXCLSSInvoicePrint" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject"><ref bean="scheduleXCLSSInvoicePrint"/></property>
<property name="targetMethod"><!--指定排程类中要启动的方法-->
<value>startScheduleXCLSSForInvoicePrintFromWeb</value></property>
<property name="arguments">
<list>
<value>http://localhost:8081/pki/EaiXclssAction.do?method=processXclss</value>
<!--这个参数不是必须的-->
<value>XCLSSFile</value>
</list>
</property>
<property name="concurrent"><value>false</value></property>
</bean>
<bean id="scheduleXCLSSInvoiceTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref local="methodInvokingJobDetailXCLSSInvoicePrint"/>
</property>
<property name="cronExpression">
<!-- 秒 分 时 日期 月份 星期 (每十分钟启动一次)-->
<!----> <value>0 1/0 * * * ?</value>
</property>
</bean>



2. ScheduleStart 类里面需要定义上面指定的排程方法(有多少个排程,指定多少个方法)


public void startScheduleXCLSSForInvoicePrintFromWeb(String url,String functionName) {
try {
String flag = "false";
CheckCgScheduleFlag scheduleFlag = new CheckCgScheduleFlag();
flag = scheduleFlag.startScheduleFlag(functionName);
URL o_url = new URL(url + "&flag=" + flag);
InputStream in = o_url.openStream();
in.close();

}
catch(Exception ex) {
log.error("startScheduleXCLSSForInvoicePrintFromWeb");
log.error(ex.getMessage());
ex.printStackTrace();
}
}




guodong66 2009-11-06
  • 打赏
  • 举报
回复
Quartz 没用过, up.
villagehead 2009-11-06
  • 打赏
  • 举报
回复
HttpRequest对象只会在客户端有请求的时候才会从servlet容器中生成,
所以,
如果lz的需求是定时处理一个请求,还是让客户端定时自动提交(用setTime之类的方法)来实现吧

如果是服务器端定时处理一些数据,也不需要HttpRequest的参与,
直接调用service层相关方法就可以了。

PS:之前在spring里面用过,好像是定义了一个job的东西,
然后把service注入到这个job里,再在spring的配置文件里面定义trigger就行了,
其他的环境里没用过。

PPS:手头没有代码,sorry

good luck

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧