config
@EnableBatchProcessing(modular = true) @Configuration public class BatchConfig { private static final Logger LOGGER = LoggerFactory.getLogger(BatchConfig.class); @Bean public Job importUserJob(JobBuilderFactory jobs, Step s1, JobExecutionListener listener) { return jobs.get("importUserJob") .incrementer(new RunIdIncrementer()) .listener(listener) .flow(s1) .end() .build(); } @Bean public Step step1(StepBuilderFactory stepBuilderFactory, ItemReadermodelreader, ItemWriter writer, ItemProcessor processor) { return stepBuilderFactory.get("step1") . chunk(5) .reader(reader) .processor(processor) .writer(writer) .build(); } @Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean public ItemReader reader(DataSource dataSource) { JdbcCursorItemReader reader = new JdbcCursorItemReader (); reader.setSql("select id, first_name, last_name, random_num from reader"); reader.setDataSource(dataSource); reader.setRowMapper( (ResultSet resultSet, int rowNum) -> { LOGGER.info("RowMapper resultset: {}", resultSet); if (!(resultSet.isAfterLast()) && !(resultSet.isBeforeFirst())) { RecordSO recordSO = new RecordSO(); recordSO.setFirstName(resultSet.getString("first_name")); recordSO.setLastName(resultSet.getString("last_name")); recordSO.setId(resultSet.getLong("id")); recordSO.setRandomNum(resultSet.getString("random_num")); LOGGER.info("RowMapper record : {}", recordSO); return recordSO; } else { LOGGER.info("Returning null from rowMapper"); return null; } }); return reader; } @Bean public ItemPreparedStatementSetter setter() { return (item, ps) -> { ps.setLong(1, item.getId()); ps.setString(2, item.getFullName()); ps.setString(3, item.getRandomNum()); }; } @Bean public ItemProcessor processor() { return new RecordProcessor(); } @Bean public ItemWriter writer(DataSource dataSource, ItemPreparedStatementSetter setter) { JdbcBatchItemWriter writer = new JdbcBatchItemWriter<>(); writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider ()); writer.setItemPreparedStatementSetter(setter); writer.setSql("insert into writer (id, full_name, random_num) values (?,?,?)"); writer.setDataSource(dataSource); return writer; } }
@Entity @Table(name = "reader") public class RecordSO { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; private String firstName; private String lastName; private String randomNum; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getRandomNum() { return randomNum; } public void setRandomNum(String randomNum) { this.randomNum = randomNum; } } @Entity @Table(name = "writer") public class WriterSO { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; private String fullName; private String randomNum; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getFullName() { return fullName; } public void setFullName(String fullName) { this.fullName = fullName; } public String getRandomNum() { return randomNum; } public void setRandomNum(String randomNum) { this.randomNum = randomNum; } }application.properties
spring.datasource.driverClassName=org.postgresql.Driver spring.datasource.url=jdbc:postgresql://192.168.99.100:5432/batch spring.datasource.username=postgres spring.datasource.password=mypwd ##spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect spring.jpa.show-sql=true spring.jpa.generate-ddl=true spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialectprocessor
public class RecordProcessor implements ItemProcessordocs{ private static final Logger LOGGER = LoggerFactory.getLogger(RecordProcessor.class); @Override public WriterSO process(RecordSO item) throws Exception { LOGGER.info("Processing Record: {}", item); WriterSO writerSo = new WriterSO(); writerSo.setId(item.getId()); writerSo.setFullName(item.getFirstName() + " " + item.getLastName()); writerSo.setRandomNum(String.valueOf(Math.random()).substring(3, 8)); LOGGER.info("Processed Writer: {}", writerSo); return writerSo; } }
spring-boot-batch-starter-example
spring-batch
spring-batch-admin-spring-boot
spring-batch-tutorial-with-spring-boot-and-java-configuration
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65019.html
摘要:阿里云實例規格級別有哪些云服務器實例規格族可分為企業級實例規格族和入門級實例規格族。選購云服務器時,需要選擇云服務器實例的規格信息實例規格族,也就是配置信息,實例規格族涉及到架構分類和應用場景等。阿里云ecs各實例規格名稱的含義,實例規格是什么。 我們在了解和購買阿里云產品的時候,實例、實例規格是出現比較多的,所以有必要從概念和作用方面做個了解: 1、阿里云實例規格族包括哪些類型? (1)阿...
摘要:介紹是對模塊的二次擴展提供時間格式化,時間計算的功能官方主頁為地址為文件結構目錄描述源文件源文件類的二次擴展類主要用于時差計算類的二次擴展類提供時間計算,格式化輸出的功能自定義異常文件夾語言本地化文件夾類的方法會用到 介紹 Carbon是對PHP DateTime模塊的二次擴展;提供時間格式化,時間計算的功能; 官方主頁為 http://carbon.nesbot.com/; Git...
摘要:阿里云服務器必須要建實例嗎,阿里云服務器實例。我們來看看這次阿里云的云服務器折活動有什么需要注意的阿里云云服務器折起的活動什么時候結束目前得到的信息是,首購折的活動是長期有效的喲。阿里云服務器必須要建實例嗎,阿里云ecs服務器實例。 接觸和使用阿里云服務器、阿里云數據庫,我們對阿里云實例并不陌生,對于剛使用阿里云服務的親來說,阿里云實例的基礎知識可以做個了解: 1、什么是阿里云實例,阿里云實...
摘要:今天呢,服務器吧小編就給剛接觸阿里云的新手小白帶來快速入門阿里云服務器的方法。注冊阿里云賬號,并完成實名認證。教你如何格式化阿里云服務器數據盤第六步釋放實例。相信阿里云服務器ECS已被廣大的企業和個人站長所使用,但對于之前沒有使用過阿里云服務器的新手小白來說,無疑是一頭霧水。今天呢,服務器吧小編就給剛接觸阿里云ECS的新手小白帶來快速入門阿里云服務器的方法。請往下看! 第一步:完成準備工作...
閱讀 3952·2021-11-24 09:38
閱讀 1421·2021-11-19 09:40
閱讀 2778·2021-11-18 10:02
閱讀 3691·2021-11-09 09:46
閱讀 1765·2021-09-22 15:27
閱讀 3110·2019-08-29 15:24
閱讀 997·2019-08-29 12:40
閱讀 1683·2019-08-28 18:24