NutzCN Logo
问答 求助,用nutz做定时任务,报异常
发布于 2454天前 作者 qq_34441c67 1605 次浏览 复制 上一个帖子 下一个帖子
标签:

严重: Exception starting filter nutz
org.nutz.mvc.LoadingException: java.lang.RuntimeException: java.lang.ClassNotFoundException: quartz
at org.nutz.mvc.LoadingException$FC$9a86caf9ff5d3b587784fcdf555a4a7d.invoke(LoadingException.java)
at org.nutz.lang.born.AbstractConstructorBorning.call(AbstractConstructorBorning.java:25)
at org.nutz.lang.born.ConstructorBorning.born(ConstructorBorning.java:19)
at org.nutz.lang.born.BornContext.doBorn(BornContext.java:60)
at org.nutz.lang.Mirror.born(Mirror.java:990)
at org.nutz.lang.Lang.wrapThrow(Lang.java:200)
at org.nutz.mvc.impl.NutLoading.load(NutLoading.java:135)
at org.nutz.mvc.ActionHandler.(ActionHandler.java:19)
at org.nutz.mvc.NutFilter._init(NutFilter.java:91)
at org.nutz.mvc.NutFilter.init(NutFilter.java:69)
at cm.core.mvc.MyNutFilter.init(MyNutFilter.java:21)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
at org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:105)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4809)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5485)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: quartz
at org.nutz.lang.Lang.wrapThrow(Lang.java:184)
at org.nutz.mvc.ioc.provider.ComboIocProvider.create(ComboIocProvider.java:23)
at org.nutz.mvc.impl.NutLoading.createIoc(NutLoading.java:381)
at org.nutz.mvc.impl.NutLoading.load(NutLoading.java:103)
... 16 more
Caused by: java.lang.ClassNotFoundException: quartz
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.nutz.lang.Lang.loadClass(Lang.java:2027)
at org.nutz.ioc.loader.combo.ComboIocLoader.createIocLoader(ComboIocLoader.java:116)
at org.nutz.ioc.loader.combo.ComboIocLoader.(ComboIocLoader.java:92)
at org.nutz.mvc.ioc.provider.ComboIocProvider.create(ComboIocProvider.java:20)
... 18 more

这是具体配置:
import org.nutz.mvc.filter.CheckSession;
import org.nutz.mvc.ioc.provider.ComboIocProvider;
//@Localization(value="msg/", defaultLocalizationKey="zh-CN")//国际化,暂时用不了
@Filters(@By(type=CheckSession.class, args={"user", "/toLogin"}))
@Ok("json:full")
@Fail("jsp:jsp.500")
@SetupBy(value=MainSetup.class)
//请注意星号!!不要拷贝少了
@IocBy(type=ComboIocProvider.class, args={"*js", "ioc/",
"*anno", "cm",
"*tx", // 事务拦截 aop
"*async",// 异步执行aop
"*quartz"// 添加quartz插件引用
})
@Modules(scanPackage=true)
@ChainBy(args="mvc/nutz-mvc-chain.js")
@AdaptBy(type=JsonAdaptor.class)
public class MainModule {}

9 回复

nutz的版本比较老吧? 改成

"*org.nutz.integration.quartz.QuartzIocLoader",

想问问在哪里配呢?之前的配置都是在网上copy的,

*quartz

改成我写的

恩,知道了,非常感谢!

@wendal 还有个问题想请教您一下,我之前也发过帖问过这个问题,就是在执行具体的任务类中,一直无法获取到dao这个类,
今天我这样测试还是不行,不知道是不是我的代码写得有问题?

@IocBean
public class DocumentTask extends BaseModule  implements Job{
	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		 OrganizationModule organizationModule = new OrganizationModule();
		 System.out.println(organizationModule.queryOrganizations());
	}
}

测试结果,在调用这个organizationModule.queryOrganizations()方法时,super.dao还是报空指针,就是获取不到dao这个类,在页面中调用这个方法是没问题的,定时器实在MainSetup.java中启动的。由于我需要做定时发送公文,而且还要求动态添加定任务,所以不管采取什么方式,必须去数据库中查询数据

贴MainSetup的代码看看

这是之前的一个同事写的,他用nutz用了很久了,已经做了一个项目了,

package cm;

import org.nutz.dao.Dao;
import org.nutz.ioc.Ioc;
import org.nutz.mvc.NutConfig;
import org.nutz.mvc.Setup;

import cm.core.util.quartz.QuartzManager;

public class MainSetup implements Setup {

    public void init(NutConfig conf) {
        Ioc ioc = conf.getIoc();
        Dao dao = ioc.get(Dao.class);
        try {
        	QuartzManager.run();
        } catch (Exception e) {
        	// TODO Auto-generated catch block
        	e.printStackTrace();
        }
// 		拿到Dao,自然就可以自动建表了
//        Daos.createTablesInPackage(dao, "sheldon", false);//不覆盖则设置为false
//        // 表结构变化了? migration一下
//        Daos.migration(dao, "sheldon", true, true);
//        // 初始化默认根用户
//        if (dao.count(Question.class) == 0) {
        
//        }
        																																															

//        Research r=new Research();
//        r.setCreateStaff("admin");
//        r.setCreateTime(Calendar.getInstance().getTime());
//        r.setResearchName("2016教育管理信息化发展状况调研问卷");
//        dao.insert(r);
//        	Question q=new Question();
//        	q.setQuestionType("3");//单选,多选,自由填空
//        	q.setRelationId("7iogt0p2u0h75qbh5818tfm02b");
//        	q.setQuestionDesc("现有服务器__台,计算机__台");
//        	q.setOrderFlag(5);
//        	q.setFreeBlank("1,2");
//        	q.setQuestionState("A");
//        	q = dao.insert(q);
//        	
//        	String questionId = q.getQuestionId();
        	
//        	Option o=new Option();
//        	
//        	o.setOptionDesc("是");
//        	o.setOrderFlag("A");
//        	o.setRelationQuestion(questionId);
//        	dao.insert(o);
//        	o.setOptionDesc("否");
//        	o.setOrderFlag("B");
//        	o.setRelationQuestion(questionId);
//        	dao.insert(o);
        	
//        	o.setOptionDesc("无");
//        	o.setOrderFlag("A");
//        	o.setRelationQuestion(questionId);
//        	dao.insert(o);
//        	o.setOptionDesc("学校自主建设");
//        	o.setOrderFlag("B");
//        	o.setRelationQuestion(questionId);
//        	dao.insert(o);
//        	o.setOptionDesc("区域统一采购");
//        	o.setOrderFlag("C");
//        	o.setRelationQuestion(questionId);
//        	dao.insert(o);
//        	o.setOptionDesc("自主+统一混合模式");
//        	o.setOrderFlag("D");
//        	o.setRelationQuestion(questionId);
//        	dao.insert(o);
//        	o.setOptionDesc("其它");
//        	o.setOrderFlag("E");
//        	o.setRelationQuestion(questionId);
//        	dao.insert(o);
//        	o.setOptionDesc("其它");
//        	o.setOrderFlag("F");
//        	o.setRelationQuestion(questionId);
//        	dao.insert(o);
        	
    }

    public void destroy(NutConfig conf) {
//    	  Ioc ioc = conf.getIoc(); // 可以拿到Ioc容器
//        Dao dao = ioc.get(Dao.class);
//        
//        dao.insert(new SysLog("admin", "system shutdown")); // 添加系统日志,记录一下
//        ioc.get(IndexService.class).flush(); // 刷索引
    }

}
QuartzManager.run();

看上去这个类没有用到ioc,所以你得换个方式获取dao实例了

http://nutzam.com/core/ioc/ioc_by_hand.html

用上述文档的方式,直接从ioc容器取需要的对象,不必理会quartz插件了.

太感谢了,终于取到了,是用你发的这个链接里面的这种方式取到的;
// 独立线程, 例如计划任务,定时任务的线程.
Ioc ioc = Mvcs.ctx().getDefaultIoc();
真的太感谢了!

添加回复
请先登陆
回到顶部