1.首先在web.xml文件中配置web监听器
<listener>
<listener-class>com.javacode.timeTask.LzstoneMain</listener-class>
</listener>
2.写定时任务类
package com.javacode.timeTask;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class LzstoneMain implements ServletContextListener{
private Timer timer = null;
public void contextInitialized(ServletContextEvent event){
timer = new Timer();
timer.schedule(new LzstoneTimeTask(),10000,4*1000*60*60);
}
public void contextDestroyed(ServletContextEvent event){
timer.cancel();
}
}
3.写启动定时任务类
package com.javacode.timeTask;
import java.util.TimerTask;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.transaction.annotation.Transactional;
import com.javacode.basic.diClient.service.DiClientService;
@Transactional
public class LzstoneTimeTask extends TimerTask{
public void run() {
try {
// 执行的定时器任务
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:com/config/spring.xml");
DiClientService diClientService = (DiClientService) applicationContext.getBean("DiClientService");
diClientService.modifyTb();
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.写操作接口(DiClientService)
package com.javacode.basic.diClient.service;
/**
* @类名 DiClientService
* @描述 数据同步信息业务操作接口
* @创建者 bafvpl
* @时间 2018-10-16
*/
public interface DiClientService
{
/**
* 数据同步
* @return 返回布尔值,如果存在,则返回true;如果不存在,则返回false
*/
public boolean modifyTb();
}
5.操作接口实现类(DiClientServiceImpl)
package com.javacode.basic.diClient.service;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.javacode.basic.company.dao.CompanyDao;
import com.javacode.basic.company.pojo.Company;
import com.javacode.basic.department.dao.DepartmentDao;
import com.javacode.basic.department.pojo.Department;
import com.javacode.basic.diClient.dao.DiClientDao;
import com.javacode.basic.user.dao.UserDao;
import com.javacode.basic.user.pojo.User;
import com.util.MD5Util;
import com.util.StringUtil;
import com.util.constants.Constant;
/**
* @类名 DiClientServiceImpl
* @描述 数据同步信息业务操作实现类
* @创建者 bafvpl
* @时间 2017-11-15
*/
@Service("DiClientService")
@Transactional
public class DiClientServiceImpl implements DiClientService
{
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource
private DiClientDao diClientDao;
@Resource
private CompanyDao companyDao;
@Resource
private DepartmentDao departmentDao;
@Resource
private UserDao userDao;
@SuppressWarnings("unchecked")
public boolean modifyTb()
{
try{
logger.info("=============数据同步 start==========================");
List<Map<String,Object>> map = diClientDao.selectAll();
for(Map<String,Object> params : map){
JSONObject jsStr = JSONObject.parseObject(params.get("DATA").toString());
JSONArray jsStr2= JSONArray.parseArray(jsStr.get("datas").toString());
if(jsStr2.size() > 0){
Map<String, Object> resultMap = JSON.parseObject(jsStr2.get(0).toString(), Map.class);
if("AA01".equals(params.get("QUEUEID").toString().substring(0, 4))){//公司
//查询是否存在该公司
Company company = companyDao.selectCompanyById(resultMap.get("itemA").toString());
//如果存在,则取出来公司不为空,就更新
if(StringUtil.isNotNullOrBlank(company)){
company.setCompanyName(resultMap.get("dataA").toString());
company.setLastUpdateDate(resultMap.get("lastUpdtDate").toString());
company.setStatus(resultMap.get("status").toString());
company.setSyncTime(StringUtil.parse(new Date(), Constant.PATTERN_LONG_DATE));
companyDao.updateCompany(company);
}else{//否则就插入
company = new Company();
company.setId(resultMap.get("itemA").toString());
company.setCompanyName(resultMap.get("dataA").toString());
company.setLastUpdateDate(resultMap.get("lastUpdtDate").toString());
company.setStatus(resultMap.get("status").toString());
company.setSyncTime(StringUtil.parse(new Date(), Constant.PATTERN_LONG_DATE));
companyDao.insertCompany(company);
}
}else if("HR001".equals(params.get("QUEUEID").toString().substring(0, 5))){//部门
//查询是否存在该部门
Department dept = departmentDao.selectDepartmentById(resultMap.get("itemB").toString());
//如果存在,则取出来部门不为空,就更新
if(StringUtil.isNotNullOrBlank(dept)){
dept.setDepartmentName(resultMap.get("dataA").toString());
dept.setCompanyId(resultMap.get("itemA").toString());
String [] str = resultMap.get("dataB").toString().split("!");
if(str.length > 1){
dept.setUpperDeptId(str[str.length-2]);
}
dept.setLastUpdateDate(resultMap.get("lastUpdtDate").toString());
dept.setStatus(resultMap.get("status").toString());
dept.setSyncTime(StringUtil.parse(new Date(), Constant.PATTERN_LONG_DATE));
departmentDao.updateDepartment(dept);
}else{//否则就插入
dept = new Department();
dept.setId(resultMap.get("itemB").toString());
dept.setDepartmentName(resultMap.get("dataA").toString());
String [] str = resultMap.get("dataB").toString().split("!");
if(str.length > 1){
dept.setUpperDeptId(str[str.length-2]);
}
dept.setCompanyId(resultMap.get("itemA").toString());
dept.setLastUpdateDate(resultMap.get("lastUpdtDate").toString());
dept.setStatus(resultMap.get("status").toString());
dept.setSyncTime(StringUtil.parse(new Date(), Constant.PATTERN_LONG_DATE));
departmentDao.insertDepartment(dept);
}
}else if("HR003".equals(params.get("QUEUEID").toString().substring(0, 5))){//员工
//查询是否存在该公司
User user = userDao.selectUserLabelById(resultMap.get("itemB").toString());
//如果存在,则取出来公司不为空,就更新
if(StringUtil.isNotNullOrBlank(user)){
user.setRealName(resultMap.get("dataA").toString());
user.setCompanyId(resultMap.get("itemA").toString());
user.setDeptId(resultMap.get("dataB").toString());
user.setPostId(resultMap.get("dataC").toString());
user.setPostName(resultMap.get("dataD").toString());
user.setPassword(MD5Util.convertMD5("123456"));
user.setAdmin(false);
if(resultMap.get("status").toString().equals("N")){
user.setEnable(0);
}else{
user.setEnable(1);
}
user.setLastUpdateDate(resultMap.get("lastUpdtDate").toString());
user.setStatus(resultMap.get("status").toString());
user.setSyncTime(StringUtil.parse(new Date(), Constant.PATTERN_LONG_DATE));
userDao.updateUser(user);
}else{//否则就插入
user = new User();
user.setId(resultMap.get("itemB").toString());
user.setRealName(resultMap.get("dataA").toString());
user.setCompanyId(resultMap.get("itemA").toString());
user.setDeptId(resultMap.get("dataB").toString());
user.setPostId(resultMap.get("dataC").toString());
user.setPostName(resultMap.get("dataD").toString());
if(resultMap.get("status").toString().equals("N")){
user.setEnable(0);
}else{
user.setEnable(1);
}
user.setLastUpdateDate(resultMap.get("lastUpdtDate").toString());
user.setStatus(resultMap.get("status").toString());
user.setSyncTime(StringUtil.parse(new Date(), Constant.PATTERN_LONG_DATE));
userDao.insertUser(user);
}
}
diClientDao.updateDiClient(params);
}
}
logger.info("=============数据同步 end==========================");
return true;
}catch(Exception ex){
ex.printStackTrace();
logger.error("=============exception=========================="+ExceptionUtils.getFullStackTrace(ex));
return false;
}
}
}
6.Dao层接口(diClientDao)
package com.javacode.basic.diClient.dao;
import java.util.List;
import java.util.Map;
/**
* @类名 DiClientDao
* @描述 数据同步信息数据库操作接口
* @创建者 bafvpl
* @时间 2017-11-15
*/
public interface DiClientDao
{
/**
* 查找所有未读过的用户信息
* @return 返回信息列表
*/
public List<Map<String,Object>> selectAll();
/**
* 更新数据同步状态,表示已经同步过
* @param map
* @return
*/
public boolean updateDiClient(Map<String,Object> map);
}
7.SQL映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.javacode.basic.diClient.dao.DiClientDao">
<update id="updateDiClient" parameterType="map">
<![CDATA[
update tbdipdi set status = 'Y'
where TIMESTAMP = #{TIMESTAMP}
]]>
</update>
<select id="selectAll" resultType="map">
<![CDATA[
select TIMESTAMP,SERIALNO,QUEUEID,HEADER,DATA,STATUS,PROCESSTIME,DESCRIPTION
from tbdipdi
where status = 'N'
]]>
</select>
</mapper>