zoukankan      html  css  js  c++  java
  • spring batch 以游标的方式 数据库读取数据 然后写入目标数据库

          前面关于Spring Batch的文章,讲述了SpringBatch对Flat、XML等文件的读写操作,本文将和大家一起讨论Spring Batch对DB的读写操作。Spring Batch对DB数据的读取操作提供两种形式,一种是以游标为基础,一条条的读取数据;另外一种是分页的方式读取DB。

          通过前面文章的讲解,大家应该对SpringBatch的框架和基本配置有了一定的了解。为了不显得啰嗦,本文只提供读取DB方式的核心配置,一些辅助信息的配置,如果不明白,可以参照前面几讲的内容。

          首先是读操作:

              class="org.springframework.batch.item.database.JdbcCursorItemReader"
    scope="step">
    <bean:property name="dataSource" ref="dataSource" />
    <bean:property name="sql"
    value="select ID,USERID,USERNAME,PASSWORD from T_USER where id &lt; ?" />
    <bean:property name="rowMapper">
    <bean:bean class="org.springframework.jdbc.core.BeanPropertyRowMapper">
    <bean:property name="mappedClass"
    value="jp.co.necst.eqix.batch.jdbcTwoDest.pojo.User" />
    </bean:bean>
    </bean:property>
    <bean:property name="preparedStatementSetter" ref="paramStatementSetter" />
    </bean:bean>

    <bean:bean id="paramStatementSetter"
    class="org.springframework.batch.core.resource.ListPreparedStatementSetter"
    scope="step">
    <bean:property name="parameters">
    <bean:list>
    <bean:value>#{jobParameters['id']}</bean:value>
    </bean:list>
    </bean:property>
    </bean:bean>
     

          Spring Batch对DB基于游标的读取数据操作,是由其核心类JdbcCursorItemReader来实现的。一般来说,从DB数据表中读取数据一般有以下几个步骤。首先是DB连接,这些连接DB的基本信息(像DB服务器地址、用户名、密码等信息)由dataSource属性提供,SpringBatch没有提专门供特殊的类,用的是Spring框架的DataSource。连接上了DB,下面需要关注的就是对DB具体的查询操作了,也就是SQL文的相关信息了,由其sql属性实现,主要是拼接SQL文的一个字符串。有了sql文,有可能需要传递参数,sql文参数的一些信息,由preparedStatementSetter属性来满足,具体的实现可以由SpringBatch提供的核心类ListPreparedStatementSetter来设置,如代码的16-24行。连接上了DB,执行了SQL文,最后要关心的就是查询结果的存放问题了,这一点由JdbcCursorItemReader的rowMapper属性来实现,如代码的7-12行。这样就可以将DB数据表中的数据一条条映射成我们的Pojo对象了,也就完成了读操作。

          其次是写操作:

     
      <bean:bean id="jdbcItemWriter"
    class="org.springframework.batch.item.database.JdbcBatchItemWriter">
    <bean:property name="dataSource" ref="dataSource" />
    <bean:property name="sql"
    value="insert into T_DESTUSER (ID,USERID,USERNAME,PASSWORD,UPDATETIME,UPDATEUSER)
    values
    (:id,:userId,:userName,:password,:updateDate,:updateUser)" />
    <bean:property name="itemSqlParameterSourceProvider">
    <bean:bean
    class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" />
    </bean:property>
    </bean:bean>
     

           写DB和读DB思路是一样的,只不过一个是从DB里读,一个是往DB里写。是由SpringBatch框架的JdbcBatchItemWriter类实现的。也有以下几个步骤:首先是连接DB,也是由dataSource属性提供;其次是执行的SQL文,有sql属性满足,最后就是如何传递参数了。写操作传递参数的时候,跟读操作有一定区别。写操作提供两种传递参数的方式:一种是直接传递一个对象进去,如上述代码8-11行所示,itemSqlParameterSourceProvider属性设置为BeanPropertyItemSqlParameterSourceProvider的实现就可以了。SQL文中的参数也是使用【:对象属性名】的方式,如上述代码的7行所示,并且区分大小写。第二种传递参数的方式是:设置JdbcBatchItemWriter类的itemSqlParameterSourceProvider属性(设置方式与读操作的paramStatementSetter属性的设置方式大同小异),当然,sql也和第一种方式有区别,使用如下形式:insert into T_DESTUSER (ID,USERID,USERNAME,PASSWORD,UPDATETIME,UPDATEUSER) values (?,?,?,?,?,?).两种方式各有优势,根据实际情况自行选择。

          至此,SpringBatch读写DB的简单操作就介绍完了。下次将和大家一起讨论开发中遇到的一些高级特性和实际问题。

  • 相关阅读:
    Unity 3(一):简介与示例
    MongoDB以Windows Service运行
    动态SQL中变量赋值
    网站发布IIS后堆栈追踪无法获取出错的行号
    GridView Postback后出错Operation is not valid due to the current state of the object.
    Visual Studio 2010 SP1 在线安装后,找到缓存在本地的临时文件以便下次离线安装
    SQL Server 问题之 排序规则(collation)冲突
    IIS 问题集锦
    linux下安装mysql(ubuntu0.16.04.1)
    apt-get update 系列作用
  • 原文地址:https://www.cnblogs.com/zhangzhen894095789/p/6479457.html
Copyright © 2011-2022 走看看