文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Jspxcms定时任务的开发是怎样的

2023-06-26 07:13

关注

本篇文章为大家展示了Jspxcms定时任务的开发是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

系统中有定时任务功能,里面有一些系统已经定义好的任务类型。如果系统自带的任务类型里没有自己需要的,可以开发一个任务类型。

本着无侵入的二次开发设计思想,开发一个自己的任务类型也可以做到不修改系统原有代码和文件。

定时任务配置文件

Jspxcms6.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=../../ext/collect/schedule_job.do

自定义的定时任务类型的配置也可以写在其它的application.properties文件中,如/src/main/resources/conf/plugin/plug/application.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=../../ext/collect/schedule_job.do

录入界面的Controller

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

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

上述内容就是Jspxcms定时任务的开发是怎样的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯