`

chx 学习jForum笔记十九 jForum定时作业

阅读更多

参照jforum原有的两个定时作业SummaryScheduler.java和POPJobStarter.java新建UserSyncScheduler.java

 

修改ConfigKeys.java文件,新增以下语句

    public static final String USERSYNC_IS_ENABLED = "usersync.enabled";

 

修改SystemGlobals.properties文件,新增以下语句

usersync.enabled = true

 

修改quartz-forum.properties文件,新增以下语句:

# user sync 每天12点
org.quartz.context.usersync.cron.expression = 0 0 12 * * ?

 

仿照SummaryScheduler.java新建UserSyncSCheduler.java

package net.jforum.summary;

import net.jforum.util.preferences.ConfigKeys;
import net.jforum.util.preferences.SystemGlobals;
import org.apache.log4j.Logger;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.text.ParseException;


public final class UserSyncScheduler {
    private static Scheduler scheduler;
    private static final Logger LOGGER = Logger.getLogger(UserSyncScheduler.class);
    private static boolean isStarted = false;
    private static final Object MUTEX = new Object();

    /**
     * Starts the usersync Job. Conditions to start: Is not started yet and is enabled on the file
     * SystemGlobasl.properties. The to enable it is "usersync.enabled"
     * (ConfigKeys.USERSYNC_IS_ENABLED).
     *
     * @throws org.quartz.SchedulerException
     */
    public static void startJob() throws SchedulerException {
        final boolean isEnabled = SystemGlobals.getBoolValue(ConfigKeys.USERSYNC_IS_ENABLED);
        synchronized (MUTEX) {
            if (!isStarted && isEnabled) {
                final String filename = SystemGlobals.getValue(ConfigKeys.QUARTZ_CONFIG);
                final String cronExpression = SystemGlobals.getValue("org.quartz.context.usersync.cron.expression");
                scheduler = new StdSchedulerFactory(filename).getScheduler();
                Trigger trigger = null;  //触发器
                try {
                    trigger = new CronTrigger(UserSyncJob.class.getName(), "usersyncJob", cronExpression);
                    LOGGER.info("Starting quartz usersync expression " + cronExpression);
                    scheduler.scheduleJob(new JobDetail(UserSyncJob.class.getName(), "usersyncJob", UserSyncJob.class), trigger);
                    scheduler.start();
                }
                catch (ParseException e) {
                    LOGGER.error(e.getMessage(), e);
                }
            }
            isStarted = true;
        }
    }

    /**
     * Stops the usersync Job. Conditions to stop: Is started and is enabled on the file
     * SystemGlobasl.properties. The to enable it is "usersync.enabled"
     * (ConfigKeys.USERSYNC_IS_ENABLED).
     *
     * @throws org.quartz.SchedulerException
     */
    public static void stopJob() throws SchedulerException {
        final boolean isEnabled = SystemGlobals.getBoolValue(ConfigKeys.USERSYNC_IS_ENABLED);
        synchronized (MUTEX) {
            if (isStarted && isEnabled) {
                final String filename = SystemGlobals.getValue(ConfigKeys.QUARTZ_CONFIG);
                final String cronExpression = SystemGlobals.getValue("org.quartz.context.usersync.cron.expression");
                scheduler = new StdSchedulerFactory(filename).getScheduler();
                try {
                    LOGGER.info("Stopping quartz usersync expression " + cronExpression);
                    scheduler.shutdown();
                }
                catch (SchedulerException e) {
                    LOGGER.error(e.getMessage(), e);
                }
            }
            isStarted = false;
        }
    }

    private UserSyncScheduler() {
    }
}

 仿照SummaryJob.java新建 UserSyncJob.java

package net.jforum.summary;

import net.jforum.dao.DataAccessDriver;
import net.jforum.dao.GroupDAO;
import net.jforum.entities.Group;
import org.apache.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import java.util.List;

public class UserSyncJob implements Job {
    private static final Logger LOGGER = Logger.getLogger(UserSyncJob.class);

    /**
     * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
     */
    public void execute(final JobExecutionContext context) throws JobExecutionException {
        final GroupDAO groupdao = DataAccessDriver.getInstance().newGroupDAO();
        try {
            groupdao.SynchronizationGroup(); //同步组
            final List<Group> groups = groupdao.selectAll();
            if (groups != null) {
                for (Group group : groups) { //同步组用户
                    groupdao.SynchronizationGroupUsers(group.getId());
                }
            }
        }
        catch (Exception e) {
            LOGGER.warn(e);
        }
    }
}

等着看效果了。

在ConfigLoader.java中新增

    public static void startUserSyncJob() throws SchedulerException
    {
        UserSyncScheduler.startJob();
    }
 

在JForum.java中的public void destroy()中新增

UserSyncScheduler.stopJob();

 

在JForumBaseServlet.java中的protected void startApplication()中新增

 ConfigLoader.startUserSyncJob();

 

修改quartz-forum.properties文件内容相当重要,原先使用的

org.quartz.context.usersync.cron.expression = 0 0 12 * * *

没有任何效果,改成

org.quartz.context.usersync.cron.expression = 0 0 12 * * ?

后,就成功了.

分享到:
评论

相关推荐

    chx 学习jForum笔记十八 jForum与ms sqlserver

    《jForum与MS SQLServer整合学习笔记》 jForum是一款基于Java的开源论坛系统,它以其高度可定制性、灵活性和强大的功能深受开发者喜爱。在本文中,我们将深入探讨如何将jForum与Microsoft SQL Server(简称MS SQL...

    chx99个人主页源码_chx99.zip

    【标题】"chx99个人主页源码_chx99.zip" 提供的是一个名为 chx99 的个人主页的源代码。源码通常包含了网站设计、布局、功能实现等核心部分,对于开发者而言是了解网站工作原理、学习前端技术或者进行二次开发的重要...

    CHX TNF JNK之间的关系

    标题与描述中的关键词“CHX TNF JNK”揭示了在细胞凋亡机制中的相互作用,尤其是关于人类肝癌细胞对肿瘤坏死因子α(TNFα)诱导的凋亡反应。这一研究聚焦于理解CHX(环己亚胺)、TNFα以及JNK(c-Jun N端激酶)三者...

    chx2095中文 英文资料

    根据给定的文件信息,我们可以提炼出以下关于CHX2095的详细IT知识: ### CHX2095概述 **CHX2095**是一款由United Monolithic Semiconductors S.A.S.制造的频率倍增器集成电路(IC),其工作频率范围在7.5至30GHz...

    CHX-I防火墙官方教程-附带翻译终稿.pdf

    CHX-I防火墙官方教程-附带翻译终稿.pdf

    CHX

    此外,对于初学者来说,阅读和理解CHX的源代码也是一个很好的学习C语言和理解十六进制编辑器工作原理的机会。 总的来说,CHX 是一款实用的终端工具,它的轻量级设计和高度可定制性使其成为开发人员和系统管理员的...

    [CMS程序]chx99个人主页源码_chx99(ASP.NET源码).rar

    总之,通过对【CMS程序]chx99个人主页源码_chx99(ASP.NET源码)的深入研究,我们可以学习到ASP.NET Web Forms的开发技术,数据绑定,用户认证,配置管理,以及前端交互等多个方面,这将对提升我们的ASP.NET开发技能...

    HA-SoftEther-CHX虚拟专网

    HA-SoftEther-CHX虚拟专网HA-SoftEther-CHX虚拟专网HA-SoftEther-CHX虚拟专网HA-SoftEther-CHX虚拟专网

    CHX612.zip

    这篇文章将详细讲解与"CHX612.zip"压缩包相关的知识点,主要涉及HX612触摸IC、STC15W408AS微控制器以及相关编程与接口技术。 首先,我们关注的是HX612,这是一款触摸传感器集成电路。不同于常见的I2C接口,HX612...

    chx99个人主页源码

    【标题】"chx99个人主页源码"是一个针对个人使用的网站源代码,它提供了构建个人在线展示空间的基础框架。个人主页源码通常包含了HTML、CSS、JavaScript等前端技术,有时也会涉及到PHP、Node.js等后端语言,用于实现...

    CHX-3大手臂大法兰.SLDDRW

    CHX-3大手臂大法兰.SLDDRW

    Chx.rar_最优化_最优化方法_梯度优化_梯度法

    在给定的“Chx.rar”压缩包中,包含的主题是“最优化方法”和“梯度优化”,特别是“梯度法”。这表明压缩包里的资源可能涉及如何使用梯度信息来优化复杂问题的解决方案。 首先,我们要理解“最优化”是什么。最...

    [CMS程序]chx99个人主页源码_chx99.zip源码ASP.NET网站源码打包下载

    [CMS程序]chx99个人主页源码_chx99.zip源码ASP.NET网站源码打包下载[CMS程序]chx99个人主页源码_chx99.zip源码ASP.NET网站源码打包下载[CMS程序]chx99个人主页源码_chx99.zip源码ASP.NET网站源码打包下载[CMS程序]...

    \HA-SoftEther-CHX虚拟网卡及教程

    本软件是一个模似网卡和集线器的工具,可以模似集线器功能,实现VPN的功能。使得系统把此软件识别成一块网卡,有了这个东西,只要可以访问外网,都可以连接到虚拟HUB上与其他电脑组成局域网,在此虚拟的局域...

    ASP.NET源码——[CMS程序]chx99个人主页源码.zip

    总的来说,"ASP.NET源码——[CMS程序]chx99个人主页源码.zip"是一个宝贵的学习资源,不仅展示了ASP.NET在实际项目中的应用,也提供了实践和理解Web开发最佳实践的机会。无论是初学者还是经验丰富的开发者,都能从中...

    程序源码 chx99个人主页源码_chx99(ASP.NET源码).rar

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...

    CHX-I防火墙官方教程-附带翻译借鉴.pdf

    CHX-I防火墙官方教程-附带翻译借鉴.pdf

    北大计算机系高级计算机系统结构课件chx14-arch03-ilp1

    北京大学的高级计算机系统结构课程深入探讨了指令级并行处理,特别是数据相关的概念,这是优化处理器性能的关键。在本课件中,主要讨论了三种数据相关类型:真数据相关(Data dependences)、名字相关(Name ...

    ASP.NET-[CMS程序]chx99个人主页源码.zip

    通过研究这个源码,学习者不仅可以了解ASP.NET的基本概念和编程技巧,还可以深入理解CMS系统的架构和工作原理,对提升Web开发技能大有裨益。同时,如果你是个人站长,这个源码可以作为搭建自己个性化主页的起点,...

Global site tag (gtag.js) - Google Analytics