Java 在simple webapp中使用quartz schedular调度作业

Java 在simple webapp中使用quartz schedular调度作业,java,web-applications,quartz-scheduler,Java,Web Applications,Quartz Scheduler,我有一个要求,我需要在每10分钟安排一个作业,这个作业在简单的web应用程序中运行,我们不能使用Spring。我浏览了一些教程,但不明白我需要做什么,你能告诉我需要遵循的步骤吗 我有一些具体的疑问: 我需要石英玻璃吗? 我需要quartz.xml吗?我不能使用一些类/servlet来做同样的事情吗? 调度程序将如何初始化,谁将触发作业? 我有一个独立的程序来执行这个作业,我可以在任何servlet的init中编写它,并在容器1的开头启动这个servlet。这样做对吗 如果quartz找不到qua

我有一个要求,我需要在每10分钟安排一个作业,这个作业在简单的web应用程序中运行,我们不能使用Spring。我浏览了一些教程,但不明白我需要做什么,你能告诉我需要遵循的步骤吗

我有一些具体的疑问:

我需要石英玻璃吗? 我需要quartz.xml吗?我不能使用一些类/servlet来做同样的事情吗? 调度程序将如何初始化,谁将触发作业? 我有一个独立的程序来执行这个作业,我可以在任何servlet的init中编写它,并在容器1的开头启动这个servlet。这样做对吗

如果quartz找不到quartz.properties文件,它将使用默认值。显然,如果要指定默认值以外的值,则确实需要它。 您不需要quartz.xml,您可以通过下面描述的代码解决方案来配置作业 以下是每10分钟重复一次作业的代码示例: 由于您不希望使用xml,而是希望使用java代码,因此可以从ServletContext获取StdSchedulerFactory实例来配置调度程序,并且为了在初始化时调用该代码,必须将其放入侦听器中:

public class HelloQuartzListener implements ServletContextListener {

    private Scheduler scheduler;

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {

    }

    @Override
    public void contextInitialized(ServletContextEvent ctx) {
        // define the job and tie it to our HelloJob class
        JobDetail job = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob", "group1").build();

        // Trigger the job to run now, and then every 10 minutes
        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("myTrigger", "group1")
                .startNow()
                .withSchedule(
                        SimpleScheduleBuilder.simpleSchedule()
                                .withIntervalInMinutes(10).repeatForever())
                .build();
        // Tell quartz to schedule the job using our trigger

        try {
            scheduler = ((StdSchedulerFactory) ctx.getServletContext()
                    .getAttribute(
                            QuartzInitializerListener.QUARTZ_FACTORY_KEY))
                    .getScheduler();
            scheduler.scheduleJob(job, trigger);
        } catch (SchedulerException e) {

        }
    }
}
为了从web应用程序初始化quartz,您需要通过向web.xml添加以下内容来配置QuartzInitializerListener。请注意,最后我们还添加了我们之前创建的侦听器,该侦听器通过java代码配置作业。重要的是,它必须在QuartzInitializerListener之后,因为需要首先调用QuartzInitializerListener,以便它将StdSchedulerFactory放在上下文中,以便HelloJobleStener获得它:

<context-param>
    <param-name>quartz:shutdown-on-unload</param-name>
    <param-value>true</param-value>
</context-param>
<context-param>
    <param-name>quartz:wait-on-shutdown</param-name>
    <param-value>true</param-value>
</context-param>
<context-param>
    <param-name>quartz:start-on-load</param-name>
    <param-value>true</param-value>
</context-param>

<listener>
    <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
</listener>

<listener>
    <listener-class>yourpackage.HelloQuartzListener</listener-class>
</listener>
其中quartz.xml将包含作业详细信息。当然,在这种情况下,请删除HelloJDListener配置和类:

<job-scheduling-data
    xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData 
    http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
    version="1.8">

    <schedule>
        <job>
            <name>HelloJob</name>
            <group>group1</group>
            <description>hello</description>
            <job-class>yourpackage.HelloJob</job-class>
        </job>

        <trigger>
            <cron>
                <name>myTrigger</name>
                <job-name>HelloJob</job-name>
                <job-group>group1</job-group>
                <!-- It will run every 10 minutes -->
                <cron-expression>0 0/10 * * * ?</cron-expression>
            </cron>
        </trigger>
    </schedule>
</job-scheduling-data>

在实现这些逻辑后遇到tomcat服务器问题。
 <context-param>
        <param-name>quartz:config-file</param-name>
        <param-value>/WEB-INF/quartz.properties</param-value>
    </context-param>
 org.quartz.plugin.jobInitializer.class =org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin 
org.quartz.plugin.jobInitializer.fileNames = quartz.xml 
<job-scheduling-data
    xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData 
    http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
    version="1.8">

    <schedule>
        <job>
            <name>HelloJob</name>
            <group>group1</group>
            <description>hello</description>
            <job-class>yourpackage.HelloJob</job-class>
        </job>

        <trigger>
            <cron>
                <name>myTrigger</name>
                <job-name>HelloJob</job-name>
                <job-group>group1</job-group>
                <!-- It will run every 10 minutes -->
                <cron-expression>0 0/10 * * * ?</cron-expression>
            </cron>
        </trigger>
    </schedule>
</job-scheduling-data>