真实业务场景下回出现,读取一条数据,写入多个目标的场景
回顾一下之前单个写的DEMO
package com.flight.neon.batch.demo.job.writer;
import com.flight.neon.batch.demo.job.entity.User;
import org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider;
import org.springframework.batch.item.database.JdbcBatchItemWriter;
import org.springframework.batch.item.support.CompositeItemWriter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.util.Arrays;
/**
* @author 这个码农不太萌
*/
@Configuration
public class DemoWriter {
@Autowired
DataSource dataSource;
@Bean("userWriter")
public JdbcBatchItemWriter<User> userWriter() {
JdbcBatchItemWriter<User> writer = new JdbcBatchItemWriter<>();
//设置数据源
writer.setDataSource(dataSource);
//设置sql
writer.setSql("insert into user (user_id,user_name) values (:userId,:userName)");
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
return writer;
}
}
组合写DEMO
package com.flight.neon.batch.demo.job.writer;
import com.flight.neon.batch.demo.job.entity.User;
import org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider;
import org.springframework.batch.item.database.JdbcBatchItemWriter;
import org.springframework.batch.item.support.CompositeItemWriter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.util.Arrays;
/**
* @author 这个码农不太萌
*/
@Configuration
public class DemoWriter {
@Autowired
DataSource dataSource;
@Bean("userWriter")
public JdbcBatchItemWriter<User> userWriter() {
JdbcBatchItemWriter<User> writer = new JdbcBatchItemWriter<>();
//设置数据源
writer.setDataSource(dataSource);
//设置sql
writer.setSql("insert into user (user_id,user_name) values (:userId,:userName)");
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
return writer;
}
@Bean("userCopyWriter")
public JdbcBatchItemWriter<User> userCopyWriter() {
JdbcBatchItemWriter<User> writer = new JdbcBatchItemWriter<>();
//设置数据源
writer.setDataSource(dataSource);
//设置sql
writer.setSql("insert into user (user_id,user_name) values (:userId,:userName)");
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
return writer;
}
@Bean("userWriterGroup")
public CompositeItemWriter<User> userWriterGroup() throws Exception {
CompositeItemWriter<User> compositeItemWriter = new CompositeItemWriter<>();
compositeItemWriter.setDelegates(Arrays.asList(userWriter(),userCopyWriter()));
compositeItemWriter.afterPropertiesSet();
return compositeItemWriter;
}
}
spring中使用spring-batch写方法的类,类注解必须为@Configuration,使用@Component在启动时无法识别写入类,导致JOB运行异常