`

定时任务&&找出两个list的不同

    博客分类:
  • Java
 
阅读更多
/*-------------------------application-context.xml------------------------------*/
<?xml version="1.0" encoding="UTF-8"?>
<beans  
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc" 
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:jee="http://www.springframework.org/schema/jee"
	
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
		http://www.springframework.org/schema/jdbc 
		http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
		http://www.springframework.org/schema/jee 
		http://www.springframework.org/schema/jee/spring-jee-3.0.xsd ">
		
	<!-- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> -->
		<!-- Connection Info -->
		<!-- Oracle
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
		<property name="url" value="jdbc:oracle:thin:@192.168.13.105:1521:acuems" />
		<property name="username" value="emsuser" />
		<property name="password" value="123456" />
		-->
		<!-- mysql 
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/eds?useUnicode=true&amp;characterEncoding=UTF-8" />
		<property name="url" value="jdbc:mysql://192.168.13.102:3306/eds?useUnicode=true&amp;characterEncoding=UTF-8" />
		<property name="username" value="root" />
		<property name="password" value="123456" /> -->
		
		<!-- SQLServer -->
		<!-- <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
		<property name="url" value="jdbc:sqlserver://192.168.13.104\\MSSQLSERVER:1433;DatabaseName=acuems"/>
		<property name="username" value="sa" />
		<property name="password" value="123456" />  -->
		<!-- Connection Pooling Info 
		<property name="maxActive" value="50" />
		<property name="maxIdle" value="200" />
		<property name="defaultAutoCommit" value="false" />
		<property name="timeBetweenEvictionRunsMillis" value="3600000"/>
		<property name="minEvictableIdleTimeMillis" value="3600000"/>-->
	<!-- </bean> -->
	<!-- 以下三个数据源是为了在处理报警数据时,把报警记录、短信、邮件放到一个事务里, 这三个数据源是在tomcat下配置的,需要修改tomcat/conf/context.xml,并在tomcat/lib下添加必要的jar,这两个资源在jtaresources里-->
    <jee:jndi-lookup id="edsDS" jndi-name="java:comp/env/jdbc/edsDS" />
    
    <jee:jndi-lookup id="smDS" jndi-name="java:comp/env/jdbc/smDS" />
    
    <jee:jndi-lookup id="mailDS" jndi-name="java:comp/env/jdbc/mailDS" />
    
	<bean id="springContextHolder" class="com.accu.framework.spring.SpringContextHolder" />
	
	<!-- lishuai acu_scheduleconfig这个表没用了
	<bean id="scheduleInitial" class="com.accu.business.eds.schedule.ScheduleInitial" />
     -->
     
    <!--MyBatis integration with Spring define sqlSessionFactory -->
	<bean id="sqlSessionFactory4EDS" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="configLocation" value="classpath:mybatis-configuration.xml"/>
		<property name="dataSource" ref="edsDS" />
	</bean>
	
	<bean id="mapperScanner4EDS" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.accu.persistence.eds" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory4EDS" />
	</bean>
	
	<bean id="sqlSessionFactory4SM" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="configLocation" value="classpath:mybatis-configuration4sm.xml"/>
		<property name="dataSource" ref="smDS" />
	</bean>
	
	<bean id="mapperScanner4SM" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.accu.persistence.sm" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory4SM" />
	</bean>
	
	<bean id="sqlSessionFactory4Mail" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="configLocation" value="classpath:mybatis-configuration4mail.xml"/>
		<property name="dataSource" ref="mailDS" />
	</bean>
	
	<bean id="mapperScanner4Mail" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.accu.persistence.mail" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory4Mail" />
	</bean>
	
	<!-- enable autowire -->
    <context:annotation-config />
	<tx:annotation-driven transaction-manager="transactionManager" />
	
	<!-- 扫描service -->
	<context:component-scan base-package="com.accu.**.impl" />
    
	<!-- transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" />
	
	<tx:annotation-driven transaction-manager="transactionManager" />
	
	<!-- 定时任务 for 子系统更新数据 -->  
	<bean name="updateSqlTable"  
        class="org.springframework.scheduling.quartz.JobDetailBean">  
        <property name="jobClass" value="com.accu.business.eds.updateSqlTable.updateSqlTableImpl" />  
    </bean>
    <bean name="systemTask"  
        class="org.springframework.scheduling.quartz.JobDetailBean">  
        <property name="jobClass" value="com.accu.business.eds.task.impl.TaskForSubSystemImpl" />  
    </bean>
    <bean name="warningTask"  
        class="org.springframework.scheduling.quartz.JobDetailBean">  
        <property name="jobClass" value="com.accu.business.eds.warning.WarningPushProcessor" />  
    </bean> 
    <bean name="reportTask"  
        class="org.springframework.scheduling.quartz.JobDetailBean">  
        <property name="jobClass" value="com.accu.business.dms.task.ReportExportTaskImpl" />  
    </bean> 
    <bean name="mailTask"  
        class="org.springframework.scheduling.quartz.JobDetailBean">  
        <property name="jobClass" value="com.accu.controller.eds.report.MailReport" />  
    </bean>  
	<!-- 触发器 -->  
	<bean id="updateSqlTableTrigger"  
        class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <!-- 指向我们的任务 -->  
        <property name="jobDetail" ref="updateSqlTable" />  
        <!--  从30秒开始,每1分钟执行一次 -->  
        <property name="cronExpression" value="30 */1 * * * ?" />  
    </bean>
    <bean id="cronTrigger"  
        class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <!-- 指向我们的任务 -->  
        <property name="jobDetail" ref="systemTask" />  
        <!--  从30秒开始,每1分钟执行一次 -->  
        <property name="cronExpression" value="30 */1 * * * ?" />  
    </bean>  
    <bean id="warningTrigger"  
        class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <!-- 指向我们的任务 -->  
        <property name="jobDetail" ref="warningTask" />  
        <!--  从30秒开始,每1分钟执行一次 -->  
        <property name="cronExpression" value="30 */1 * * * ?" />  
    </bean>  
    <bean id="reportTrigger"  
        class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <!-- 指向我们的任务 -->  
        <property name="jobDetail" ref="reportTask" />  
        <!--  从30秒开始,每1分钟执行一次 -->  <!-- 0 0 */1 * * ? 每小时执行一次 -->
        <property name="cronExpression" value="30 */1 * * * ?" />  
    </bean> 
    <bean id="mailTrigger"  
        class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <!-- 指向我们的任务 -->  
        <property name="jobDetail" ref="mailTask" />  
        <!--  每周一1时执行 -->  
        <property name="cronExpression" value="0 */5 * ? * *" /> <!-- 0 0 0 ? * MON --> 
    </bean>  
	<!-- 调度器  -->  
    <bean  
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        <property name="triggers">  
            <list>  
                <!--  触发器列表 -->  
                <ref bean="cronTrigger" />
                <!-- <ref bean="updateSqlTableTrigger" />  --> 
                <!-- <ref bean="warningTrigger" /> -->
                <!-- <ref bean="reportTrigger" /> -->
                <!--  <ref bean="mailTrigger" />     -->
            </list>  
        </property>  
       <!-- <property name="configLocation" value="classpath:quartz.properties" />    --> 
    </bean>
</beans> 
/*----------------------------updateSqlTableImpl.java---------------------------*/
package com.accu.business.eds.updateSqlTable;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.accu.business.pms.measureparamsettting.MeasureDeviceWebService;
import com.accu.common.util.FileUtils;
import com.accu.framework.spring.SpringContextHolder;
import com.accu.framework.webservice.AcuWebServiceClient;
import com.accu.persistence.eds.mapper.MetersMapper;
import com.accu.persistence.eds.mapper.MeasureParamMapper;
import com.accu.persistence.pms.beans.MeasureParam;
import com.accu.persistence.pms.beans.Meters;

public class updateSqlTableImpl implements org.quartz.Job{
	private static Logger log = Logger.getLogger(updateSqlTableImpl.class);
	
	private static List<Meters> theDiffMeterList(List<Meters> a,List<Meters> b,Boolean isAdd){
		List<Meters> diff = new ArrayList<Meters>();
		List<Meters> tmpa = new ArrayList<Meters>(Arrays.asList(new Meters[a.size()]));
		Collections.copy(tmpa, a);
		
		List<Meters> tmpb = new ArrayList<Meters>(Arrays.asList(new Meters[b.size()]));
		Collections.copy(tmpb, b);
		
		if(isAdd){
			tmpa.removeAll(tmpb);
			for(Meters u : tmpa){
				diff.add(u);
			}
		}else{
			tmpb.removeAll(tmpa);
			for(Meters u : tmpb){
				diff.add(u);
			}
		}
		
		return diff;
	}
	
	private static List<MeasureParam> theDiffMPList(List<MeasureParam> a,List<MeasureParam> b,Boolean isAdd){
		List<MeasureParam> diff = new ArrayList<MeasureParam>();
		List<MeasureParam> tmpa = new ArrayList<MeasureParam>(Arrays.asList(new MeasureParam[a.size()]));
		Collections.copy(tmpa, a);
		
		List<MeasureParam> tmpb = new ArrayList<MeasureParam>(Arrays.asList(new MeasureParam[b.size()]));
		Collections.copy(tmpb, b);
		
		if(isAdd){
			tmpa.removeAll(tmpb);
			for(MeasureParam u : tmpa){
				diff.add(u);
			}
		}else{
			tmpb.removeAll(tmpa);
			for(MeasureParam u : tmpb){
				diff.add(u);
			}
		}
		
		return diff;
	}
	
	public void updateMeterTab(){
		String wsPath = FileUtils.getProperties("accuwebservice", "measureDeviceWebService");
		AcuWebServiceClient<MeasureDeviceWebService> acu = new AcuWebServiceClient<MeasureDeviceWebService>(wsPath, MeasureDeviceWebService.class);
		MeasureDeviceWebService mdw = acu.getServiceClass();
		List<Meters> pms_mList = mdw.getAllMeters();
		MetersMapper mmapper =  SpringContextHolder.getBeanbyClass(MetersMapper.class);
		List<Meters> dms_mList = mmapper.queryMeters();
		List<Meters> res = theDiffMeterList(pms_mList,dms_mList,true);
		List<Meters> res2 = theDiffMeterList(pms_mList,dms_mList,false);
		if(res2.size()>0){
			for(Meters m1 : res2){
				int upd = mmapper.deleteMeter(m1.getGuidmeterid());
				log.info(upd > 0 ? "仪表删除成功" : "仪表删除失败");
			}
		}
		if(res.size()>0){
			for(Meters m : res){
				int add = mmapper.insertMeter(m);
				log.info(add > 0 ? "仪表插入成功" : "仪表插入失败");
			}
		}	

	}
	 
	public void updateParamTab() {
		String wsPath = FileUtils.getProperties("accuwebservice", "measureDeviceWebService");
		AcuWebServiceClient<MeasureDeviceWebService> acu = new AcuWebServiceClient<MeasureDeviceWebService>(wsPath, MeasureDeviceWebService.class);
		MeasureDeviceWebService mdw = acu.getServiceClass();
		List<MeasureParam> pms_mpList = mdw.getAllMeasureParam();
		MeasureParamMapper measureParamMapper =  SpringContextHolder.getBeanbyClass(MeasureParamMapper.class);
		List<MeasureParam> dms_mpList = measureParamMapper.queryMeasureParams();
		List<MeasureParam> res = theDiffMPList(pms_mpList,dms_mpList,true);
		List<MeasureParam> res2 = theDiffMPList(pms_mpList,dms_mpList,false);
		if(res2.size()>0){
			for(MeasureParam m1 : res2){
				int del = measureParamMapper.deleteMeasureParam(m1.getGuidMeasureParamId());
				log.info(del > 0 ? "测量参数删除成功" : "测量参数删除失败");
			}
		}
		if(res.size()>0){
			for(MeasureParam m : res){
				int add = measureParamMapper.insertMeasureParam(m);
				log.info(add > 0 ? "测量参数插入成功" : "测量参数插入失败");
			}
		}	
	}
	
	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		updateMeterTab();
		updateParamTab();
	}

} 
分享到:
评论

相关推荐

    妙计旅行面试题.pdf_python面试

    3. 给定两个list A和B,如何找出相同元素和不同元素? 相同元素:`print(set(A) & set(B))` 不同元素:`print(set(A) ^ set(B))` 4. 如何反转字符串? `name = 'liulidong'; result = name[::-1]; print(result)...

    Java并发编程(学习笔记).xmind

    找出可利用的并行性 某些应用程序中存在比较明显的任务边界,而在其他一些程序中则需要进一步分析才能揭示出粒度更细的并行性 任务的取消和关闭 任务取消 停止基于线程的服务 处理非正常的线程...

    多线程集合及IO面试

    3. **找出重的小球问题**: - 对于这个问题,可以通过两次称重来解决: 1. 将8个小球分成三组,两组各有3个球,一组有2个球。 2. 先将两个含有3个球的组进行称重比较。如果重量相同,则较重的小球一定在未被称重...

    自动玻璃双边磨的fx程序.rar

    这些工具可以帮助工程师高效地找出和修复问题。 7. **通信网络**:现代PLC通常支持以太网或其他通信协议,以便与其他设备或中央控制系统交换数据。这在监控生产效率、故障报警或远程控制方面非常有用。 8. **人机...

    trubolinux系统管理认证

    A.cron用于执行周期性任务,如定时备份或清理日志。 B.cron任务只能由root用户设置。 C.cron任务无法在特定时间触发执行。 D.cron任务的设置不会保存,每次重启系统后都需要重新设置。 A 系统管理 20 在Linux系统...

    非常好的ExcelVBA编程问答.pdf

    9. **组合框内容同步**:可以利用VBA的事件处理程序(如`ComboBox_Change`)来同步两个组合框的内容,根据一个组合框的选择更新另一个。 10. **单元格闪烁**:通过改变单元格的字体颜色和边框样式,实现视觉上的...

    JS动态可控制左右滚动的图片

    为了实现左右滚动,你需要创建两个按钮或使用滑动手势来触发`nextSlide`和一个类似的`prevSlide`函数,后者将把当前图片滑向左侧,让前一张图片从右侧滑入。 此外,还可以增加自动播放功能,定时切换图片。这可以...

    内存溢出及锁表问题的分析与解决.doc

    在一个项目中,使用两个数据库连接,其中专用于发送短信的数据库连接使用 DBCP 连接池管理,用户为不将短信发出,有意将数据库连接用户名改错,使得日志中有许多数据库连接异常的日志,一段时间后,就出现“OutOf...

    Sample_PLC_三菱PLC_MXComponent_源码.zip

    因此,我们可以围绕三菱PLC和MXComponent这两个关键概念来探讨相关知识点。 1. **三菱PLC**: - **基本介绍**:三菱PLC是日本三菱电机公司生产的一种工业自动化控制设备,广泛应用于生产线、机械设备的控制。它...

    Linux命令全称,包括SQL等等

    31. **comm=common**:找出两个已排序文件的共同行。 32. **cp=CoPy**:复制文件或目录。 33. **cpio=CoPyInandOut**:一种用于备份和恢复文件的工具。 34. **cpp=CPreProcessor**:C语言预处理器。 35. **cron=...

    Linux命令术语全称

    - **含义**:比较两个已排序的文件,并找出它们的共同部分。 - **用途**:查找两个文件之间的公共行。 32. **cp=CoPy** - **含义**:复制文件或目录。 - **用途**:将文件从一个位置复制到另一个位置。 33. **...

    vc++ 应用源码包_6

    压缩包内有两个源码包,一个是注册机源程序,另一个是解密机的源程序,一套完整的参考实例。 VC+MapX源码含GPS跟踪演示 VC3D 利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自...

    vc++ 应用源码包_1

    压缩包内有两个源码包,一个是注册机源程序,另一个是解密机的源程序,一套完整的参考实例。 VC+MapX源码含GPS跟踪演示 VC3D 利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自...

    vc++ 应用源码包_5

    压缩包内有两个源码包,一个是注册机源程序,另一个是解密机的源程序,一套完整的参考实例。 VC+MapX源码含GPS跟踪演示 VC3D 利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自...

    vc++ 应用源码包_2

    压缩包内有两个源码包,一个是注册机源程序,另一个是解密机的源程序,一套完整的参考实例。 VC+MapX源码含GPS跟踪演示 VC3D 利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自...

    vc++ 应用源码包_3

    压缩包内有两个源码包,一个是注册机源程序,另一个是解密机的源程序,一套完整的参考实例。 VC+MapX源码含GPS跟踪演示 VC3D 利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自...

    详细的java基础总结

    Java提供了强大的调试工具,如Eclipse、IntelliJ IDEA等IDE内置的调试功能,可以帮助开发者找出并解决程序中的错误。 #### 第七章:常用类 - **基本数据类型的包装类** Java为每种基本类型都提供了对应的包装类...

    数据库操作语句大全(sql)

    UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 ...

    Redis面试知识点.pdf

    复制过程主要包括两个阶段:全量复制和增量复制。全量复制发生在新加入的从节点或主节点重启时,增量复制则是在全量复制完成后发生的更新同步。 #### 24、Redis集群最大节点个数是多少? Redis集群的最大节点数为...

Global site tag (gtag.js) - Google Analytics