Spring 中使用 QuartzJobBean 来进行定时任务的操作
代码如下:
@Controller @Scope("prototype")
public class QuartzSyncJob extends QuartzJobBean {
private MsgBusinessImpl msgBusinessImpl ;
public void setMsgBusinessImpl(MsgBusinessImpl msgBusinessImpl) {
this.msgBusinessImpl = msgBusinessImpl;
}
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
if(msgBusinessImpl != null){
msgBusinessImpl.deleteMsg(1);
}
}
}
其中private MsgBusinessImpl msgBusinessImpl ; 和setMsgBusinessImpl 这两个步十分重要,本来也想用action中那种方案自动注入,调用实例的,结果总是空指针。
用此方案,还需要在Spring配置文件,加入 <ref bean="msgBusinessImpl"/>
这样,自动任务中的业务类,就能得到0实例了。
<!-- Configure the sync Service -->
<bean name="randomSyncJob"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>com.fireinwind.job.QuartzSyncJob</value>
</property>
<property name="jobDataAsMap">
<map>
<entry key="timeout">
<value>5</value>
</entry>
<entry key="msgBusinessImpl">
<ref bean="msgBusinessImpl"/>
</entry>
</map>
</property>
</bean>
<!-- 配置触发器 -->
<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="randomSyncJob" />
</property>
<!-- 每天0点0分,触发RandomPriceJob,具体说明见附录 -->
<property name="cronExpression">
<value>0 0 0 * * ?</value>
</property>
</bean>
<bean autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 添加触发器 -->
<property name="triggers">
<list>
<ref local="cronTrigger" />
</list>
</property>
</bean>
==========
自己在另一个项目(tdstatistic)中也想用此算法,ShopBusiness是接口,怎么折腾也没折腾成功,后来又定义了一个ShopBusiness2为真实的业务类才解决接口类注入失败的问题,早知道自己是这么写的,把实现类注入不就行了。呵。。。。
2012-11-18晚
------------------------------------------------------
2013-07-18 总结
在配置文件中的类不是接口
应该是这个样子的
@Service
public class QuartzService {
@Resource private RuleLogDAO ruleLogDAO;
}
spring 配置文件
<!-- Configure the sync Service -->
<bean name="randomSyncJob"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>com.zqk.cpyj.filter.QuartzSyncJob</value>
</property>
<property name="jobDataAsMap">
<map>
<entry key="quartzService" value-ref="quartzService"/>
</map>
</property>
</bean>
<!-- 配置触发器 -->
<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="randomSyncJob" />
</property>
<!-- 每天0点0分,触发RandomPriceJob,具体说明见附录 -->
<property name="cronExpression">
<value>0 * * * * ?</value>
</property>
</bean>
<bean autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 添加触发器 -->
<property name="triggers">
<list>
<ref local="cronTrigger" />
</list>
</property>
</bean>
相关推荐
本文将探讨两种在Spring Boot中实现Controller间调用的方法及其优缺点。 首先,我们可以使用`RestTemplate`来模拟远程调用。这是一种常见的HTTP客户端工具,允许Controller A通过HTTP请求访问Controller B。以下是...
Spring Boot普通类调用bean【从零开始学Spring Boot】”旨在指导初学者如何在非Spring管理的类中访问和使用Spring容器中的bean。下面将详细讲解这个主题。 首先,了解Spring Boot的基础概念是必要的。Spring Boot...
它是Spring框架中的一个关键组件,用于将普通的Java方法暴露为可以通过HTTP请求调用的服务。它基于HTTP协议,而不是SOAP或XML-RPC,因此更加轻量级且易于使用。HttpInvokerServiceExporter会自动处理请求的序列化和...
需要注意的是,如果`reSchdeuleJob`有多个重载方法,Spring将自动选择没有参数的那个进行调用。 除了使用`CronTriggerBean`,还可以使用`SimpleTriggerBean`来创建简单触发器,它的触发规则基于间隔时间,而不是...
Spring Remote提供了一种机制,使得应用程序能够跨越网络边界调用其他服务的方法,仿佛它们是在同一进程中执行一样。HTTP远程调用是Spring Remote的一种实现方式,通过HTTP协议来传输数据,具有良好的可伸缩性和跨...
- **服务类** (`service.UserService`):这是一个简单的业务服务,提供了一个`doService()`方法,这是我们在任务中需要调用的业务逻辑。 - **调度类** (`schedule.TestJob`):这个类继承自`QuartzJobBean`,它是...
当提交jsp页面上的form表单时,系统会根据action的值来找到servlet里面具体的action,(这里的servlet是在web.xml配置文件里面),然后调用action里面的execute()方法,目的是用来调用业务逻辑的类的对象,...
这个"Spring3.0定时任务简单实例web工程"提供了一个使用Spring 3.0实现定时任务的实例,通过配置`TaskScheduler`,定义任务类,使用`@Scheduled`注解设置执行计划,最后在Web应用启动时启动任务,可以方便地在Web...
这种方法适用于一些简单的初始化逻辑,通常不推荐在主启动类中包含过多业务逻辑,因为它会使得启动类变得复杂。示例如下: ```java @SpringBootApplication public class Application { public static void ...
- 使用`@Aspect`注解来声明一个切面类,切面类中定义了`@Before`、`@After`、`@Around`、`@AfterReturning`和`@AfterThrowing`等通知方法,它们分别代表前置、后置、环绕、返回后和异常后执行的逻辑。 - 使用`@...
本实例提供了可以直接运行的任务调度解决方案,既可以作为服务器启动的一部分自动调用,也可以通过main方法入口手动触发。 在Spring中集成Quartz,首先我们需要在项目中引入Quartz和Spring的相关依赖。在Maven的pom...
这些方法通常会放在一个配置了`@EnableScheduling`的类中,表明该类是一个调度器。你可以设定定时任务的执行频率,如每分钟、每天、每周等。Spring的定时任务基于Quartz或Spring的TaskScheduler,它们都是强大的任务...
在实际应用中,首先我们需要在服务器端创建一个服务接口和其实现类,然后使用Spring4的`@Service`注解标记这个实现类,让Spring管理它。接着,我们需要在服务器端暴露这个服务,这通常通过实现`HessianServlet`并将...
对于任务的生产者,他们需要提供任务类型(通过bean ID表示的Spring实现类)和必要的任务参数。而任务的消费者,即执行任务的组件,需要能够解析这些参数并正确执行业务逻辑。此外,系统还需要有监控和日志记录机制...
在IT行业中,Spring框架是Java开发中的一个核心组件,它提供了丰富的功能,包括依赖注入、面向切面编程以及企业级服务。在分布式系统中,远程调用是一个常见需求,Spring为此提供了一种轻量级的解决方案——...
需要注意的是,异步方法必须在一个启用了`@EnableAsync`的配置类中使用,Spring会自动配置一个任务执行器来处理这些异步任务。 Spring的定时任务和异步方法是提高系统效率和实现复杂业务逻辑的重要工具。通过合理...
为了启用Spring AOP和定时任务,我们需要在配置类中启用它们。对于AOP,我们需要添加`@EnableAspectJAutoProxy`注解,并可能需要配置代理类型。对于定时任务,我们需要在配置类上添加`@EnableScheduling`注解,...
然后,使用@Service注解标记服务提供者的实现类,@Reference注解标记服务消费者的服务接口,使Spring能够自动管理这些组件。 2. **服务发布** 在服务提供者(Provider)端,我们需要定义服务接口,并提供其实现。...
在Web应用中,这类Bean通常负责处理用户请求,并调用业务逻辑。 当Spring容器启动时,可以通过`<context:component-scan>`标签在XML配置文件中指定需要扫描的包。例如: ```xml ``` 这会告诉Spring从`...
服务接口定义了对外提供的业务方法,而实现类则提供了具体的业务逻辑。通过CXF的注解,如`@WebService`和`@WebMethod`,我们可以声明这是一个Web服务并定义其操作。 在服务器端,我们需要配置CXF的Servlet,以便...