1. 定时任务执行特定操作
1.在tomcat启动时调用这个方法的全路径名
private void start() {
//启动缓存
cacheutil.init();
//初始化数据源
initDB();
//初始化LBQ刷新服务
com.binfo.service.lbq.LbqRefreshData.refreshLBQ();
//当天0点定时上传上天的录播记录的信息
com.binfo.service.lbq.LbqTreeAndGrid.upLoadLbxx();
}
2. 编写具体的操作方法
//每天0点上传昨天的昨天的录播信息数据
public static void upLoadLbxx() {
//开启一个只有一个线程的线程池
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
//执行间隔
long oneDay = 24 * 60 * 60 * 1000;
//初始化延迟
long initDelay = getTimeMillis("15:03:00") - System.currentTimeMillis();
initDelay = initDelay > 0 ? initDelay : oneDay + initDelay;
executor.scheduleAtFixedRate(
//具体执行的线程
new Runnable() {
@Override
public void run() {
//具体上传的方法
writeTxt();
}
},
initDelay,
oneDay,
//计时单位
TimeUnit.MILLISECONDS);
}
/**
* 获取指定时间对应的毫秒数
* @param time "HH:mm:ss"
* @return
*/
private static long getTimeMillis(String time) {
try {
DateFormat dateFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
DateFormat dayFormat = new SimpleDateFormat("yy-MM-dd");
Date curDate = dateFormat.parse(dayFormat.format(new Date()) + " " + time);
return curDate.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}
/**
* 这是具体上传数据的方法
*/
public static void writeTxt() {
try {
//获取昨天的时间
Calendar cal=Calendar.getInstance();
cal.add(Calendar.DATE,-1);
Date d=cal.getTime();
SimpleDateFormat sp=new SimpleDateFormat("yyyy-MM-dd");
String yesterday=sp.format(d);
//获取数据
String sql="select * from JDBHAPP.FAULT_RECORD where FAULTTIME='"+yesterday+"'";
DataTable resultRecord = dbDao.select(sql);
///写入数据
// 相对路径,如果没有则要建立一个新的output.txt文件
File writeName = new File("../temp/mumengxiang.txt");
// 创建新文件,有同名的文件的话直接覆盖
writeName.createNewFile();
try (FileWriter writer = new FileWriter(writeName);
BufferedWriter out = new BufferedWriter(writer)
) {
// \r\n即为换行
//文件头
String headTime=StringUtil.replace(yesterday,"-","");
out.write("<! system=继电保护系统 version=1.0 type=notype code=GBK data=1.0 datetime='"+headTime+"_00:00:00' !>\n" +
"<继电保护系统::"+headTime+"录播记录信息>\r\n");
// 字段名称
out.write("@");
for(int i=0;i<resultRecord.getColumns().size();i++){
out.write(resultRecord.getColumnName(i)+" ");
}
//结束
out.write("\r\n ");
//字段简介
out.write("//主键值 时间戳 录播记录编号 故障时间毫秒值 主站名 变电站名 录播器名 一次设备名 故障识别 故障测距 录波器类型 对策故障记录ID 录波器测距结果 最低故障电压 最大故障电压 A相最大故障电流一次值 B相最大故障电流一次值 C相最大故障电流一次值 零序最大故障电流一次值 故障信息 数据文件是否存在 电压等级 故障记录对应文件名 上传时间\r\n ");
//数据记录
DataRowCollection rows = resultRecord.getRows();
for (DataRow row: rows){
out.write("#");
for (int i = 0;i< 25 ; i++) {
out.write(row.getValue(i)+" ");
}
out.write("\r\n ");
}
//结束
out.write("</继电保护系统::"+headTime+"录播记录信息>");
// 把缓存区内容压入文件
out.flush();
out.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}