spring定时任务详解(@Scheduled注解)多线程讲解

刺骨的言语ヽ痛彻心扉 2022-03-16 12:29 343阅读 0赞

转载自 https://www.cnblogs.com/ClassNotFoundException/p/6635189.html

(一)在xml里加入task的命名空间

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:task="http://www.springframework.org/schema/task"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/beans
  7. classpath:/org/springframework/beans/factory/xml/spring-beans-4.1.xsd
  8. http://www.springframework.org/schema/task
  9. http://www.springframework.org/schema/task/spring-task-4.1.xsd">
  10. <task:annotation-driven />
  11. </beans>

(二)启用注解驱动的定时任务

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:task="http://www.springframework.org/schema/task"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/beans
  7. classpath:/org/springframework/beans/factory/xml/spring-beans-4.1.xsd
  8. http://www.springframework.org/schema/task
  9. http://www.springframework.org/schema/task/spring-task-4.1.xsd">
  10. <task:annotation-driven />
  11. </beans>

(三)定时任务

  Class : ATask

  1. package com.xindatai.ibs.liang;
  2. import java.text.DateFormat;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. import org.springframework.scheduling.annotation.Scheduled;
  6. import org.springframework.stereotype.Component;
  7. @Component
  8. public class ATask implements IATask {
  9. @Scheduled(cron="0/10 * * * * ?")
  10. public void aTask() {
  11. try {
  12. Thread.sleep(20000);
  13. } catch (InterruptedException e) {
  14. e.printStackTrace();
  15. }
  16. DateFormat df = new SimpleDateFormat("HH:mm:ss");
  17. System.out.println(df.format(new Date()) + "********A任务每10秒执行一次进入测试");
  18. }
  19. }

  Class : BTask

  1. package com.xindatai.ibs.liang;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import org.springframework.scheduling.annotation.Scheduled;
  5. import org.springframework.stereotype.Component;
  6. @Component
  7. public class BTask implements IBTask {
  8. @Scheduled(cron="0/5 * * * * ?")
  9. public void bTask() {
  10. System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date()) + "********B任务每5秒执行一次进入测试");
  11. }
  12. }

  Console :

  1. 20:11:50********A任务每10秒执行一次进入测试
  2. 20:11:50********B任务每5秒执行一次进入测试
  3. 20:11:55********B任务每5秒执行一次进入测试
  4. 20:12:00********B任务每5秒执行一次进入测试
  5. 20:12:20********A任务每10秒执行一次进入测试
  6. 20:12:20********B任务每5秒执行一次进入测试
  7. 20:12:25********B任务每5秒执行一次进入测试
  8. 20:12:30********B任务每5秒执行一次进入测试
  9. 20:12:50********A任务每10秒执行一次进入测试
  10. 20:12:50********B任务每5秒执行一次进入测试
  11. 20:12:55********B任务每5秒执行一次进入测试
  12. 20:13:20********A任务每10秒执行一次进入测试
  13. 20:13:20********B任务每5秒执行一次进入测试
  14. 20:13:25********B任务每5秒执行一次进入测试
  15. 20:13:50********A任务每10秒执行一次进入测试
  16. 20:13:50********B任务每5秒执行一次进入测试
  17. 20:13:55********B任务每5秒执行一次进入测试
  18. 20:14:00********B任务每5秒执行一次进入测试
  19. 20:14:20********A任务每10秒执行一次进入测试
  20. 20:14:20********B任务每5秒执行一次进入测试
  21. 20:14:25********B任务每5秒执行一次进入测试
  22. 20:14:30********B任务每5秒执行一次进入测试
  23. 20:14:50********A任务每10秒执行一次进入测试
  24. 20:14:50********B任务每5秒执行一次进入测试
  25. 20:14:55********B任务每5秒执行一次进入测试
  26. 20:15:20********A任务每10秒执行一次进入测试
  27. 20:15:20********B任务每5秒执行一次进入测试
  28. 20:15:25********B任务每5秒执行一次进入测试
  29. 20:15:30********B任务每5秒执行一次进入测试
  30. 20:15:50********A任务每10秒执行一次进入测试
  31. 20:15:50********B任务每5秒执行一次进入测试
  32. 20:15:55********B任务每5秒执行一次进入测试
  33. 20:16:00********B任务每5秒执行一次进入测试
  34. 20:16:20********A任务每10秒执行一次进入测试
  35. 20:16:20********B任务每5秒执行一次进入测试
  36. 20:16:25********B任务每5秒执行一次进入测试
  37. 20:16:30********B任务每5秒执行一次进入测试
  38. 20:16:50********A任务每10秒执行一次进入测试
  39. 20:16:50********B任务每5秒执行一次进入测试
  40. 20:16:55********B任务每5秒执行一次进入测试
  41. 20:17:20********A任务每10秒执行一次进入测试
  42. 20:17:20********B任务每5秒执行一次进入测试
  43. 20:17:25********B任务每5秒执行一次进入测试
  44. 20:17:30********B任务每5秒执行一次进入测试
  45. 20:17:50********A任务每10秒执行一次进入测试
  46. 20:17:50********B任务每5秒执行一次进入测试
  47. 20:17:55********B任务每5秒执行一次进入测试
  48. 20:18:20********A任务每10秒执行一次进入测试
  49. 20:18:20********B任务每5秒执行一次进入测试
  50. 20:18:25********B任务每5秒执行一次进入测试
  51. 20:18:50********A任务每10秒执行一次进入测试
  52. 20:18:50********B任务每5秒执行一次进入测试
  53. 20:18:55********B任务每5秒执行一次进入测试
  54. 20:19:00********B任务每5秒执行一次进入测试
  55. 20:19:20********A任务每10秒执行一次进入测试
  56. 20:19:20********B任务每5秒执行一次进入测试
  57. 20:19:25********B任务每5秒执行一次进入测试
  58. 20:19:30********B任务每5秒执行一次进入测试
  59. 20:19:50********A任务每10秒执行一次进入测试
  60. 20:19:50********B任务每5秒执行一次进入测试
  61. 20:19:55********B任务每5秒执行一次进入测试
  62. 20:20:20********A任务每10秒执行一次进入测试
  63. 20:20:20********B任务每5秒执行一次进入测试
  64. 20:20:25********B任务每5秒执行一次进入测试
  65. 20:20:50********A任务每10秒执行一次进入测试
  66. 20:20:50********B任务每5秒执行一次进入测试
  67. 20:20:55********B任务每5秒执行一次进入测试
  68. 20:21:00********B任务每5秒执行一次进入测试
  69. 20:21:20********A任务每10秒执行一次进入测试
  70. 20:21:20********B任务每5秒执行一次进入测试
  71. 20:21:25********B任务每5秒执行一次进入测试
  72. 20:21:50********A任务每10秒执行一次进入测试
  73. 20:21:50********B任务每5秒执行一次进入测试
  74. 20:21:55********B任务每5秒执行一次进入测试
  75. 20:22:20********A任务每10秒执行一次进入测试
  76. 20:22:20********B任务每5秒执行一次进入测试
  77. 20:22:25********B任务每5秒执行一次进入测试
  78. 20:22:30********B任务每5秒执行一次进入测试
  79. 20:22:50********A任务每10秒执行一次进入测试
  80. 20:22:50********B任务每5秒执行一次进入测试
  81. 20:22:55********B任务每5秒执行一次进入测试
  82. 20:23:00********B任务每5秒执行一次进入测试
  83. 20:23:20********A任务每10秒执行一次进入测试
  84. 20:23:20********B任务每5秒执行一次进入测试
  85. 20:23:25********B任务每5秒执行一次进入测试

复制代码

spring的定时任务默认是单线程多个任务执行起来时间会有问题:B任务会因为A任务执行起来需要20S而被延后20S执行

(一)在xml里加入task的命名空间

(二)启用注解驱动的定时任务

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task"
  4. xsi:schemaLocation="
  5. http://www.springframework.org/schema/beans
  6. classpath:/org/springframework/beans/factory/xml/spring-beans-4.1.xsd
  7. http://www.springframework.org/schema/task
  8. http://www.springframework.org/schema/task/spring-task-4.1.xsd">
  9. <!-- 启用annotation方式 -->
  10. <task:annotation-driven scheduler="myScheduler" />
  11. <!-- 配置任务线程池 -->
  12. <task:scheduler id="myScheduler" pool-size="5" />
  13. </beans>

  Console :

啦啦啦

啦啦啦

啦啦啦

啦啦啦

package com.xindatai.ibs.liang;
import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;
@Componentpublic class ATask implements IATask {
@Scheduled(cron=”0/10 * * * * ?”)public void aTask() {try {Thread.sleep(20000);} catch (InterruptedException e) {e.printStackTrace();}DateFormat df = new SimpleDateFormat(“HH:mm:ss”);System.out.println(df.format(new Date()) + “********A任务每10秒执行一次进入测试”);}
}

发表评论

表情:
评论列表 (有 0 条评论,343人围观)

还没有评论,来说两句吧...

相关阅读