直接贴代码。加上自己本机上应该就没问题。有问题可以留言或者私信。
import com.x.controller.option.ThreadForLoadData;
import com.x.dao.QryDataDictDAO;
import com.x.domain.DataDictDomain;
import com.x.util.UserCQCCertificateApi;
import org.springframework.web.context.support.WebApplicationContextUtils;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MyServletContextListener implements ServletContextListener{
public static Map<String,String> dict_map = new HashMap();
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
System.out.println("加载业务字典");
QryDataDictDAO qryDataDictDAO = (QryDataDictDAO) WebApplicationContextUtils.getWebApplicationContext(arg0.getServletContext()).getBean("QryDataDictDAO");
try {
//加载数据字典的业务逻辑
List<DataDictDomain> DataDict = new ArrayList<>();
DataDict = qryDataDictDAO.QryDataDict();
for(int i = 0 ; i < DataDict.size(); i ++){
dict_map.put(DataDict.get(i).getDictNo()+"_"+DataDict.get(i).getDictUnit(),DataDict.get(i).getDictData());
}
System.out.println("加载业务字典成功!");
} catch (Exception e) {
System.out.println("加载业务字典失败!"+e);
e.printStackTrace();
}
//项目启动时执行一次
// UserCertDataApi.connect();
// UserCQCCertificateApi.connect();
// System.out.println("api 连接成功");
//启动线程,该线程每5min执行一次。
ThreadForLoadData threadForLoadData = new ThreadForLoadData();
// Thread thread = new Thread(threadForLoadData);
threadForLoadData.start();
//启动线程2,该线程只执行一次。
/* Thread2LoadOtherData thread2LoadOtherData = new Thread2LoadOtherData();
Thread thread2 = new Thread(thread2LoadOtherData);
thread2.start();*/
}
}
package com.x.controller.option;
import com.x.util.SingleHungaryClient;
import lombok.SneakyThrows;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Logger;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Properties;
import static com.s.controller.option.OptionLoadDataUtils.optionLoadDataUtils;
import static com.s.exception.ExceptionInfo.getExceptionInfo;
import static com.s.tcp.TcpClient.tcpClient;
public class ThreadForLoadData extends Thread {
private static Logger logger = (Logger) LogManager.getLogger( ThreadForLoadData.class.getName());
private static long sleepTime1;
private static long sleepTime2;
static
{
try {
//获取当前类加载器
ClassLoader classLoader= ThreadForLoadData.class.getClassLoader();
//通过当前累加载器方法获得 文件config.properties的一个输入流
InputStream is=classLoader.getResourceAsStream("config.properties");
//创建一个Properties 对象
Properties properties=new Properties();
//加载输入流
properties.load(is);
sleepTime1=Integer.parseInt(properties.getProperty("thread.sleepTime1"));
sleepTime2=Integer.parseInt(properties.getProperty("thread.sleepTime2"));
}
catch (IOException e) {
e.printStackTrace();
}
}
@SneakyThrows
public void run() {
while (!this.isInterrupted()) {// 线程未中断执行循环 true
try {
Thread.sleep(sleepTime1); //每隔5 min执行一次
optionLoadDataUtils.loadData();
} catch (Exception e) {
//短信通知,tcp客户端
tcpClient.phoneExcepNotify();
System.out.println("线程Thread: " + this.getName() + " is Interrupted !!!" + " TIME: "
+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()));
// logger.error(e.getMessage());
logger.error(getExceptionInfo(e));
// e.printStackTrace(); //打印输出到控制台,可能会导致字符串常量池用尽.造成锁死,建议用logger
}finally {
// System.out.println(" TIME1:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()));
Thread.sleep(Long.valueOf(sleepTime2)); //每隔55min执行一次,3300000ms
// System.out.println(" TIME2:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()));
}
}
}
}