博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring cron 定时任务
阅读量:5142 次
发布时间:2019-06-13

本文共 9290 字,大约阅读时间需要 30 分钟。

文章首发于个人博客:

  • 0 预备知识:cron表达式

    见 《5 参考》一节。

    1 环境

    eclipse mars2 + Maven3.3.9

    2 开发步骤

    2.1 建立一个maven工程

    POM如下:

    1 
    2
    4.0.0
    3
    com.yeyouluo.spring.timer
    4
    spring-timer-demo
    5
    0.0.1-SNAPSHOT
    6 7
    8
    4.2.6.RELEASE
    9
    1.7.2
    10
    1.2.17
    11
    12
    13
    14
    org.slf4j
    15
    slf4j-api
    16
    ${slf4j.version}
    17
    18
    19
    org.slf4j
    20
    slf4j-log4j12
    21
    ${slf4j.version}
    22
    23
    24
    25
    org.slf4j
    26
    jcl-over-slf4j
    27
    ${slf4j.version}
    28
    29
    30
    31
    org.slf4j
    32
    jul-to-slf4j
    33
    ${slf4j.version}
    34
    35
    36
    log4j
    37
    log4j
    38
    ${log4j.version}
    39
    40
    41
    org.lazyluke
    42
    log4jdbc-remix
    43
    0.2.7
    44
    45
    46
    47
    org.springframework
    48
    spring-core
    49
    ${spring.version}
    50
    51
    52
    org.springframework
    53
    spring-web
    54
    ${spring.version}
    55
    56
    57
    org.springframework
    58
    spring-tx
    59
    ${spring.version}
    60
    61
    62
    org.springframework
    63
    spring-jdbc
    64
    ${spring.version}
    65
    66
    67
    org.springframework
    68
    spring-webmvc
    69
    ${spring.version}
    70
    71
    72
    org.springframework
    73
    spring-aop
    74
    ${spring.version}
    75
    76
    77
    org.springframework
    78
    spring-beans
    79
    ${spring.version}
    80
    81
    82
    org.springframework
    83
    spring-context
    84
    ${spring.version}
    85
    86
    87
    org.springframework
    88
    spring-context-support
    89
    ${spring.version}
    90
    91
    92
    org.springframework
    93
    spring-expression
    94
    ${spring.version}
    95
    96
    97
    org.springframework
    98
    spring-messaging
    99
    ${spring.version}
    100
    101
    102
    org.springframework.integration
    103
    spring-integration-core
    104
    4.2.5.RELEASE
    105
    106 107
    108 109
    jar
    110
    POM.xml

    pom文件中可能加入了很多没有使用的jar,比如和mybatis、druid、mysql-connector相关的jar,以备后用。

    2.2 添加配置文件

    ①log4j.properties

    1 log4j.rootLogger=INFO, Console, RollingFile 2 #Console 3 log4j.appender.Console=org.apache.log4j.ConsoleAppender 4 log4j.appender.Console.layout=org.apache.log4j.PatternLayout 5 log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n 6   7 #RollingFile 8 log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender 9  10 log4j.appender.RollingFile.File=logs/log.log11 log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout12 log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
    log4j.xml

    ②spring-base.xml

    1 
    2
    9 10
    11 12
    13
    14
    15 16
    spring-base.xml

    注意引入命名空间

    xmlns:task=”“ 和

    2.3 创建定时任务ReadDBTask

    1 package com.yeyouluo.spring.timer.service;2 import org.apache.log4j.Logger;3 public class ReadDBTask {4     public static Logger log = Logger.getLogger(ReadDBTask.class);5     public void doSomething() {6         log.info("********");7         log.info("定时任务执行。");8     }9 }
    ReadDBTask.java

    2.4 添加启动函数Main

    1 package com.yeyouluo.spring.timer.start; 2 import org.slf4j.Logger; 3 import org.slf4j.LoggerFactory; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 public class Main { 6      7     public static Logger logger = LoggerFactory.getLogger(Main.class); 8     public static final String config = "spring-base.xml"; 9     10     public static void main(String[] args) {11         12         ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(config);13         logger.info("spring timer started");14         if( ctx != null ) {15             ctx.start();16         }17     }18 }
    Main.java

    3 流程分析

    在启动函数Main.java右键 –> run as –> Java Application。

    结果为:每3秒在控制台输出如下:
    2017-10-16 15:03:54,885 [main] INFO [com.yeyouluo.spring.timer.start.Main] - spring timer started
    2017-10-16 15:03:57,002 [pool-1-thread-1] INFO [com.yeyouluo.spring.timer.service.ReadDBTask] - **
    2017-10-16 15:03:57,003 [pool-1-thread-1] INFO [com.yeyouluo.spring.timer.service.ReadDBTask] - 定时任务执行。
    2017-10-16 15:04:00,001 [pool-1-thread-1] INFO [com.yeyouluo.spring.timer.service.ReadDBTask] - **
    2017-10-16 15:04:00,001 [pool-1-thread-1] INFO [com.yeyouluo.spring.timer.service.ReadDBTask] - 定时任务执行。
    2017-10-16 15:04:03,001 [pool-1-thread-1] INFO [com.yeyouluo.spring.timer.service.ReadDBTask] - **
    2017-10-16 15:04:03,001 [pool-1-thread-1] INFO [com.yeyouluo.spring.timer.service.ReadDBTask] - 定时任务执行。
    2017-10-16 15:04:06,002 [pool-1-thread-1] INFO [com.yeyouluo.spring.timer.service.ReadDBTask] - **
    2017-10-16 15:04:06,002 [pool-1-thread-1] INFO [com.yeyouluo.spring.timer.service.ReadDBTask] - 定时任务执行。

    • 从入口函数开始,加载spring配置文件spring-base.xml。
    • spring-base.xml定义了 ,指向定时任务类com.yeyouluo.spring.timer.service.ReadDBTask的doSomething方法。
    • 执行doSomething方法中的逻辑。

    4 拓展:打成jar部署到单独的服务器上

    目标:用java命令拉起程序。

    步骤
    ①将依赖jar提取出来,放入D:\timer\lib
    ②maven打包程序,将生成的jar放入D:\timer\lib
    ③在D:\timer\lib下新建一个文件start.cmd,内容如下:
    java -Djava.ext.dirs=D:\timer\lib -Xms1024m -Xmx1024m com.yeyouluo.spring.timer.start.Main
    ④双击start.cmd。
    结果

    部署在Linux上是一样的操作,仅仅是替换启动文件类型为.sh,并且内容中的路径改为Linux的路径。

    如果是部署在Linux服务器上,还可以编写如下文件:
    stop.sh
    jps | grep Main | awk '{print $1}' | xargs kill -9
    注:通过kill进程的方式实现,不优雅。尤其要注意还没有其他名称为Main的进程,防止误杀。

    clean-log.sh

    rm -f logs/*

    5 参考

转载于:https://www.cnblogs.com/helloIT/p/7683681.html

你可能感兴趣的文章
Docker安装(centos7.4)
查看>>
userdata
查看>>
威佐夫游戏 51Nod - 1072(威佐夫博弈入门经典题)
查看>>
Hibernate 简易入门教程
查看>>
sed入门详解教程
查看>>
MD5骨骼动画模型加载
查看>>
kubernetes 命令方式 部署、访问应用
查看>>
11:HTML5 发展史
查看>>
Redis批量导入数据的方法
查看>>
微信公众号、人脉拓展、运营
查看>>
Android中的selector的使用
查看>>
JAVA_OA管理系统(三)番外篇:Myeclipse导入Spring源码包
查看>>
面向对象的补充
查看>>
一个python特性的错误
查看>>
九度oj 题目1473:二进制数(stack)
查看>>
Visual Studio 2010 单元测试
查看>>
mysql delete语句不能用别名
查看>>
ZOJ2760 How many shortest path(网络流)
查看>>
MySQL恢复root用户超级权限方法
查看>>
关于i386和amd64的详细解释
查看>>