`
sunxboy
  • 浏览: 2871215 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring4 quartz job xml configuration

 
阅读更多

 

 1. 定义job details

public class NotifyJobProcessor extends JobProcessor {
    private static final Log LOG = LogFactory.getLog(NotifyJobProcessor.class);

    public NotifyJobProcessor() {
    }

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        String jobName = UploadType.NOTIFY.name();
        LOG.debug("%s Job is running ......", jobName);

        Channel channel = getChannelFromContext(context);

        try {
            if (channel != null && channel.isWritable()) {
                UploadHeartbeat heartbeat = new UploadHeartbeat(UploadType.NOTIFY);
                UploadFunction notifyFunction = new UploadFunction(heartbeat);
                UploadFrame frame = new UploadFrame(notifyFunction);
                channel.writeAndFlush(frame);
                return;
            }
        }
        catch (Exception e) {
            LOG.error("Send %s Message failed !!!", jobName);
            e.printStackTrace();
        }

        LOG.info("Channel is not active or null for %s Job, not need run it any more.", jobName);
        // channel is not active, then disable trigger
        disableTrigger(jobName);
    }

}

 jobprocessor定义:

public abstract class JobProcessor implements Job {
    private static final Log LOG = LogFactory.getLog(JobProcessor.class);

    protected Channel getChannelFromContext(JobExecutionContext context) {
        Channel channel = null;
        try {
            Scheduler schedule = context.getScheduler();
            SchedulerContext scheduleContext = schedule.getContext();
            channel = (Channel) scheduleContext.get("channel");
        }
        catch (SchedulerException e) {
            LOG.error("get Channel in Job Execution Context failed !!!", e);
            e.printStackTrace();
        }
        return channel;
    }

    protected void disableTrigger(String jobName) {
        try {
            LOG.info("Going to remove %s Job", jobName);
            UploadJobManager.getInstance().unTrigger(jobName);
        }
        catch (SchedulerException e) {
            LOG.error("Untrigger %s Job failed !!!", jobName);
            e.printStackTrace();
        }
    }
}

 

 

 2. 配置job details

	<!-- For times when you need more complex processing, passing data to the scheduled job -->
	<bean name="notify.job.processor.detail"  class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
	    <property name="jobClass" 
	    	value="com.eifesun.monitor.upload.uploader.processor.NotifyJobProcessor" />
	    <property name="durability" value="true" />
	</bean>

 

 

 3.配置job trigger

  变量

	 <bean id="heartbeatSecond" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
	    <property name="targetObject" ref="upload.setting"/>
	    <property name="targetMethod" value="getSendHeartBeatSecond"/>
	</bean>   

 trigger

	<bean id="notify.job.processor.trigger"  class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
	    <property name="jobDetail" ref="notify.job.processor.detail" />
	    <property name="startDelay" value="5" />
	    <property name="repeatInterval" value="#{heartbeatSecond}" />
	</bean>

 

 

 4.配置job scheduler

<bean id="job.processor.scheduler"  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="autoStartup" value="false"/>
	    <property name="jobDetails">
	        <list>
	            <ref bean="notify.job.processor.detail" />
	        </list>
	    </property>
	 
	    <property name="triggers">
	        <list>
	            <ref bean="notify.job.processor.trigger" />
	        </list>
	    </property>
	</bean> 

 

 

最后,

如果job中有外部依赖,可以这样配置

	<bean name="report.job.processor.detail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
		<property name="jobClass"
			value="com.eifesun.monitor.upload.uploader.processor.ReportJobProcessor" />
		<property name="jobDataMap">
			<map>
				<entry key="inverterRepo" value-ref="inverter.repo" />
				<entry key="deviceRepo" value-ref="device.repo" />
			</map>
		</property>
		<property name="durability" value="true" />
	</bean>  

 

 

分享到:
评论

相关推荐

    spring+quartz需要的4个jar包 不需要6个

    在Quartz的配置中,你需要定义Scheduler、JobDetail、Trigger等元素,这些都可以通过XML配置文件或者使用Spring的`@Configuration`注解来实现。例如,创建一个简单的Job: ```java import org.springframework....

    spring-quartz定时设置详细说明

    Spring 和 Quartz 是两个在 Java 开发中非常重要的框架。Spring 是一个全面的后端开发框架,而 Quartz 是一个强大的任务调度库。将它们结合使用,我们可以实现基于 Spring 的应用程序中的定时任务管理。以下是对 ...

    spring3整合quartz1.8和spring3整合quartz2.2两个版本示例

    Spring 也支持使用 `@Component` 注解来定义 Job 类,以及 `@Configuration` 和 `@EnableScheduling` 来开启任务调度。 4. **Scheduler 配置**:在 Spring 配置中,可以使用 `@Configuration` 类来定义 `...

    spring_quartz项目可以直接运行

    "springquartz—项目可以直接运行" 这个压缩包中,通常会包含以下部分: 1. **pom.xml**:Maven 项目配置文件,包含了 Spring 和 Quartz 相关依赖。 2. **src/main/java**:源代码目录,可能包含自定义的 Job 类、...

    Spring定时器quartz

    例如,我们可以创建一个实现了`org.quartz.Job`接口的类,并在其中定义任务的行为。然后,使用`@Component`注解将其注册为Spring Bean。 Trigger则是定义任务何时运行的规则。最常见的是CronTrigger,它使用cron...

    spring-boot-quartz

    在Spring Boot应用中引入Quartz,我们需要在`pom.xml`或`build.gradle`文件中添加Quartz的依赖。对于Maven用户,添加如下依赖: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-...

    Spring4集成quartz2.2.1

    总结,Spring 4集成Quartz 2.2.1涉及的主要步骤包括:引入Quartz依赖、配置SchedulerFactoryBean、定义Job类、创建Trigger以及打包应用。这个过程使得我们可以灵活地在Spring应用中管理和执行定时任务。

    Quartz2.2.1基于Spring注解方式配置Quartz

    Quartz2.2.1是其一个版本,提供了丰富的功能和优化,包括集群支持、灵活的调度策略以及与Spring框架的深度集成。本文将详细介绍如何在Spring环境中使用注解方式配置Quartz。 1. **引入依赖** 在项目中,你需要引入...

    Spring -Quartz的配置

    你可以创建一个实现了`org.springframework.scheduling.quartz.JobDetailBean`的类来表示Job,并用`org.springframework.scheduling.quartz.CronTriggerBean`来定义Cron表达式,从而控制触发时间。 ```java @Bean ...

    schedule-job, 基于Spring Boot Quartz 的分布式任务调度系统.zip

    本项目名为“schedule-job”,是基于Spring Boot框架与Quartz库构建的分布式任务调度系统,它允许开发者方便地定义、管理和执行定时任务。 【Spring Boot基础知识】 Spring Boot是由Pivotal团队提供的全新框架,其...

    spring quartz简单例子

    4. **配置Quartz**:在Spring的配置文件中,我们需要定义`SchedulerFactoryBean`,设置数据源、job存储以及其它Quartz配置属性。例如,`triggers`和`jobs`可以通过XML配置文件来定义,或者使用`@Configuration`注解...

    spring+quartz定时任务

    【Spring + Quartz 实现定时任务】 在Java应用开发中,定时任务是一项常用的功能,用于执行周期性的、计划性的工作,例如数据同步、日志清理、发送邮件等。Spring框架提供了与Quartz库集成的能力,使得我们可以方便...

    spring boot集成quartz定时器

    1. 定义Job接口:Spring Boot中的Job需要实现`org.springframework.batch.core.Job`接口,但是这里我们使用Quartz,所以需要实现`org.quartz.Job`接口。例如: ```java import org.quartz.Job; import org.quartz....

    Spring中Quartz的配置(守护进程)(本人亲自测试)

    首先,我们需要在项目的`pom.xml`文件中引入Quartz和Spring相关的依赖。Quartz的最新稳定版本通常可以在Maven仓库中找到。例如,你可以添加以下依赖: ```xml &lt;groupId&gt;org.quartz-scheduler &lt;artifactId&gt;quartz...

    Spring+Quartz2.2.0+Demo源码实战演练【精华篇2014】

    - `SpringQuartz`项目中的`pom.xml`文件会列出所有依赖,包括Spring和Quartz的相关库。 - 将项目导入MyEclipse后,运行主类启动应用,然后观察任务是否按预期执行。 7. **注意事项**: - 配置Quartz时,确保...

    Spingboot+Quartz基于数据库的作业任务调度

    4. **注册Job和Trigger**:在Spring Boot的配置类中,使用`@Configuration`和`@EnableScheduling`注解开启调度功能,并使用`SchedulerFactoryBean`注册Job和Trigger。这样,Quartz将在启动时读取数据库中的配置并...

    动态加载属性文件与SpringQuartz的应用

    Spring Quartz提供了声明式配置,可以将作业和触发器定义在XML配置文件或Java配置类中,并且可以通过Spring的依赖注入(DI)来获取和注入所需的bean。 结合这两个知识点,我们可以将动态加载属性文件与Spring ...

    spring quartz学习总结: cluster的配置和示例

    - `pom.xml`:项目构建文件,确保依赖了Spring和Quartz库。 通过上述配置和示例,你可以创建一个具备高可用性的Spring Quartz集群,确保任务在任何节点故障时仍能正常运行。记得根据实际项目需求调整配置和代码。

    spring4+quartz2基本配置及应用

    《Spring4与Quartz2整合应用详解》 在企业级应用开发中,任务调度是一项重要的功能,用于执行定时任务,例如数据同步、报表生成等。Spring4和Quartz2是两个常用的开源框架,Spring提供了强大的依赖注入和面向切面...

    Spring quartz

    - **Java配置**:Spring Boot项目中,可以使用@Configuration和@Bean注解来配置Job、Trigger和Scheduler。 3. **API使用** - **定义Job**:通常使用`@Component`注解创建一个Spring Bean,并且实现`org.spring...

Global site tag (gtag.js) - Google Analytics