首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

SSH配备双数据源

2012-08-29 
SSH配置双数据源要求:项目默认数据源是Sqlserver,在Sqlserver数据库中创建一个表A,表结构与Oracle数据库中

SSH配置双数据源

要求:

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

?

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

?

<!-- Oracle 数据源 -->    <bean id="dataSourceOracle" 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" 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" value="classpath:conf/quartz.properties"/>    </bean>        <!-- 【【【【读取Oracle数据】】】】 -->    <bean id="readOracleDataCronTrigger" ref="readOracleDataJobDetail"/>        <!--每天23:10执行一次-->        <property name="cronExpression" value="0 10 23 * * ?"/>    </bean>    <bean id="readOracleDataJobDetail" ref="readOracleDataInsertSqlserverTask"/>        <property name="targetMethod" value="readOracleDataInsertSqlserver"/>    </bean>        <bean id="readOracleDataInsertSqlserverTask" /></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数据源的SessionFactoryprivate 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数据源的templateprotected HibernateTemplate getHibernateTemplateSqlServer(){HibernateTemplate template = new HibernateTemplate(sessionFactorySqlserver);return template;}//得到sqlserver中Realrec的最大序号public int getMaxRecBySqlserverRealrec(){Long count = (Long) getHibernateTemplateSqlServer().execute(new HibernateCallback(){@Overridepublic 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(){@Overridepublic 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(){@Overridepublic 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;}});}

?

热点排行