前几天接到的需求是要求在正在开发的项目中添加一个远程调用的模块,并且是要求定时调用。就考虑到定时器机制。
查了一下java开发中大约有三种j定时机制,java本身自带的机制,还有一个是spring框架自带的定时机制,还有一个就是我所采用的quartz定时器。三者的区别大家可以找到。
我在spring框架中使用quartz的步骤总结:
1.引入jar包--我使用的是maven项目
<!--Quartz 定时调度器 begin--> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <!--Quartz 定时调度器 end-->
2.创建定时器类
public class ExecuteTimerTask{ protected Logger logger = LoggerFactory.getLogger(getClass());//日志对象 @Autowired private CallApiService callApiService;//注入执行远程调用的Service /** * @功能描述 执行远程调用 */ public void execute(){ callApiService.saveElectricity(); } }
3.配置spring-context-quartz.xml
<!-- 要执行的远程调用任务类 --> <bean id="quartzJob" class="com.thinkgem.jeesite.modules.rmi.time.ExecuteTimerTask" /> <!-- 将需要执行的定时任务注入JOB中。 --> <bean id="methodInvokingJmobDetailFactoryBean" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="quartzJob"></property> <!-- 任务类中需要执行的方法 --> <property name="targetMethod" value="execute"></property> <!--<!– 上一次未执行完成的,要等待有再执行。 –>--> <!--<property name="concurrent" value="false"></property>--> </bean> <!-- 基本的定时器配置 --> <!-- <bean id="" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> <property name="jobDetail" ref="methodInvokingJmobDetailFactoryBean"></property> <property name="startDelay" value="3000"></property> <property name="repeatInterval" value="2000"></property> </bean>-->
<!--不同的定时配置类,实现不同功能而已--> <bean id="cronTriggerFactoryBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <!--制定调用任务及方法--> <property name="jobDetail" ref="methodInvokingJmobDetailFactoryBean" /> <!--设置调用的周期--> <!--暂设每分钟执行一次--> <property name="cronExpression" value="0 0/1 * * * ?" /> </bean> <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTriggerFactoryBean"></ref> </list> </property> </bean> </beans>
我使用的是配置文件的方式进行开发的