- 首先是调度任务类
package timer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class AlarmLogTask {
/*
* 按天执行常量数据
*/
public static long preiod = 24*60*60*1000;
// 周期任务执行方法
public void doTask(){
// TODO 执行周期任务
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
//生成第二天的数据库
calendar.add(Calendar.DAY_OF_MONTH, 1);
String dateString = new SimpleDateFormat("yyyyMMdd_hhmmss").format(calendar.getTime());
/*
* add by wangxy 判断今天是不是月末,月末创建下一个月的log表
*/
excuteSql(dateString);
}
public boolean excuteSql(String dateString){
Connection connection = null;
Statement stmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/alarmlog", "root",
"root");
String sql = "CREATE TABLE `alarmlog"
+ dateString
+ "` ("
+ " `id` int(50) NOT NULL AUTO_INCREMENT,"
+ " `status` int(2) DEFAULT NULL COMMENT '调用状态,0-成功',"
+ " `content` varchar(255) DEFAULT NULL COMMENT '告警内容',"
+ " `transferTime` datetime DEFAULT NULL COMMENT '调用服务时间',"
+ " `level` int(2) DEFAULT NULL COMMENT '告警级别',"
+ " `alarmTime` datetime DEFAULT NULL COMMENT '告警时间',"
+ " PRIMARY KEY (`id`)"
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8; ";
stmt = connection.createStatement();
stmt.execute(sql);
System.out.println("excute success");
} catch (Exception e) {
return false;
} finally {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("excute finally");
}
return true;
}
}
- 任务写好了之后,我们开始写ContextListener。
package listener;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import timer.AlarmLogTask;
public class ScheduleListener implements ServletContextListener {
public static long preiod = 5000;
public static Timer timer = null;
public void contextDestroyed(ServletContextEvent event) {
System.out.println("listener destory start");
timer.cancel();
System.out.println("listener destory end");
}
public void contextInitialized(ServletContextEvent event) {
System.out.println("listener init start");
final AlarmLogTask alarmLogTask = new AlarmLogTask();
//服务启动时,首次去检测是否有当月的log表创建。
alarmLogTask.doTask();
if(timer!=null){
timer = new Timer();
}
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 15);
calendar.set(Calendar.MINUTE, 20);
calendar.set(Calendar.SECOND, 40);
Date date = calendar.getTime();
if(date.before(new Date())){
calendar.add(Calendar.DAY_OF_MONTH, 1);
date = calendar.getTime();
}
Timer timer = new Timer();
TimerTask task = new TimerTask(){
@Override
public void run() {
alarmLogTask.doTask();
}
};
timer.schedule(task, date, preiod);
System.out.println("listener init end");
}
}
- web.xml中进行配置
<listener>
<listener-class>listener.ScheduleListener</listener-class>
</listener>
这样就成功的设置了一个在服务启动时开启的调度任务。