这篇文章主要介绍了jspXCMS怎么开发定时任务的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇jspXCMS怎么开发定时任务文章都会有所收获,下面我们一起来看看吧。
系统中有定时任务功能,里面有一些系统已经定义好的任务类型。如果系统自带的任务类型里没有自己需要的,可以开发一个任务类型。
本着无侵入的二次开发设计思想,开发一个自己的任务类型也可以做到不修改系统原有代码和文件。
Jspxcms8.0及以后版本:
/src/main/resources/conf/conf.properties
Jspxcms6.5-7.5版本:
/src/main/resources/conf/application.properties
Jspxcms6.0及以前的版本:
/WEB-INF/conf/application.properties
相关配置内容:
scheduleJob.100=com.jspxcms.core.quartz.InfoPublishJob scheduleJobPath.com.jspxcms.core.quartz.InfoPublishJob= scheduleJob.200=com.jspxcms.core.quartz.HtmlHomeJob scheduleJobPath.com.jspxcms.core.quartz.HtmlHomeJob= scheduleJob.300=com.jspxcms.ext.quartz.CollectJob scheduleJobPath.com.jspxcms.ext.quartz.CollectJob=/cmscp/ext/collect/schedule_job.do
自定义的定时任务类型的配置也可以写在其它的conf.properties文件中,如/src/main/resources/conf/plugin/plug/conf.properties。
scheduleJob.300:序号300决定这个类型的排序,即在选择任务类型时的前后顺序。序号不能重复。
com.jspxcms.ext.quartz.CollectJob既是定时任务实现类,又是定时任务类型名称。需要在国际化文件中定义相应的国际化名称。
国际化文件(Jspxcms6.5及以后版本):/src/main/resources/messages/ext/ext.properties
国际化文件(Jspxcms6.0及以前的版本):/WEB-INF/messages/ext/ext.properties
scheduleJob.code.com.jspxcms.ext.quartz.CollectJob=采集
需以scheduleJob.code.开头。国际化名称也可以写在其他文件中,如/src/main/resources/messages/plugin/plug/plug.properties。
com.jspxcms.ext.quartz.CollectJob是定时任务实现类。
public class CollectJob implements Job { private static final Logger logger = LoggerFactory .getLogger(CollectJob.class); public static final String COLLECT_ID = "collectId"; public void execute(JobExecutionContext context) throws JobExecutionException { try { ApplicationContext appContext = (ApplicationContext) context .getScheduler().getContext().get(Constants.APP_CONTEXT); Collector collector = appContext.getBean(Collector.class); JobDataMap map = context.getJobDetail().getJobDataMap(); Integer collectId = map.getIntegerFromString(COLLECT_ID); collector.start(collectId); System.out.println("collect ok"); logger.info("run collect job: " + collectId); } catch (SchedulerException e) { throw new JobExecutionException("Cannot get ApplicationContext", e); } } }
需要实现org.quartz.Job接口,在public void execute(JobExecutionContext context)方法中编写任务需要执行的代码。
ApplicationContext appContext = (ApplicationContext) context.getScheduler().getContext().get(Constants.APP_CONTEXT);可以获取Spring的ApplicationContext,通过ApplicationContext可以获取到Spring管理的对象,如Collector collector = appContext.getBean(Collector.class);。注意:这个类中必须使用这种方法获取Spring管理的对象,不能使用@Autowired等其他方式。
Integer collectId = map.getIntegerFromString(COLLECT_ID);可以获取额外的参数。
scheduleJobPath.com.jspxcms.core.quartz.InfoPublishJob=如定时任务无需额外参数,则等号后面留空。
定时任务有时需要传递外的参数,比如采集定时任务需要选择执行哪个采集数据源。此时需要在定时任务新增/修改界面增加相应的录入项。
scheduleJobPath.com.jspxcms.ext.quartz.CollectJob=/cmscp/ext/collect/schedule_job.do
编写一个获取录入界面的地址:/cmscp/ext/collect/schedule_job.do,这里使用相对路径,相对于定时任务新增界面的地址。
此例中,这个地址的实现类是com.jspxcms.ext.web.back.CollectController。
@Controller @RequestMapping("/ext/collect") public class CollectController { ... @RequestMapping("schedule_job.do") public String scheduleJob(HttpServletRequest request, org.springframework.ui.Model modelMap) { Integer siteId = Context.getCurrentSiteId(); List<Collect> collectList = service.findList(siteId); modelMap.addAttribute("collectList", collectList); modelMap.addAttribute("includePage", "../../ext/collect/collect_job.jsp"); return "core/schedule_job/schedule_job_form"; } ... }
modelMap.addAttribute("collectList", collectList);传递数据。
modelMap.addAttribute("includePage", "../../ext/collect/collect_job.jsp");传递录入界面。
根据Controller中传递的includePage的值,对应JSP页面为:/WEB-INF/views/ext/collect/collect_job.jsp。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="s" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="f" uri="http://www.jspxcms.com/tags/form"%> <tr> <td class="in-lab" width="15%"><s:message code="scheduleJob.collectSource"/>:</td> <td class="in-ctt" width="85%" colspan="3"> <select name="data_collectId"> <c:forEach var="collect" items="${collectList}"> <f:option value="${collect.id}" selected="${dataMap['collectId']}">${collect.name}</f:option> </c:forEach> </select> </td> </tr>
<select name="data_collectId">:此处的data_collectId对应定时任务实现类CollectJob中获取参数的方法Integer collectId = map.getIntegerFromString("collectId");
<c:forEach var="collect" items="${collectList}">:此处的${collectList}对应CollectController的modelMap.addAttribute("collectList", collectList);。
关于“jspXCMS怎么开发定时任务”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“jspXCMS怎么开发定时任务”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。