上一版本在寫入上有點問題,並且不能完全手動設置處理文件
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.數據庫信息