最近在做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>

这个是我的实体类:

 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触发

关于spring3定时器cron参数设置每月最后一天不支持L

<!-- spring定时器 -->
<bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="taskCount"/>
</property>
<property name="targetMethod">
<value>autoCountTimes</value>
</property>
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="methodInvokingJobDetail"/>
</property>
<!-- 配置每个月的最后一天的23点59分,调用修改用户月登陆次数的方法 -->
<property name="cronExpression">
<value>0 59 23 L * ?</value>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list><ref local="cronTrigger"/></list>
</property>
</bean>

我采用了和quartz方式的.其中里面的taskCount是我在bean里面配置的要执行定时任务的那个bean的id,

autoCountTimes指的是要执行的那个方法.这样就可以用带L那个corn表达式了.

最新文章

  1. 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
  2. PL/SQL客户端中执行insert语句,插入中文乱码
  3. PHP 之 CURL 模拟登陆并获取数据
  4. 【笔记】cookies管理工具类
  5. term2 配置
  6. 用户IP地址的三个属性的区别(HTTP_X_FORWARDED_FOR,HTTP_VIA,REM_addr
  7. Bootstrap学习笔记系列2-------Bootstrap简单表格处理
  8. SqlServer——批量操作(批量添加,删除)
  9. 44. Decode Ways &amp;&amp; Gray Code
  10. 《c程序设计语言》读书笔记--反转字符串
  11. Drawable 着色的后向兼容方案
  12. 项目管理实践 -- 健身小管家(Fitness housekeeper)的管理(5)(终结)
  13. 4.当接口的请求方式为 application/json的时候时
  14. php注册登录源代码
  15. JDK1.8中的线程池
  16. C# winform 检测当前电脑安装的.net framework版本
  17. 鼠标事件-MouseEvent【转】
  18. 爬虫 -----爬取百度时事热点和url
  19. Tars 服务调服务
  20. Java LocalDateTime,DateTimeFomatter----JDK8新时间类的简单使用

热门文章

  1. Codeforces Round #354 (Div. 2) C. Vasya and String
  2. 小技巧---查doc文档的index.html怎么用的和chm一样
  3. Hdu 1506 Largest Rectangle in a Histogram 分类: Brush Mode 2014-10-28 19:16 93人阅读 评论(0) 收藏
  4. YEBIS
  5. date format 精辟讲解
  6. .NET设计模式(4):建造者模式(Builder Pattern)(转)
  7. RT/Metro商店应用如何如何获取图片的宽高
  8. 几个Google中国的访问IP
  9. topcoder 642
  10. Sqli-labs less 16