spring3定時器簡單配置


最近在做oa項目中寫到一個功能,就是員工每天的簽到和簽退.當時想了很久都沒有想出來,后來自己上網查了一下spring的定時器,然后就有了思路.

下面我貼上自己用到的這個定時器的配置.希望能夠和大家一起學習.

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2 xmlns:task="http://www.springframework.org/schema/task"
 3 http://www.springframework.org/schema/task   
 4     http://www.springframework.org/schema/task/spring-task-3.0.xsd">
 5  
 6 <!-- spring觸發器定時器開關 -->
 7     <task:annotation-driven />
 8       <task:scheduled-tasks>
 9             <!--這里設置每天的8:30點鍾,執行考勤方法,檢查每個員工誰沒有簽到 -->  
10           <task:scheduled ref="taskManual" method="autoManual" cron="0 30 8 * * ?" /> 
11       </task:scheduled-tasks>
12 </beans>

這個是我的實體類:

 1 public class AutoManual {
 2 /**
 3  * 自動檢測考勤方法
 4  * @author 呂兵陽
 5  * @return
 6  */
 7 public void autoManual(){
 8 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:config/applicationContext.xml");
 9 ManualsignService manualsignService = (ManualsignService) applicationContext.getBean("manualsignService");
10 EmployeeService employeeService = (EmployeeService) applicationContext.getBean("employeeService");
11 List<Manualsign>manuals = manualsignService.findManualignsByToday();//獲取所有的今天簽到的考勤
12 List<Employee> employees = employeeService.findEmployees();//獲取所有的員工
13 System.out.println("總共的員工數:"+employees.size());
14 List<Employee> temp = new ArrayList<Employee>();
15 for (Manualsign manual : manuals) {
16 for (Employee employee : employees) {
17 if(manual.getEmployee().getEmpId().equals(employee.getEmpId())){
18 temp.add(employee);
19 }
20 }
21 }
22 employees.removeAll(temp);
23 for (Employee employee : employees) {
24 if(employee!=null){
25 Manualsign manual = new Manualsign();
26 manual.setEmployee(employee);
27 manual.setEndTime(null);
28 Calendar cal = Calendar.getInstance();
29 manual.setStartTime(cal.getTime());
30 manual.setManOffStatus(null);
31 manual.setManStatus(2);
32 manualsignService.addManualsign(manual);
33 }
34 }
35 System.out.println("今天沒有簽到的員工數:"+employees.size());
36 }
37 }

這個是我的spring里面配置的bean:

1 <bean id="taskManual" class="com.accp.office.util.AutoManual"></bean>

首先要引入spring定時器這個命名空間,然后我們只需要簡單的配置.ref是我們在spring里面配置的一個pojo類,也就是一個普通的 bean,method方法,指向我們需要調用的那個方法,如果有多個可以用","號隔開,cron的配置大家可以看這方面的文檔,當然我給大家提供一 份:

其中時間的定義按以下例子模仿 
表達式 
Java代碼 
意義 

 1 "0/10 * * * * ?" 每十秒觸發 
 2 "0 0/1 * * * ?" 每一分鍾觸發 
 3 
 4 "0 0 12 * * ?" 每天中午12點觸發 
 5 "0 15 10 ? * *" 每天上午10:15觸發 
 6 "0 15 10 * * ?" 每天上午10:15觸發 
 7 "0 15 10 * * ? *" 每天上午10:15觸發 
 8 "0 15 10 * * ? 2005" 2005年的每天上午10:15觸發 
 9 "0 * 14 * * ?" 在每天下午2點到下午2:59期間的每1分鍾觸發 
10 "0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鍾觸發 
11 "0 0/5 14,18 * * ?" 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鍾觸發 
12 "0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鍾觸發 
13 "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發 
14 "0 15 10 ? * MON-FRI" 周一至周五的上午10:15觸發 
15 "0 15 10 15 * ?" 每月15日上午10:15觸發 
16 "0 15 10 L * ?" 每月最后一日的上午10:15觸發 
17 "0 15 10 ? * 6L" 每月的最后一個星期五上午10:15觸發 
18 "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一個星期五上午10:15觸發 
19 "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表達式了.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM