`

SSH配置双数据源

阅读更多

要求:

项目默认数据源是Sqlserver,在Sqlserver数据库中创建一个表A,表结构与Oracle数据库中的表A一样,每天读取Oracle数据库中表A数据插入到Sqlserver数据库表A中

 

1. applicationContext-hibernate.xml配置增加了Oracle数据源的配置代码

 

<!-- Oracle 数据源 -->
    <bean id="dataSourceOracle" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    	<property name="driverClass" 		value="${jdbc.oracle.driverClassName}"/>
        <property name="jdbcUrl" 			value="${jdbc.oracle.url}"/>
        <property name="user" 				value="${jdbc.oracle.username}"/>
        <property name="password" 			value="${jdbc.oracle.password}"/>   
    	<property name="initialPoolSize" 	value="10"/>
        <property name="minPoolSize" 		value="10"/>
        <property name="maxPoolSize" 		value="50"/>
        <property name="checkoutTimeout" 	value="5000"/>
        <property name="maxIdleTime" 		value="1800"/>
        <property name="idleConnectionTestPeriod" value="3000"/>
        <property name="acquireIncrement" 	value="5"/>          
    </bean>
    <bean id="sessionFactoryOracle" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSourceOracle"/>
        <property name="annotatedClasses">
            <list>                
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
                <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>
                <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>
            </props>
        </property>
    </bean>

 

 

2. applicationContext-quartz.xml 定时任务重点代码:

 

<bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
           <list>                
                <!-- 读取Oracle触发器 -->
                <ref bean="readOracleDataCronTrigger"/>
            </list>
        </property>
        <property name="configLocation" value="classpath:conf/quartz.properties"/>
    </bean>    
    <!-- 【【【【读取Oracle数据】】】】 -->
    <bean id="readOracleDataCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="readOracleDataJobDetail"/>
        <!--每天23:10执行一次-->
        <property name="cronExpression" value="0 10 23 * * ?"/>
    </bean>
    <bean id="readOracleDataJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="readOracleDataInsertSqlserverTask"/>
        <property name="targetMethod" value="readOracleDataInsertSqlserver"/>
    </bean>    
    <bean id="readOracleDataInsertSqlserverTask" class="alpha.vehicle.quartz.ReadOracleDataInsertSqlserverTask">
    	<!-- 配置Oracle的SessionFactory -->
    	<property name="sessionFactory">
			<ref bean="sessionFactoryOracle" />
		</property>
		<!-- 配置Sqlserver的SessionFactory -->
		<property name="sessionFactorySqlserver">
			<ref bean="sessionFactory" />
		</property>
    </bean>

 

 

3. ReadOracleDataInsertSqlserverTask.java读取数据插入数据类:

 

private static DateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
	//默认的SessionFactory是Oracle数据源的
	//这里要用到Sqlserver数据源的SessionFactory
	private SessionFactory sessionFactorySqlserver;
	public SessionFactory getSessionFactorySqlserver() {
		return sessionFactorySqlserver;
	}
	public void setSessionFactorySqlserver(SessionFactory sessionFactorySqlserver) {
		this.sessionFactorySqlserver = sessionFactorySqlserver;
	}
	
	//执行数据读取并插入
    public void readOracleDataInsertSqlserver(){
    	logger.info("oracle到sqlserver数据开始...");
    	batchInsert();
    	logger.info("oracle到sqlserver数据结束...");
    }  
    
	//得到sqlserver数据源的template
	protected HibernateTemplate getHibernateTemplateSqlServer(){
		HibernateTemplate template = new HibernateTemplate(sessionFactorySqlserver);
		return template;
	}
	//得到sqlserver中Realrec的最大序号
	public int getMaxRecBySqlserverRealrec(){		
		Long count = (Long) getHibernateTemplateSqlServer().execute(new HibernateCallback(){
			@Override
			public Object doInHibernate(Session session)
					throws HibernateException, SQLException {
				Query query = session.createQuery("select max(realrec.rec) from Realrec realrec");
				return query.uniqueResult();
			}});
		return count==null?0:count.intValue();
	}
	//得到Oracle的REALREC表中的10条记录
	@SuppressWarnings("unchecked")
	public List<Object[]> getRealrecByOracleRealrec(final int maxRecBySqlserverRealrec){
    	return getHibernateTemplate().executeFind(new HibernateCallback(){
			@Override
			public Object doInHibernate(Session session)
					throws HibernateException, SQLException {		
				String sql = "SELECT REC, DESK, OILNUM, PRICE, LIT, MONEY, RQ, CUSCRDNUM, MON, TRACKNUM, UNCODE, UNIT, RESULT  FROM REALREC WHERE REC > "+maxRecBySqlserverRealrec+" ORDER BY REC";
				logger.info("========>"+sql);
				Query query = session.createSQLQuery(sql);
				return query.list();
			}});
    }
	
    //往sqlserver中添加数据
	public void batchInsert() {	
		getHibernateTemplateSqlServer().execute(new HibernateCallback(){
			@Override
			public Object doInHibernate(Session session)
					throws HibernateException, SQLException {				
				//sqlserver的Realrec表中最大序号(最后一条记录序号(总记录数))
				int maxRecBySqlserverRealrec = getMaxRecBySqlserverRealrec();
				//Oracle的Realrec表中的10条记录
				List<Object[]> listByOracleRealrec = getRealrecByOracleRealrec(maxRecBySqlserverRealrec);				
				Realrec realrec = null;
				int i = 0;
				//循环插入到Sqlserver中去				
				for(Object[] realrecByOracle : listByOracleRealrec){
					i++;
					realrec = new Realrec();					
					realrec.setRec(realrecByOracle[0] == null?null:Long.valueOf(realrecByOracle[0].toString()));
					realrec.setDesk(realrecByOracle[1] == null?null:Long.valueOf(realrecByOracle[1].toString()));
					realrec.setOilNum(realrecByOracle[2] == null?null:realrecByOracle[2].toString());
					realrec.setPrice(realrecByOracle[3] == null?null:Double.valueOf(realrecByOracle[3].toString()));
					realrec.setLit(realrecByOracle[4] == null?null:Double.valueOf(realrecByOracle[4].toString()));
					realrec.setMoney(realrecByOracle[5] == null?null:Double.valueOf(realrecByOracle[5].toString()));
					try {
						realrec.setRq(realrecByOracle[6] == null?null:dateformat.parse(realrecByOracle[6].toString()));
					} catch (ParseException e) {
						e.printStackTrace();
					}
					realrec.setCuscrdNum(realrecByOracle[7] == null?null:realrecByOracle[7].toString());
					realrec.setMon(realrecByOracle[8] == null?null:Double.valueOf(realrecByOracle[8].toString()));
					realrec.setTrackNum(realrecByOracle[9] == null?null:realrecByOracle[9].toString());
					realrec.setUnCode(realrecByOracle[10] == null?null:realrecByOracle[10].toString());
					realrec.setUnit(realrecByOracle[11] == null?null:realrecByOracle[11].toString());
					realrec.setResult(realrecByOracle[12] == null?null:realrecByOracle[12].toString());
					getHibernateTemplateSqlServer().save(realrec);
					if(i % 50 == 0){
						session.flush();
						session.clear();
					}
				}
				return null;
			}});
	}

 

0
0
分享到:
评论

相关推荐

    基于python web开发的简易订单系统+源代码+文档说明

    进入hjs_cms/install目录下,修改好远程服务器的业务配置环境(persion.conf)和远程服务器的ssh配置(secret.py),并行: ``` python publish_hjs_cms.py deploy $srv_ip ``` 注意: 1. 执行publish_hjs_cms.py...

    RouterOS2.9.6.with.crack及配置动画

    对源MAC、IP地址、端口、IP协议、协议(ICMP、TCP、MSS等)、接口、对内部的数据包和连接作标记、ToS 字节、内容过滤、顺序优先与数据频繁和时间控制、包长度控制... l 路由 – 静态路由;多线路平衡路由;基于策略...

    JAVA上百实例源码以及开源项目源代码

    Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...

    计算服务器指标要求.doc

    主频不低于 2.0GHz " " " " "内存 " "配置384G 12*32GB RDIMM, 2666MT/s, 双列,支持16根插槽 "是 " " " "内存类型" "支持RDIMM、LRDIMM、NVDIMM内存条,提供彩页或官网截图证明 "是 " " " "硬盘 " "配置2个600GB ...

    Linux管理员指南

    件的比较 6 1.3.5 域的概念 6 1.4 小结 7 第2章 按服务器配置安装Linux 8 2.1 安装之前 8 2.1.1 硬件设备 8 2.1.2 服务器主机的规划 9 2.1.3 双引导系统 10 2.1.4 安装方式 11 2.1.5 ...

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    RED HAT LINUX 6大全

    9.1.2 自己构造源代码 156 9.2 服务器运行配置的设置 157 9.2.1 编辑httpd.conf文件 158 9.2.2 .htaccess文件和访问限制 160 9.3 虚拟主机 161 9.3.1 基于地址的虚拟主机 161 9.3.2 基于名字的虚拟主机 162 9.4 日志...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    2.5.7配置SSH用户等效性 2.5.8配置时间同步服务 2.5.9安装cvuqdisk包 2.5.10 CVU验证安装环境 2.6创建ASM磁盘 2.6.1安装ASMLib驱动 2.6.2创建ASMLib磁盘 2.7部署RAC 2.7.1安装Grid Infrastructure 2.7.2...

    低清版 大型门户网站是这样炼成的.pdf

    5.10 多数据源的应用 338 5.11 jdbc的应用 343 5.12 hibernate调用存储过程 343 5.13 xml数据持久化 346 5.14 小结 348 第6章 充分利用spring 2.5的ioc利器统管bean世界 349 6.1 java程序员的春天厚礼—spring...

    java源码包2

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包3

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包4

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...

    数据库审计系统需求说明.docx

    双冗余电源。 2 工作模式 旁路镜像模式部署,不影响数据库性能和网络架构;支持 IPV6环境部署和IPV6 环境下数据库的审计;支持分布式部署,管理中心可实现统一配置、统一报表、 统一查询。 管理中心和探测器都可存储...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    4.1.3 使用WebLogic服务器管理的 数据源 182 4.1.4 使用JBoss服务器管理的数据源 187 4.2 事务和JTA 191 4.2.1 事务的基本概念 191 4.2.2 分布式事务处理、XA规范和 2PC协议 192 4.2.3 使用JTA全局事务保证多 数据库...

    网络安全设备技术要求.doc

    需" " " " " "提供支持对常见应用服务(FTP、IMAP、SSH、Telnet " " " " " "、SMTP、POP3)和数据库软件(MySQL、Oracle、MSSQL)的口令暴力破解防护功能的配置图并支持" " " " " "同防火墙访问控制规则进行联动; ...

    网络安全设备技术要求(1).doc

    需" " " " " "提供支持对常见应用服务(FTP、IMAP、SSH、Telnet " " " " " "、SMTP、POP3)和数据库软件(MySQL、Oracle、MSSQL)的口令暴力破解防护功能的配置图并支持" " " " " "同防火墙访问控制规则进行联动; ...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

Global site tag (gtag.js) - Google Analytics