千家信息网

jspXCMS怎么开发定时任务

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,这篇文章主要介绍了jspXCMS怎么开发定时任务的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇jspXCMS怎么开发定时任务文章都会有所收获,下面我们一起来看看吧。系统中
千家信息网最后更新 2025年01月17日jspXCMS怎么开发定时任务

这篇文章主要介绍了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.InfoPublishJobscheduleJobPath.com.jspxcms.core.quartz.InfoPublishJob=scheduleJob.200=com.jspxcms.core.quartz.HtmlHomeJobscheduleJobPath.com.jspxcms.core.quartz.HtmlHomeJob=scheduleJob.300=com.jspxcms.ext.quartz.CollectJobscheduleJobPath.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

录入界面的Controller

编写一个获取录入界面的地址:/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 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");传递录入界面。

录入界面的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"%>      :