使用quartz进行容器启动时登陆接口服务器和接口服务器进行心跳连接
1、下载quartz的相应jar包
2、增加spring配置文件(applicationContext-quartz.xml)
内容如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <!-- 需要定时执行的类 -->
<bean id="heartTask" class="com.tf.user.util.BoHeartTask">
<property name="heartHref" value="http://localhost:8080/ScientificMarketing/bo_heart.jsp"></property>
<property name="loginHref" value="http://localhost:8080/ScientificMarketing/user.do?action=bologin"></property>
</bean> <!-- 心跳任务-->
<bean id="taskJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="heartTask"></property>
<property name="targetMethod">
<value>doHeart</value>
</property>
</bean>
<!-- 登陆任务 -->
<bean id="loginJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="heartTask"></property>
<property name="targetMethod">
<value>doFirstLogin</value>
</property>
</bean> <!-- 每15分钟心跳一次-->
<bean id="runTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="taskJob" />
</property>
<property name="cronExpression">
<value>0 0/15 * * * ?</value>
</property>
</bean>
<!-- 服务器启动后延迟1秒发登陆请求 -->
<bean id="loginTime" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail">
<ref bean="loginJob" />
</property>
<property name="startDelay" value="1000" />
<property name="repeatInterval" value="0" />
<property name="repeatCount" value="0" />
</bean> <!-- 最终启动的配置 -->
<bean id="startQuertz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="runTime" />
<ref bean="loginTime" />
</list>
</property>
</bean>
</beans>
其中配置任务的定时执行的有2个类可供选择:
org.springframework.scheduling.quartz.CronTriggerBean
org.springframework.scheduling.quartz.SimpleTriggerBean
CronTriggerBean类的主要属性:
jobDetail:目标执行job的bean
cronExpression:一个表达式,主要配置多久循环一次
SimpleTriggerBean的主要属性:
jobDetail:目标执行job的bean
startDelay:第一次执行的时间,延迟多久执行
repeatInterval:任务执行周期
repeatCount:执行次数
任务类BoHeartTask.java
package com.tf.user.util; import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; public class BoHeartTask {
private static Log log = LogFactory.getLog(BoHeartTask.class); private String heartHref;
private String loginHref; public void setLoginHref(String loginHref) {
this.loginHref = loginHref;
} public void setHeartHref(String heartHref) {
this.heartHref = heartHref;
} public void doFirstLogin() throws IOException{
URL url = new URL(loginHref);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setReadTimeout(30000);
con.connect();
int state = con.getResponseCode();//网页状态码 String logStr = "----BO登陆连接,状态码:"+state+",时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
System.out.println(logStr);
log.info(logStr);
} public void doHeart() throws IOException{
URL url = new URL(heartHref);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setReadTimeout(30000);
con.connect();
int state = con.getResponseCode();//网页状态码 String logStr = "----心跳链接BO,状态码:"+state+",时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
System.out.println(logStr);
log.info(logStr);
}
}
cronExpression配置说明
字段 | 允许值 | 允许的特殊字符 | ||
---|---|---|---|---|
秒 |
0-59 |
, - * / |
||
分 |
0-59 |
, - * / |
||
小时 |
0-23 |
, - * / |
||
日期 |
1-31 |
, - * ? / L W C |
||
月份 |
1-12 或者 JAN-DEC |
, - * / |
||
星期 |
1-7 或者 SUN-SAT |
, - * ? / L C # |
||
年(可选) |
留空, 1970-2099 |
, - * / |
表达式 | 意义 | |
---|---|---|
"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触发 |
星期的简写:
周一 MON 周二 TUE 周三 WED 周四 THU 周五FRI 周六 SAT 周日 SUN
特殊字符 | 意义 | |
---|---|---|
* |
表示所有值; |
|
? |
表示未说明的值,即不关心它为何值; |
|
- |
表示一个指定的范围; |
|
, |
表示附加一个可能值; |
|
/ |
符号前表示开始时间,符号后表示每次递增的值; |
|
L("last") |
("last") "L" 用在day-of-month字段意思是 "这个月最后一天";用在 day-of-week字段, 它简单意思是 "7" or "SAT"。如果在day-of-week字段里和数字联合使用,它的意思就是 "这个月的最后一个星期几" – 例如: "6L" means "这个月的最后一个星期五". 当我们用“L”时,不指明一个列表值或者范围是很重要的,不然的话,我们会得到一些意想不到的结果。 |
|
W("weekday") |
只能用在day-of-month字段。用来描叙最接近指定天的工作日(周一到周五)。例如:在day-of-month字段用“15W”指“最接近这个月第15天的工作日”,即如果这个月第15天是周六,那么触发器将会在这个月第14天即周五触发;如果这个月第15天是周日,那么触发器将会在这个月第16 天即周一触发;如果这个月第15天是周二,那么就在触发器这天触发。注意一点:这个用法只会在当前月计算值,不会越过当前月。“W”字符仅能在day- of-month指明一天,不能是一个范围或列表。也可以用“LW”来指定这个月的最后一个工作日。 |
|
# |
只能用在day-of-week字段。用来指定这个月的第几个周几。例:在day-of-week字段用"6#3"指这个月第3个周五(6指周五,3指第3个)。如果指定的日期不存在,触发器就不会触发。 |
|
C |
指和calendar联系后计算过的值。例:在day-of-month 字段用“5C”指在这个月第5天或之后包括calendar的第一天;在day-of-week字段用“1C”指在这周日或之后包括calendar的第一天。 |
在MONTH和Day Of Week字段里对字母大小写不敏感
使用quartz进行容器启动时登陆接口服务器和接口服务器进行心跳连接的更多相关文章
- Spring在Web容器启动时执行初始化方法
需求:在tomcat启动时开启一个定时任务. 想法:容器启动时执行方法,最容易想到的就是servlet中可以配置load-on-startup,设置一个正整数也就可以随容器一起启动. 问题:上面的方法 ...
- SpringMVC——Servlet容器启动时初始化SpringMVC应用的原理
在 Servlet 3.0标准中含有一个 ServletContainerInitializer接口,所有实现了这个接口的类会在容器启动的时候得到一个通知,并且会调用其 onStartup()方法,这 ...
- 运行docker容器镜像2(指定容器启动时启动的脚本)
docker中启动容器有以下两种情况. 第一种是通过 # docker run containerid 启动一个容器. 第二种是重新启动已经关闭的容器. # docker start containe ...
- Docker容器启动时初始化Mysql数据库
1. 前言 Docker在开发中使用的越来越多了,最近搞了一个Spring Boot应用,为了方便部署将Mysql也放在Docker中运行.那么怎么初始化 SQL脚本以及数据呢? 我这里有两个传统方案 ...
- spring 在web容器启动时执行初始化方法
开发框架:spingMVC+myBatis 解决方案:给web容器添加一个Listener类,在容器启动的时候执行Listener的“初始化”方法,在这个初始化方法中执行查询数据库的所有操作,然后将数 ...
- docker 容器启动时设置环境变量source
镜像启动时,自动执行的是~/.bashrc文件,所以,环境变量需要配置在该文件内,这样镜像启动时,可自动执行该文件,使环境变量生效. vi ~/.bashrc ------------------- ...
- docker容器启动时执行脚本 run /bin/bash执行多条指令
搜了很多资料发现并未解决,以下方法失败!求大神评论给出完美方案 1.首先需要编写需要启动的脚本,并将脚本放在 /etc/init.d/目录下 如:cs.sh 2.修改权限 3.chkconfig -- ...
- 项目中使用了个quartz包,启动时提示Quartz version update check failed
<span style="font-family: Arial, Helvetica, sans-serif;">2015-09-13 00:12:02 Abstrac ...
- SpringMVC原理解析-Servlet容器启动时初始化SpringMVC应用的原理
随机推荐
- .Net高级技术——IDisposable
IDisposable概述 GC(垃圾收集器)只能回收托管(Managed)内存资源,对于数据库连接.文件句柄.Socket连接等这些资源(非托管资源,UnManaged)就无能为例,必须程序员自己控 ...
- asp.net MVC 3/4 equivalent to a response.filter
am in a need to intercept all of the html that will be sent to the browser and replace some tags tha ...
- Spring Boot1.5X升级到2.0指南
原文:https://www.jianshu.com/p/3494c84b4be3 前言 Spring Boot已经发布2.0有4个月多,多了很多新特性,一些坑也慢慢被填上,最近有空,就把本博客中Sp ...
- 汉字转拼音的Java类库——JPinyin
原文:http://blog.csdn.net/stuxuhai/article/details/8932715 [JPinyin主要特性]1.准确.完善的字库:Unicode编码从4E00-9FA5 ...
- 记录一次apache错误:“child pid 29023 exit signal Segmentation fault (11)”
目前做了一台公网的测试机,主要是 php 5.3.3 版本,是 browser --> nginx --> apache --> php 今天因为想要安装一个商城,要求需要 P ...
- mac 拷贝文件时报错 8060 解决方案
解决如下: 即某文件夹下出现多重子目录,级数很多,删除多余的子文件夹即可. 至于如何产生的,有人说是xcode升级导致,不过没有见证 .我的不属于这类情况的. (参见:http://macosx.co ...
- Gradle在Windows环境与Linux上配置有哪些不同?
我的开发环境:Windows + Android Studio + Gradle 2.8 all + Jenkins 公司CI 服务器环境: Linux + Gradle 2.10 bin + Jen ...
- [翻译] 极具动感的 FRDLivelyButton
FRDLivelyButton https://github.com/sebastienwindal/FRDLivelyButton FRDLivelyButton is a simple UIBut ...
- 信号处理篇alarm ferror kill mkfifo pause pclose perror pipe popen sigaction sigaddset sigdelset sigemptyset signal sleep strerror
alarm(设置信号传送闹钟) 相关函数 signal,sleep 表头文件 #include<unistd.h> 定义函数 unsigned int alarm(unsigned int ...
- Coursera课程《大家的python》(Python for everyone)课件
You can access the Google Drive containing all of the current and in-progress lecture slides for thi ...