Spring Batch 批處理第二版本

上一版本在寫入上有點問題,並且不能完全手動設置處理文件

1、添加依賴

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-starter</artifactId>
	<version>1.1.9</version>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>

2、添加配置 信息

server.port=9000
spring.http.encoding.force-response=true
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql:///batch
spring.datasource.username  = root
spring.datasource.password  = kangxg198811
#項目啓動時創建數據表的SQL腳本
spring.datasource.schema=classpath:/org/springframework/batch/core/schema-mysql.sql
#項目啓動時執行建表SQL
spring.batch.initialize-schema=always
#配置後不會自動執行
spring.batch.job.enabled=false

 3..配置批處理文件並 添加@EnableBatchProcessing註解開開啓Spring Batch支持

@Configuration
@EnableBatchProcessing
public class CsvBatchJobConfig {
    @Autowired
    JobBuilderFactory jobBuilderFactory;

    @Autowired
    StepBuilderFactory stepBuilderFactory;
    
    @Bean
    @StepScope
    public FlatFileItemReader<User> reader(@Value("#{jobParameters['input.file.name']}") String pathToFile)
    {
        FlatFileItemReader<User> reader = new FlatFileItemReader<User>();
        reader.setResource(new ClassPathResource(pathToFile));
        reader.setLineMapper(new DefaultLineMapper<User>(){
            {
                setLineTokenizer(new DelimitedLineTokenizer(){{
                    setNames(new String[]{"id","username","address","gender"});
                }});
                setFieldSetMapper(new BeanWrapperFieldSetMapper<User>(){{
                    setTargetType(User.class);
                }});

            }
        });

        return reader;
    }
    @Bean
    JdbcBatchItemWriter jdbcBatchItemWriter(DataSource dataSource)
    {
        JdbcBatchItemWriter<User> writer = new JdbcBatchItemWriter<User>();
        writer.setDataSource(dataSource);
        writer.setSql("insert into user "+"(id,username,address,gender)" + "values(:id, :username, :address, :gender)");
        writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider());
        return  writer;
    }

    @Bean
    public  Job csvJob(JobBuilderFactory jobs,Step s)
    {
        return jobs.get("csvJob")
                .incrementer(new RunIdIncrementer())
                .flow(s)
                .end()
                .listener(csvJobListener())
                .build();
    }
    @Bean
    public Step csvStep(StepBuilderFactory stepBuilderFactory, ItemReader<User> reader, ItemWriter<User> writer)
    {
        return  stepBuilderFactory.get("csvStep")
                .<User,User>chunk(2)
                .reader(reader)
                .writer(writer)
                .build();
    }

    @Bean
    public CsvJobListener csvJobListener()
    {
        return  new CsvJobListener();
    }

}

4.創建實體類

public class User {
    private Integer id;

    private String username;

    private  String address;

    private  String gender;
    public User(Integer id,String username,String address,String gender)
    {
        this.username= username;
        this.id = id;
        this.address = address;
        this.gender = gender;
    }

    public  User()
    {
        super();
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public void setAddress(String address) {
        this.address = address;
    }

    public String getUsername() {
        return username;
    }

    public String getGender() {
        return gender;
    }
    
    public Integer getId() {
        return id;
    }
    
    public String getAddress() {
        return address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", address='" + address + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }
}

5.創建Controller

@RestController
public class BatchController {
    @Autowired
    JobLauncher jobLauncher;

    @Autowired
    Job job;

    @RequestMapping("/imp")
    public String imp(String filename)
    {
        String path = filename+".csv";
        try {

            JobParameters jobParameters = new JobParametersBuilder()
                                              .addLong("time",System.currentTimeMillis())
                                              .addString("input.file.name",path)
                                              .toJobParameters();

            jobLauncher.run(job,jobParameters);
            return  "ok";

        }catch (Exception e)
        {
            e.printStackTrace();
            return "fail";
        }
    }


}

6.cvs文件

1,章三,北京,男
2,老樑,上海,男
3,劉八,北京,男
4,周麗鷗,上海,女
5,安妮古麗,北京,女
6,李力,深圳,女
7,安妮古麗,北京,女
8,李力,深圳,女

7.用瀏覽器訪問測試

 

8.數據庫信息 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章