最近在做oa项目中写到一个功能,就是员工每天的签到和签退.当时想了很久都没有想出来,后来自己上网查了一下spring的定时器,然后就有了思路.
下面我贴上自己用到的这个定时器的配置.希望能够和大家一起学习.
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:task="http://www.springframework.org/schema/task" http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">
<!-- spring触发器定时器开关 --> <task:annotation-driven /> <task:scheduled-tasks> <!--这里设置每天的8:30点钟,执行考勤方法,检查每个员工谁没有签到 --> <task:scheduled ref="taskManual" method="autoManual" cron="0 30 8 * * ?" /> </task:scheduled-tasks>
</beans>
这个是我的pojo类
public class AutoManual { /** * 自动检测考勤方法 * @author 吕兵阳 * @return */ public void autoManual(){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:config/applicationContext.xml"); ManualsignService manualsignService = (ManualsignService) applicationContext.getBean("manualsignService"); EmployeeService employeeService = (EmployeeService) applicationContext.getBean("employeeService"); List<Manualsign>manuals = manualsignService.findManualignsByToday();//获取所有的今天签到的考勤 List<Employee> employees = employeeService.findEmployees();//获取所有的员工 System.out.println("总共的员工数:"+employees.size()); List<Employee> temp = new ArrayList<Employee>(); for (Manualsign manual : manuals) { for (Employee employee : employees) { if(manual.getEmployee().getEmpId().equals(employee.getEmpId())){ temp.add(employee); } } } employees.removeAll(temp); for (Employee employee : employees) { if(employee!=null){ Manualsign manual = new Manualsign(); manual.setEmployee(employee); manual.setEndTime(null); Calendar cal = Calendar.getInstance(); manual.setStartTime(cal.getTime()); manual.setManOffStatus(null); manual.setManStatus(2); manualsignService.addManualsign(manual); } } System.out.println("今天没有签到的员工数:"+employees.size()); } }
这个是我的spring里面配置的bean: <bean id="taskManual" class="com.accp.office.util.AutoManual"></bean>
首先要引入spring定时器这个命名空间,然后我们只需要简单的配置.ref是我们在spring里面配置的一个pojo类,也就是一个普通的bean,method方法,指向我们需要调用的那个方法,如果有多个可以用","号隔开,cron的配置大家可以看这方面的文档,当然我给大家提供一份:
其中时间的定义按以下例子模仿
表达式
Java代码
意义
"0/10 * * * * ?" 每十秒触发
"0 0/1 * * * ?" 每一分钟触发
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
相关推荐
Spring 中的 Quartz 配置-Spring 定时器-java 定时器 在 Spring 框架中,Quartz 是一个非常流行的开源作业调度器,可以实现任务的定时执行。在本篇文章中,我们将讨论如何在 Spring 中配置 Quartz,以实现 Java ...
Spring定时器,也被称为Spring Boot的定时任务,是Spring框架中的一个强大功能,它允许开发者在应用程序中安排周期性任务的执行。这个功能基于Java的`java.util.concurrent.ScheduledExecutorService`,并通过Spring...
Spring Quartz 定时器示例(Web工程版),欢迎下载。
本文将深入探讨如何在Spring框架中进行动态定时器的封装,结合标签"源码"和"工具",我们将探讨Spring与Quartz库的整合,以及如何通过源码理解其实现机制。 首先,让我们了解一下Spring的定时任务支持。Spring提供了...
在网上找了很多定时器的实现,主要有2种:一是继承java.util.TimerTask,一种是使用Quartz,我开始选用了Quartz,但是Common-collection.jar出了问题,后来就都不用了,自己写了一个普通类,用spring的AOP对方法进行拦截,...
在Spring框架中,有两种主要的方法来实现定时任务:Spring自带的`@Scheduled`注解和引入第三方库Quartz。这两种方法都可以帮助开发者在特定的时间点执行任务,为应用程序添加计划任务的能力。 首先,我们来看看使用...
### Spring 实现定时器 在Java开发领域,Spring框架因其高度灵活、强大的功能以及广泛的社区支持而备受青睐。其中,Spring框架提供了多种实现定时任务的方法,包括但不限于使用`...
在本主题"spring的定时器设置"中,我们将深入探讨Spring如何配置定时任务,主要关注2.x和3.x版本的区别。 一、Spring 2.x 定时任务 在Spring 2.x中,定时任务主要是通过`org.springframework.scheduling.timer`包...
Java定时器和Spring定时器是Java开发中用于执行周期性任务的重要工具,它们在系统维护、数据同步、报告生成等场景中发挥着关键作用。本文将深入探讨这两个概念,以及如何在Spring框架中配置和使用定时器。 首先,...
首先,我们来看Spring定时器。Spring使用的是Quartz库来实现定时任务管理。在给出的例子中,可以看到配置文件中定义了几个关键的bean: 1. `zhang`:这是被调度的任务bean,它包含了实际执行定时任务的方法。在这个...
Spring的定时器功能使得开发者能够轻松地实现计划性的任务,例如数据清理、日志备份或者发送邮件等周期性操作。本文将深入探讨Spring中的定时器特性,以及如何在Java环境中结合Quartz库进行更高级的定时任务整合。 ...
### Spring动态定时器详解 #### 一、动态定时任务概念 动态定时任务,是指由用户或系统根据实际需求动态设定的定时任务。这类任务的触发时间并非固定不变,而是可以根据实时情况灵活调整。传统上,配置定时任务...
spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器spring定时器
### Spring2.5定时器任务实现机制与配置详解 #### 一、Spring2.5定时器任务概述 在Spring框架2.5版本中,提供了强大的定时任务管理功能,支持多种方式来实现定时任务的调度与执行。这为开发人员提供了一个灵活且...
Spring Quartz定时器 Spring Quartz定时器 Spring Quartz定时器 Spring Quartz定时器
Spring提供了Spring Task模块来实现定时任务,也就是我们常说的Spring定时器。这个"spring定时器简单的demo"应该包含了一个使用Spring Task实现简单定时任务的例子。 首先,Spring Task的配置通常在`...
Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,通过在程序运行时动态地将代码插入到方法调用中,来实现跨切面的关注点,如日志记录、性能监控、事务管理等。而Spring...
Spring框架提供了两种方式来处理定时任务:Java内置的`Timer`类和第三方库OpenSymphony的Quartz。下面将详细介绍这两种实现方式。 ### 1. Java `Timer` 类 Java `java.util.Timer` 类是Java标准库中的一个轻量级...
Spring定时器,也被称为Spring Boot的定时任务,是Spring框架中的一个强大功能,它允许开发者在特定的时间间隔执行任务,而无需手动管理线程。在实际的开发中,这一特性常用于实现数据清理、统计计算、发送邮件等...