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

    友情链接

  • 相关阅读:
    mysql修改数据表名
    HDU 5742 It's All In The Mind (贪心)
    HDU 5752 Sqrt Bo (数论)
    HDU 5753 Permutation Bo (推导 or 打表找规律)
    HDU 5762 Teacher Bo (暴力)
    HDU 5754 Life Winner Bo (博弈)
    CodeForces 455C Civilization (并查集+树的直径)
    CodeForces 455B A Lot of Games (博弈论)
    CodeForces 455A Boredom (DP)
    HDU 4861 Couple doubi (数论 or 打表找规律)
  • 原文地址:https://www.cnblogs.com/huhx/p/baseusespringbatch5.html
Copyright © 2011-2022 走看看