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 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 * * ?

后,就成功了.

你可能感兴趣的:(jForum)