spring定时任务(项目总结)

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>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值