我写了一个timer的定时器,调用dao层的方法,因为注入无效,new了dao
启动tomcat的时候空指针了。这里我该怎么去做一个mvc中的定时器呢?
2 种方式 第一种 就是像你这样 自定义timer 但是这种方式 不归spring管 ,所以你需要自己获取bean 通过spring上下文对象。 new是不行的 因为你的dao是spring管理的,你new的方式创建对象 ,但是对象没有跟数据库做映射,sessionFactory也没有被spring注入,实际上你是操作不了数据库的。
第二种方式 是用spring 的定时任务,这样你的timer是被spring管理的 能够保证加载定时任务的时候 spring已经加载完毕,包括实体映射和依赖注入。
可以取看看这个 quartz
用 spring quartz ,很简单配置一下就可以了,
我现在是使用task 注解的方式做定时器了。其他的逻辑我觉得都是没问题的。
目前最困惑的是component组件怎么去调用dao才能成功调用,不会nullpoint
at com.leyou.ad.dao.base.TimerDay.doSomethingWithCron(TimerDay.java:17
你把你的 配置文件xml 截图发一下看看了
private SeatDao dao;
@Scheduled(cron = "0/5 * * ? * *")
public void doSomethingWithCron() {
List list = dao.dayCount();
Timestamp t = new Timestamp(System.currentTimeMillis());
dao.stat(list,t);
}
这个是我定时器现在的测试阶段写法,可以看出问题吗?
private SeatDao dao;
这个上面的@Autowire有吗?
问题解决。多谢各位的建议。
最后采用了spring注解的@Scheduled。相对来说配置与使用都非常方便
其实我想推荐你使用spring-task 非常简单 可以参考一下这篇文章http://blog.csdn.net/buyaoshuohua1/article/details/76184079