对于前几篇文章中总结的项目,中间使用到的各项技术都有描述,接下去就需要把项目整合发布了,由于该项目不需要前台展示所以当时直接采用了普通的Main工程。既然不是交给容器托管就需要自己启动线程使得项目能够在线上一直运行,因此考虑到需要使用到线程,又由于是需要定时去同步数据,则直接使用了Java中的Timer定时功能。
对于Timer通过查阅JDK可以了解到它有一个schedule方法,而该方法的其中一个参数是需要TimerTask抽象类,而该类是实现Runnable接口,这样该功能实现的思路就出来了。接下去进入编码阶段
首先实例化Timer对象Timer timer = new Timer();
然后实例化TimerTask,
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println("调用了timer定时任务"+new Date());
//输入业务代码
}
};
最后timer调用schedule方法timer.schedule(timerTask, 20,20);
这样就结束了。
做完之后考虑到项目既然已经使用了Spring,为何不直接使用Spring的定时任务呢?于是就自己对其进行了整改:
通过查阅资料了解到Spring的定时任务从实现上来区分主要分为TimerTask与Quartz来实现。由于原先使用的就是TimerTask自然就直接用TimerTask了结果是悲剧的,由于本人项目中使用的是Spring4,发现在Spring4中已经取消了org.springframework.scheduling.timer.ScheduledTimerTask这个类,自然这个实现方式已经不适用了,继而掉头使用Quartz来实现。
首先新建一个定时任务Job类,
public class BaseQuartzDemo {
@Autowired
private UserService userService;
public void addUserForQuartz() {
System.out.println("定时器调用quartz..." + new Date());
userService.saveUser(null);
}
}
然后对这个类需要定时的方法进行配置注入<bean id="baseQuartzDemo" class="com.zh.demo.base.task.BaseQuartzDemo"></bean>
<bean id="timeDitail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="baseQuartzDemo"></property>
<property name="targetMethod" value="addUserForQuartz"></property>
</bean>
接下去就是定义触发时间与频度了,这里需要注意点是使用的quartz的版本问题,本人是使用Quartz2.x所以需要使用CronTriggerFactoryBean,如果是使用之前版本,可以使用CronTriggerBean<bean id="timeTigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="timeDitail"></property>
<property name="cronExpression">
<value>0/2 * * * * ?</value>
</property>
</bean>
最后启动这个定时任务这里需要注意由于quartz会使用数据库记录job的状态而进行维护,若未建立相关数据表则加入autowire="no",否则autowire会自动装配dateSource导致缺表报错,如果建表保存Quartz的日志信息可以忽略这一点<bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="timeTigger" />
</list>
</property>
</bean>
进行代码测试,可以通过Main方法直接测试,也可以放入Tomcat容器测试,附上Main方法测试的代码吧,
public class MainDemoTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "applicationContext03.xml" });
UserService userService = (UserService)context.getBean("userService");
userService.init();
}
}
测试结果是定时任务正常运行。具体例子以及其他简单代码可以下载附件。
ps:这个项目涉及到的技术功能点差不多结束了,期间最大的感触就是写代码之前必须要先想清楚,比如定时就是一个例子,直接使用Spring定时任务或者与项目更加匹配。
对于以上内容如有错误烦请留言斧正,达到一起进步的效果,谢谢
分享到:
相关推荐
`Timer`接口源自Java标准库,但在Spring中,我们可以结合它来创建更加灵活的定时任务。本教程将详细介绍如何在Spring中使用`Timer`来实现能精确到几点运行的定时任务。 首先,我们需要理解`Timer`的基本概念。`java...
Java定时器和Spring定时器是Java开发中用于执行周期性任务的重要工具,它们在系统维护、数据同步、报告生成等场景中发挥着关键作用。本文将深入探讨这两个概念,以及如何在Spring框架中配置和使用定时器。 首先,...
C语言02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序(STC32G-DEMO-CODE-220311kw)C语言02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序(STC32G-DEMO-CODE-220311kw)C语言02-Timer0-Timer1-Timer2-Timer3-Timer4...
标题与描述均提到了“Java_Timer定时器实例_Spring实例”,这表明文章主要讨论的是如何在Java中使用Timer类创建定时任务,并将其整合到Spring框架中。以下是对该主题的详细解析: ### Java中的Timer定时器 #### ...
Java定时器(Timer)是Java Swing库中的一个类,它提供了调度任务在未来某个时间执行的能力。这个类主要用于在GUI应用程序中实现定时触发某些操作,比如更新界面、执行动画或者执行周期性的后台任务。Timer类结合了...
Spring定时器是Spring框架中的一个强大特性,它允许开发者在应用程序中设置定时任务,以便在特定的时间间隔执行特定的操作。本篇文章将详细解读如何在Spring中实现定时任务,包括两种不同的实现方式:基于Timer的...
通过使用Spring的定时器,我们可以将定时任务集成到Spring应用中,实现更加灵活和强大的任务调度。例如,我们可以利用 `@Scheduled` 注解来定义一个定时任务: ```java import org.springframework.scheduling....
Java定时器定时调用任务是Java编程中一个重要的功能,它允许开发者在特定的时间间隔执行某项任务,比如定期检查数据库、发送邮件或者执行维护操作等。Java中的定时任务实现通常涉及`java.util.Timer`类和`java.util....
根据提供的文件信息,本文将详细解析Java定时任务与Spring框架集成的相关知识点,包括如何在Spring环境中配置和管理定时任务。 ### Java定时任务简介 在Java中实现定时任务主要有以下几种方式: 1. **Timer和...
Java定时器,也被称为`Timer`类,是Java标准库中的一个强大工具,它允许开发者在指定的时间间隔执行任务,从而实现定时操作。这个类在`java.util`包中定义,是实现定时任务调度的核心。在本文中,我们将深入探讨`...
2. **Timer1**:也是一个8位定时器,与Timer0类似,但有时提供额外的功能,如在某些型号的STC8A8K中,它还可以作为16位定时器。测试程序会演示如何在16位模式下使用Timer1,并展示如何利用其捕获和比较功能。 3. **...
教程中的"12-2-1-定时器 Timer-相关例程演示"部分,通过实例展示了如何设置和使用定时器,帮助开发者了解其基本操作。 2. 定时器Timer的特性及时钟 定时器Timer的特性包括但不限于可配置的计数模式、中断服务、预分...
通过Spring与Quartz的整合,可以轻松地在Spring应用中管理定时任务,提高代码的可维护性。 总结来说,Quartz是Java中强大的定时任务库,通过它我们可以方便地创建和管理复杂的任务调度,包括但不限于在特定时间点...
这里用到的`Timer`类是Java标准库中的定时器,它可以按照预设的时间间隔或绝对时间点执行任务,但其功能相对简单,不适合处理复杂的调度需求。 总结起来,Spring的定时任务通过Quartz库提供了更强大和灵活的定时...
在Java中,`Timer`类是`java.util`包的一部分,用于调度线程执行任务。它主要用于处理那些需要定期执行的任务,比如更新用户界面、发送电子邮件通知等场景。通过`Timer`类,可以方便地创建并管理这些定时任务。 ###...
Java中的定时器(Timer)是Java.util包下用于执行定期任务的一个类,它与线程(Thread)紧密关联,能够帮助开发者实现定时执行特定任务的需求。这个机制在多线程编程(multithreading)中非常有用,特别是在需要定期...
根据给定的信息,本文将详细解析Java定时器的制作及应用,同时对比.NET中的三种不同类型的定时器,以便更好地理解定时任务的实现方式及其特点。 ### Java定时器基础 Java中定时器(Timer)主要用于执行周期性的...
1. **定时器(Timer)**:定时器是程序中用于定期执行某项任务的组件。在VC++中,可以使用Windows API中的SetTimer函数创建一个定时器,该函数会周期性地触发一个消息,这个消息可以被应用程序捕获并执行相应的操作...
在Java中,我们可以使用多种方式实现后台定时任务,包括使用`java.util.Timer`类,`java.util.concurrent.ScheduledExecutorService`,以及Spring框架中的`@Scheduled`注解。下面我们将详细探讨这些方法。 1. **...