`

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
分享到:
评论

相关推荐

    ssh双数据源登录.rar

    在"ssh双数据源登录.rar"这个压缩包中,可能包含的文件有配置文件(如spring配置文件、hibernate配置文件)、Java源代码(如Service、DAO层的实现)以及相关的测试用例。通过这些文件,开发者可以学习如何在实际项目...

    ssh双数据源登录实例

    在这个“ssh双数据源登录实例”中,我们将探讨如何在同一个项目中配置并使用两个不同的数据库数据源,这对于多租户或多模块系统来说非常常见。 首先,我们需要理解SSH框架各自的职责: 1. Spring:作为核心容器,...

    dwr+ssh项目

    同时,Spring也负责配置数据源和SessionFactory。在web.xml中,配置`ContextLoaderListener`来启动Spring容器,并指定配置文件的位置。 整合DWR与SSH,可以创建一个富客户端应用,利用DWR实现实时交互,而SSH负责...

    ssh(dwr).rar_DWR SSH_dwr_java dwr_ssh_ssh dwr

    1. **源代码**:这可能包括一个简单的Web应用,含有DWR的配置文件,以及使用JSch和DWR进行交互的Java类。Java类可能有一个方法,该方法通过JSch连接到SSH服务器,执行特定的命令,然后将结果返回给调用的JavaScript...

    SSH包

    3. **SSH的配置**:SSH配置文件通常位于`/etc/ssh/sshd_config`,其中可以设定各种参数,如端口号、允许的认证方法、密钥路径等。正确配置这些参数能增强系统的安全性。 4. **密钥对生成**:SSH支持使用`ssh-keygen...

    webssh

    这表明WebSSH项目可能是开源的,允许用户查看、学习甚至修改其源代码。作为一个工具,WebSSH为开发者和系统管理员提供了便捷的远程管理手段,尤其是在跨平台或移动设备上。 【知识点详解】 1. SSH(Secure Shell)...

    dwr和ssh的集成源码

    本资源提供了一个简单的DWR与SSH集成的源代码示例,虽然可能在规范性上存在一些不足,但其主要目的是为了帮助初学者理解和实践这两个框架的整合。 **DWR(Direct Web Remoting)** 是一种Java库,允许JavaScript和...

    整合好ssh学习

    5. **SSH配置**:理解`sshd_config`配置文件,学习如何修改参数以满足特定的安全需求,如限制用户权限、改变默认端口等。 6. **密钥管理**:掌握如何生成、备份、恢复、导入和导出SSH密钥,以及如何设置密钥对的...

    SSH2 整合 mysql

    5. **MySQL数据库配置**:在SSH2项目中,首先需要在Spring配置文件中设置数据源,包括数据库URL、用户名、密码等信息。然后,通过Hibernate的配置文件指定数据库方言、连接池等参数,确保Hibernate能够正确连接到...

    0.96寸OLED裸屏资料_oled裸屏_oledsh1106_0.96寸oled手册_sh1106手册_SSH1106_

    这些内容对于开发人员来说是宝贵的资源,可以指导他们正确地配置和驱动OLED屏幕,确保其在各种应用场景下正常工作。 在实际使用中,开发人员需要了解SH1106的I2C或SPI通信协议,以便通过微控制器与之交互。I2C通常...

    ssh整合步骤

    2. 如果选择使用Spring管理数据源,可以在`spring.xml`中配置数据源,从而替代`hibernate.cfg.xml`中的数据源配置。 三、Spring整合 1. 在`WEB-INF/lib`目录下添加Spring所需的jar包,并在`src`目录下创建`spring....

    CentOs7下mysql5.7的下载安装以及主从同步、双主多从配置详情

    配置双主多从需要在 my.cnf 文件中添加以下内容: [mysqld] server-id = 1 log-bin = /var/log/mysql/binlog relay-log = /var/log/mysql/relaylog binlog-do-db = mysql auto_increment_increment = 2 auto_...

    webssh2-master.zip

    这个"webssh2-master.zip"文件包含的是WebSSH2项目的源代码,可能是从GitHub或其他版本控制系统上下载的master分支的最新版本。 以下是关于WebSSH2及其相关技术的知识点: 1. **SSH(Secure Shell)**:SSH是一种...

    ssh+dwr分页程序实现

    在文件"PageDivision"中,可能包含了SSH框架的配置文件(如struts.xml、spring.xml、hibernate.cfg.xml)、Java源代码(如Controller、Service、DAO类)、DWR配置文件(dwr.xml)、以及相关的HTML和JavaScript文件。...

    extjs+ssh_项目源码

    2. 数据绑定:它允许开发者将UI组件与数据源绑定,实现双向数据同步,简化了数据管理。 3. 强大的组件系统:EXTJS提供了大量预定义的组件,可以快速构建复杂的用户界面。 4. 动态加载:通过Ajax技术,EXTJS可以实现...

    ssh详解,或者面试必备

    在IT行业中,SSH被广泛应用于远程管理服务器、数据传输加密以及隧道连接等场景,是网络管理员和开发人员不可或缺的工具之一。SSH不仅提供了一个安全的登录方式,还支持X11转发、代理跳板、端口转发等功能,极大地...

    ssh+flex+blazed

    BlazeDS是Adobe推出的一个开放源代码项目,它允许在Flex客户端与Java服务器之间进行实时双向通信,支持AMF数据格式,提供了数据推送、远程调用等功能。 在这个"ssh+flex+blazed"的集成过程中,我们主要涉及到以下几...

    SSH2架构基础学习

    在"基于SSH2资源的开发和使用Hibernate synchronizer 开发的Hibernate应用"中,`Hibernate synchronizer`可能是指一种工具或者机制,用于同步Hibernate实体与数据库中的数据。这可能是为了在多个并发会话下保持数据...

    ssh +dwr 电话销售系统代码

    - 数据存储可能在`.myhibernatedata`中,这是Hibernate的配置文件,定义了数据源、实体类和映射关系。 - `.mymetadata`、`.mystrutsdata`和`.springBeans`可能包含了项目的元数据、Struts2配置和Spring的bean定义。 ...

Global site tag (gtag.js) - Google Analytics