首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java定时任务TimerTask有关问题()

2011-12-28 
java定时任务TimerTask问题(在线等)我用TimerTask做个定时任务,但我用的是SSH框架,也就是里面的一些属性是

java定时任务TimerTask问题(在线等)
我用TimerTask做个定时任务,但我用的是SSH框架,也就是里面的一些属性是注入的,但这里我就无法解决
先发下我原代码

Java code
package com.common;import java.util.Timer;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class MyListener implements ServletContextListener {    private Timer timer = null;  public void contextInitialized(ServletContextEvent event) {    timer = new Timer(true);    //设置任务计划,启动和间隔时间    //86400000为1天毫秒数    timer.schedule(new MyTask(), 0, 5000);  }  public void contextDestroyed(ServletContextEvent event) {    timer.cancel();  }  }package com.common;import java.util.Date;import java.util.TimerTask;import com.user.dao.MaxLshDao;import com.user.service.MaxLshService;public class MyTask extends TimerTask {    private MaxLshService maxLshService;    public MaxLshService getMaxLshService() {        return maxLshService;    }    public void setMaxLshService(MaxLshService maxLshService) {        this.maxLshService = maxLshService;    }    public void run() {         System.out.println("call at " + (new Date()));         /*ShopInUserDao SIUService=new ShopInUserDao();         SIUService.findEndRentDate();*/      }  }


再发下web.xml

<listener>
<listener-class>com.common.MyListener</listener-class>
</listener>
 

现在的问题就是TimerTask 里的maxLshService一直都是空的,无法注入

<bean id="myTask" class="com.common.MyTask">
<property name="maxLshService">
<ref bean="maxLshService" />
</property>
</bean>



[解决办法]
<ref bean="maxLshService" />
这个怎么配的?其他的我看了都没有任何问题

自己在看一下,代码没什么问题的。配置问题

祝楼主好运
[解决办法]
不懂spring的说,帮顶。
[解决办法]
<bean id="myTask" class="com.common.MyTask" autowire="byName> 

我记的好象是这样。
[解决办法]


timer.schedule(WebApplicationContextUtils.getWebApplicationContext(ServletContext).getBean("myTask"), 0, 5000);
[解决办法]
定时任务Spring的Quartz挺好用的。
[解决办法]
web.xml 的加载顺序是:ServletContext -> context-param -> listener -> filter -> servlet ,而同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺序进行调用的。

如果容器创建MyListener实例的时候,spring容器先加载初始化了,注入是没问题的。
[解决办法]
前不久我也做了个定时任务短信提醒的功能。我把我的那部分贴上来你看看吧,或许有点帮助。

Java code
//spring配置文件里的内容    <!--任务到期短信提示-->    <bean id="testService"  class="com.fbty.wms.utils.TestService">        <property name="messageService" ref="messageService" />        <property name="wmsJdbcDao" ref="wmsJdbcDao" />    </bean>    <!--注入-->        <bean id="testJob"        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">        <property name="targetObject" ref="testService" />        <property name="targetMethod" value="doCheck"></property>    </bean><!-- 触发器 -->    <bean id="testThread"        class="org.springframework.scheduling.quartz.CronTriggerBean">        <property name="jobDetail" ref="testJob" />        <property name="cronExpression" value="0 0 0 * * ? " />    </bean><!-- 定时器工厂     --><bean        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">        <property name="triggers">            <list>                <ref bean="testThread"></ref>            </list>        </property>    </bean>//这个就是TestService里的doCheck方法    /**     * Description: 到期警示告警短信自动扫描<br>     * @throws ServiceException      * @throws RemoteException      * @throws MalformedURLException      */    public void doCheck() throws MalformedURLException, RemoteException, ServiceException {        System.out.println("开始计时,每隔一分钟提示一次……");               //里面内容就省略了,整个流程重点是配置文件。仅做参考。。    } 


[解决办法]
楼主的方法只能计时一次,所以每次都要重新启动
public void run() {
System.out.println("call at " + (new Date()));
timer.schedule(new MyTask(), 0, 5000);
}
[解决办法]
我是不理解上面的一些回答。
ServletContextListener 实例是不是spring创建的?应该是web服务器或应用服务器初始化创建的。

7楼的方法测试了没有啊。
[解决办法]
完蛋了 暑假实习刚接触过
现在又忘了 
帮顶 ...
[解决办法]
看下你的 Spring容器注入的 时期是不是比 MyListener早 看看 web.xml配置吧

把MyListener 放在Spring 的监听器之后
[解决办法]
7楼正解。 你自己new的task和spring框架有毛关系。
[解决办法]
学习学习 :mark ……

热点排行