zoukankan      html  css  js  c++  java
  • springbatch---->springbatch的使用(五)

      这里我们介绍一个从数据库读取数据并写入到文件中的案例。如果能真心爱上一个人,那么不管对方是何等恶劣,哪怕对方并不爱自己,人生也至少不会是地狱,就算多少有点黯淡。

    读取数据库数据

    一、定义一个读写的job

    <!--读取数据库数据到文件-->
    <job id="readDatabaseJob">
        <step id="readDatabaseStep">
            <tasklet transaction-manager="transactionManager">
                <chunk reader="userReader" commit-interval="100" writer="userWriter"/>
            </tasklet>
        </step>
    </job>

     二、定义并实现读取数据库的reader

    <!--读取数据库到文件中-->
    <bean id="userReader" class="org.springframework.batch.item.database.JdbcCursorItemReader">
        <property name="sql" value="select user_name, age, address, birthday from batch_user where age > ?;"/>
        <property name="rowMapper" ref="userRowMapper"/>
        <property name="dataSource" ref="dataSource"/>
        <property name="preparedStatementSetter" ref="paramStatementSetterUser"/>
    </bean>
    <bean id="userRowMapper" class="spring.batch.readDatabase.UserRowMapper"/>
    <bean id="paramStatementSetterUser" class="org.springframework.batch.core.resource.ListPreparedStatementSetter" scope="step">
        <property name="parameters">
            <list>
                <value>#{jobParameters['age']}</value>
            </list>
        </property>
    </bean>

    上述的UserRowMapper类代码如下

    package spring.batch.readDatabase;
    
    import org.springframework.jdbc.core.RowMapper;
    import spring.batch.readFile.People;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    /**
     * @Author: huhx
     * @Date: 2017-11-02 上午 10:16
     */
    public class UserRowMapper implements RowMapper<People> {
    
        @Override
        public People mapRow(ResultSet rs, int rowNum) throws SQLException {
            People people = new People();
            people.setUsername(rs.getString("user_name"));
            people.setAge(rs.getInt("age"));
            people.setAddress(rs.getString("address"));
            people.setBirthday(rs.getDate("birthday"));
            return people;
        }
    }

    三、定义并实现写入文件的writer

    <bean id="userWriter" class="spring.batch.readDatabase.UserFileWriter">
        <property name="targetDirectory" value="file"/>
        <property name="targetFile" value="user.txt"/>
    </bean>

    UserFileWriter的实现代码

    package spring.batch.readDatabase;
    
    import org.apache.commons.io.FileUtils;
    import org.springframework.batch.item.ItemWriter;
    import spring.batch.readFile.People;
    
    import java.io.File;
    import java.util.List;
    
    /**
     * @Author: huhx
     * @Date: 2017-11-02 上午 10:19
     */
    public class UserFileWriter implements ItemWriter<People> {
    
        private String targetDirectory;
        private String targetFile;
    
        public void setTargetDirectory(String targetDirectory) {
            this.targetDirectory = targetDirectory;
        }
    
        public void setTargetFile(String targetFile) {
            this.targetFile = targetFile;
        }
    
        @Override
        public void write(List<? extends People> items) throws Exception {
            File targetDirectoryAsFile = new File(targetDirectory);
            if (!targetDirectoryAsFile.exists()) {
                FileUtils.forceMkdir(targetDirectoryAsFile);
            }
            File target = new File(targetDirectory, targetFile);
            FileUtils.writeLines(target, items, true);
        }
    }

    四、其它的一些信息及注意的地方

    • 这里我们复写了People类的toString方法
    @Override
    public String toString() {
        return "username=" + username + "|age=" + age + "|address=" + address + "|birthday=" + birthday;
    }
    • JobLaunch.java类里面,我们增加参数
    JobParameters jobParameters = parametersBuilder.addString("age", "25").toJobParameters();
    • 数据库表user_batch的所有数据

    • 最终生成的user.txt的文件内容如下
    username=孙尚香|age=27|address=天津|birthday=1969-12-12
    username=牛魔王|age=26|address=武汉|birthday=1999-09-12

    友情链接

  • 相关阅读:
    springboot配置jsp
    idea项目启动问题
    源码中的设计模式-模板方法模式
    Kafka Eagle CentOS6安装
    源码中的设计模式-静态代理模式
    MySQL主从复制小记
    源码中的设计模式-观察者模式
    源码中的设计模式-单例模式
    Superset
    Hive随记
  • 原文地址:https://www.cnblogs.com/huhx/p/baseusespringbatch5.html
Copyright © 2011-2022 走看看