Categories: Spring BatchTutorial

Spring Batch – Read from CSV and write to relational DB

&NewLine;<p class&equals;"wp-block-paragraph">In Spring Batch&comma; we often need read data from CSV file and write it into relational database or NoSQL or convert it into another format like XML or JSON&period; There are few source systems like MainFrame which generates FlatFile and we must need to read data from the file&comma; processes or transform it and save to the location where its intended&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Lets begin &&num;8211&semi; In this tutorial we&&num;8217&semi;ll use <strong>MySQL <&sol;strong>as a database for persistent store&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><strong>pom&period;xml <&sol;strong>&&num;8211&semi; This file contains a list of dependencies required to run the project&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"UTF-8"&quest;&gt&semi;&NewLine;&lt&semi;project xmlns&equals;"http&colon;&sol;&sol;maven&period;apache&period;org&sol;POM&sol;4&period;0&period;0" xmlns&colon;xsi&equals;"http&colon;&sol;&sol;www&period;w3&period;org&sol;2001&sol;XMLSchema-instance"&NewLine;&Tab;xsi&colon;schemaLocation&equals;"http&colon;&sol;&sol;maven&period;apache&period;org&sol;POM&sol;4&period;0&period;0 http&colon;&sol;&sol;maven&period;apache&period;org&sol;xsd&sol;maven-4&period;0&period;0&period;xsd"&gt&semi;&NewLine;&Tab;&lt&semi;modelVersion&gt&semi;4&period;0&period;0&lt&semi;&sol;modelVersion&gt&semi;&NewLine;&NewLine;&Tab;&lt&semi;groupId&gt&semi;io&period;spring&period;batch&lt&semi;&sol;groupId&gt&semi;&NewLine;&Tab;&lt&semi;artifactId&gt&semi;database-output&lt&semi;&sol;artifactId&gt&semi;&NewLine;&Tab;&lt&semi;version&gt&semi;0&period;0&period;1-SNAPSHOT&lt&semi;&sol;version&gt&semi;&NewLine;&Tab;&lt&semi;packaging&gt&semi;jar&lt&semi;&sol;packaging&gt&semi;&NewLine;&NewLine;&Tab;&lt&semi;name&gt&semi;databaseOutput&lt&semi;&sol;name&gt&semi;&NewLine;&Tab;&lt&semi;description&gt&semi;JDBC based item writing&lt&semi;&sol;description&gt&semi;&NewLine;&NewLine;&Tab;&lt&semi;parent&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;groupId&gt&semi;org&period;springframework&period;boot&lt&semi;&sol;groupId&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;artifactId&gt&semi;spring-boot-starter-parent&lt&semi;&sol;artifactId&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;version&gt&semi;2&period;1&period;1&period;RELEASE&lt&semi;&sol;version&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;relativePath&sol;&gt&semi; &lt&semi;&excl;-- lookup parent from repository --&gt&semi;&NewLine;&Tab;&lt&semi;&sol;parent&gt&semi;&NewLine;&NewLine;&Tab;&lt&semi;properties&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;project&period;build&period;sourceEncoding&gt&semi;UTF-8&lt&semi;&sol;project&period;build&period;sourceEncoding&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;java&period;version&gt&semi;1&period;8&lt&semi;&sol;java&period;version&gt&semi;&NewLine;&Tab;&lt&semi;&sol;properties&gt&semi;&NewLine;&NewLine;&Tab;&lt&semi;dependencies&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;&excl;-- Spring Batch --&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;dependency&gt&semi;&NewLine;&Tab;&Tab;&Tab;&lt&semi;groupId&gt&semi;org&period;springframework&period;boot&lt&semi;&sol;groupId&gt&semi;&NewLine;&Tab;&Tab;&Tab;&lt&semi;artifactId&gt&semi;spring-boot-starter-batch&lt&semi;&sol;artifactId&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;&sol;dependency&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;&excl;-- JDBC --&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;dependency&gt&semi;&NewLine;&Tab;&Tab;&Tab;&lt&semi;groupId&gt&semi;org&period;springframework&period;boot&lt&semi;&sol;groupId&gt&semi;&NewLine;&Tab;&Tab;&Tab;&lt&semi;artifactId&gt&semi;spring-boot-starter-jdbc&lt&semi;&sol;artifactId&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;&sol;dependency&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;&excl;-- MYSQL DB --&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;dependency&gt&semi;&NewLine;&Tab;&Tab;&Tab;&lt&semi;groupId&gt&semi;mysql&lt&semi;&sol;groupId&gt&semi;&NewLine;&Tab;&Tab;&Tab;&lt&semi;artifactId&gt&semi;mysql-connector-java&lt&semi;&sol;artifactId&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;&sol;dependency&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;&excl;-- Test --&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;dependency&gt&semi;&NewLine;&Tab;&Tab;&Tab;&lt&semi;groupId&gt&semi;org&period;springframework&period;boot&lt&semi;&sol;groupId&gt&semi;&NewLine;&Tab;&Tab;&Tab;&lt&semi;artifactId&gt&semi;spring-boot-starter-test&lt&semi;&sol;artifactId&gt&semi;&NewLine;&Tab;&Tab;&Tab;&lt&semi;scope&gt&semi;test&lt&semi;&sol;scope&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;&sol;dependency&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;&excl;-- Lombok --&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;dependency&gt&semi;&NewLine;&Tab;&Tab;&Tab;&lt&semi;groupId&gt&semi;org&period;projectlombok&lt&semi;&sol;groupId&gt&semi;&NewLine;&Tab;&Tab;&Tab;&lt&semi;artifactId&gt&semi;lombok&lt&semi;&sol;artifactId&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;&sol;dependency&gt&semi;&NewLine;&Tab;&lt&semi;&sol;dependencies&gt&semi;&NewLine;&Tab;&NewLine;&Tab;&lt&semi;build&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;plugins&gt&semi;&NewLine;&Tab;&Tab;&Tab;&lt&semi;plugin&gt&semi;&NewLine;&Tab;&Tab;&Tab;&Tab;&lt&semi;groupId&gt&semi;org&period;springframework&period;boot&lt&semi;&sol;groupId&gt&semi;&NewLine;&Tab;&Tab;&Tab;&Tab;&lt&semi;artifactId&gt&semi;spring-boot-maven-plugin&lt&semi;&sol;artifactId&gt&semi;&NewLine;&Tab;&Tab;&Tab;&lt&semi;&sol;plugin&gt&semi;&NewLine;&Tab;&Tab;&lt&semi;&sol;plugins&gt&semi;&NewLine;&Tab;&lt&semi;&sol;build&gt&semi;&NewLine;&Tab;&NewLine;&NewLine;&lt&semi;&sol;project&gt&semi;&NewLine;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><strong>Person&period;java<&sol;strong> &&num;8211&semi; Its a domain class which holds Person details&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>&NewLine;&commat;Data&NewLine;&commat;AllArgsConstructor&NewLine;&commat;NoArgsConstructor&NewLine;&commat;Builder&NewLine;public class Person &lbrace;&NewLine;&Tab;private long id&semi;&NewLine;&Tab;private String firstName&semi;&NewLine;&Tab;private String lastName&semi;&NewLine;&Tab;private Date birthdate&semi;&NewLine;&rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"> <strong>PersonFieldSetMapper<&sol;strong> &&num;8211&semi; Interface that is used to map data obtained from a <code><a href&equals;"&percnt;5C&sol;Users&percnt;5C&sol;e081155&percnt;5C&sol;&period;m2&percnt;5C&sol;repository&percnt;5C&sol;org&percnt;5C&sol;springframework&percnt;5C&sol;batch&percnt;5C&sol;spring-batch-infrastructure&percnt;5C&sol;4&period;1&period;0&period;RELEASE&percnt;5C&sol;spring-batch-infrastructure-4&period;1&period;0&period;RELEASE&period;jar&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;groupId&equals;&sol;org&period;springframework&period;batch&equals;&sol;&equals;&sol;maven&period;artifactId&equals;&sol;spring-batch-infrastructure&equals;&sol;&equals;&sol;maven&period;version&equals;&sol;4&period;1&period;0&period;RELEASE&equals;&sol;&equals;&sol;maven&period;scope&equals;&sol;compile&equals;&sol;&percnt;3Corg&period;springframework&period;batch&period;item&period;file&period;mapping&lpar;FieldSetMapper&period;class&percnt;E2&percnt;98&percnt;83FieldSetMapper&percnt;E2&percnt;98&percnt;82FieldSet">FieldSet<&sol;a><&sol;code> into an object&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>&NewLine;public class PersonFieldSetMapper implements FieldSetMapper&lt&semi;Person&gt&semi; &lbrace;&NewLine;&NewLine;&Tab;&commat;Override&NewLine;&Tab;public Person mapFieldSet&lpar;FieldSet fieldSet&rpar; throws BindException &lbrace;&NewLine;&Tab;&Tab;return new Person&lpar;fieldSet&period;readLong&lpar;"id"&rpar;&comma;&NewLine;&Tab;&Tab;&Tab;&Tab;fieldSet&period;readString&lpar;"firstName"&rpar;&comma;&NewLine;&Tab;&Tab;&Tab;&Tab;fieldSet&period;readString&lpar;"lastName"&rpar;&comma;&NewLine;&Tab;&Tab;&Tab;&Tab;fieldSet&period;readDate&lpar;"birthdate"&comma; "yyyy-MM-dd HH&colon;mm&colon;ss"&rpar;&rpar;&semi;&NewLine;&Tab;&rcub;&NewLine;&rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><strong>application&period;properties<&sol;strong> &&num;8211&semi; This file holds the database related information which helps spring boot to create datasource&period; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><strong>spring&period;batch&period;job&period;enabled&equals;false<&sol;strong> means we&&num;8217&semi;re disabling batch to run on start of application context&period;<br><strong>spring&period;batch&period;initialize-schema&equals;always<&sol;strong> &&num;8211&semi; means we&&num;8217&semi;re asking Spring Batch to create the metadata tables&period; Metadata tables holds information about Batch Job instance&comma; execution and parameter details&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>spring&period;datasource&period;driverClassName&equals;com&period;mysql&period;cj&period;jdbc&period;Driver&NewLine;spring&period;datasource&period;url&equals;jdbc&colon;mysql&colon;&sol;&sol;localhost&colon;3306&sol;test&NewLine;spring&period;datasource&period;username&equals;root&NewLine;spring&period;datasource&period;password&equals;root&NewLine;spring&period;datasource&period;platform&equals;mysql&NewLine;spring&period;datasource&period;continueOnError&equals;false&NewLine;spring&period;batch&period;initialize-schema&equals;always&NewLine;spring&period;batch&period;job&period;enabled&equals;false<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><strong>JobConfiguration&period;java<&sol;strong><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li><strong>FlatFileItemReader <&sol;strong>&&num;8211&semi; Restartable <code><a href&equals;"&percnt;5C&sol;Users&percnt;5C&sol;e081155&percnt;5C&sol;&period;m2&percnt;5C&sol;repository&percnt;5C&sol;org&percnt;5C&sol;springframework&percnt;5C&sol;batch&percnt;5C&sol;spring-batch-infrastructure&percnt;5C&sol;4&period;1&period;0&period;RELEASE&percnt;5C&sol;spring-batch-infrastructure-4&period;1&period;0&period;RELEASE&period;jar&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;groupId&equals;&sol;org&period;springframework&period;batch&equals;&sol;&equals;&sol;maven&period;artifactId&equals;&sol;spring-batch-infrastructure&equals;&sol;&equals;&sol;maven&period;version&equals;&sol;4&period;1&period;0&period;RELEASE&equals;&sol;&equals;&sol;maven&period;scope&equals;&sol;compile&equals;&sol;&percnt;3Corg&period;springframework&period;batch&period;item&period;file&lpar;FlatFileItemReader&period;class&percnt;E2&percnt;98&percnt;83FlatFileItemReader&percnt;E2&percnt;98&percnt;82ItemReader">ItemReader<&sol;a><&sol;code> that reads lines from input <code><a href&equals;"&percnt;5C&sol;Users&percnt;5C&sol;e081155&percnt;5C&sol;&period;m2&percnt;5C&sol;repository&percnt;5C&sol;org&percnt;5C&sol;springframework&percnt;5C&sol;batch&percnt;5C&sol;spring-batch-infrastructure&percnt;5C&sol;4&period;1&period;0&period;RELEASE&percnt;5C&sol;spring-batch-infrastructure-4&period;1&period;0&period;RELEASE&period;jar&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;groupId&equals;&sol;org&period;springframework&period;batch&equals;&sol;&equals;&sol;maven&period;artifactId&equals;&sol;spring-batch-infrastructure&equals;&sol;&equals;&sol;maven&period;version&equals;&sol;4&period;1&period;0&period;RELEASE&equals;&sol;&equals;&sol;maven&period;scope&equals;&sol;compile&equals;&sol;&percnt;3Corg&period;springframework&period;batch&period;item&period;file&lpar;FlatFileItemReader&period;class&percnt;E2&percnt;98&percnt;83FlatFileItemReader&percnt;E2&percnt;98&percnt;82&percnt;E2&percnt;98&percnt;82setResource&percnt;E2&percnt;98&percnt;82Resource">setResource&lpar;Resource&rpar;<&sol;a><&sol;code>&period; Line is defined by the <code><a href&equals;"&percnt;5C&sol;Users&percnt;5C&sol;e081155&percnt;5C&sol;&period;m2&percnt;5C&sol;repository&percnt;5C&sol;org&percnt;5C&sol;springframework&percnt;5C&sol;batch&percnt;5C&sol;spring-batch-infrastructure&percnt;5C&sol;4&period;1&period;0&period;RELEASE&percnt;5C&sol;spring-batch-infrastructure-4&period;1&period;0&period;RELEASE&period;jar&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;groupId&equals;&sol;org&period;springframework&period;batch&equals;&sol;&equals;&sol;maven&period;artifactId&equals;&sol;spring-batch-infrastructure&equals;&sol;&equals;&sol;maven&period;version&equals;&sol;4&period;1&period;0&period;RELEASE&equals;&sol;&equals;&sol;maven&period;scope&equals;&sol;compile&equals;&sol;&percnt;3Corg&period;springframework&period;batch&period;item&period;file&lpar;FlatFileItemReader&period;class&percnt;E2&percnt;98&percnt;83FlatFileItemReader&percnt;E2&percnt;98&percnt;82&percnt;E2&percnt;98&percnt;82setRecordSeparatorPolicy&percnt;E2&percnt;98&percnt;82RecordSeparatorPolicy">setRecordSeparatorPolicy&lpar;RecordSeparatorPolicy&rpar;<&sol;a><&sol;code> and mapped to item using <code><a href&equals;"&percnt;5C&sol;Users&percnt;5C&sol;e081155&percnt;5C&sol;&period;m2&percnt;5C&sol;repository&percnt;5C&sol;org&percnt;5C&sol;springframework&percnt;5C&sol;batch&percnt;5C&sol;spring-batch-infrastructure&percnt;5C&sol;4&period;1&period;0&period;RELEASE&percnt;5C&sol;spring-batch-infrastructure-4&period;1&period;0&period;RELEASE&period;jar&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;groupId&equals;&sol;org&period;springframework&period;batch&equals;&sol;&equals;&sol;maven&period;artifactId&equals;&sol;spring-batch-infrastructure&equals;&sol;&equals;&sol;maven&period;version&equals;&sol;4&period;1&period;0&period;RELEASE&equals;&sol;&equals;&sol;maven&period;scope&equals;&sol;compile&equals;&sol;&percnt;3Corg&period;springframework&period;batch&period;item&period;file&lpar;FlatFileItemReader&period;class&percnt;E2&percnt;98&percnt;83FlatFileItemReader&percnt;E2&percnt;98&percnt;82&percnt;E2&percnt;98&percnt;82setLineMapper&percnt;E2&percnt;98&percnt;82LineMapper">setLineMapper&lpar;LineMapper&rpar;<&sol;a><&sol;code>&period; If an exception is thrown during line mapping it is rethrown as <code><a href&equals;"&percnt;5C&sol;Users&percnt;5C&sol;e081155&percnt;5C&sol;&period;m2&percnt;5C&sol;repository&percnt;5C&sol;org&percnt;5C&sol;springframework&percnt;5C&sol;batch&percnt;5C&sol;spring-batch-infrastructure&percnt;5C&sol;4&period;1&period;0&period;RELEASE&percnt;5C&sol;spring-batch-infrastructure-4&period;1&period;0&period;RELEASE&period;jar&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;groupId&equals;&sol;org&period;springframework&period;batch&equals;&sol;&equals;&sol;maven&period;artifactId&equals;&sol;spring-batch-infrastructure&equals;&sol;&equals;&sol;maven&period;version&equals;&sol;4&period;1&period;0&period;RELEASE&equals;&sol;&equals;&sol;maven&period;scope&equals;&sol;compile&equals;&sol;&percnt;3Corg&period;springframework&period;batch&period;item&period;file&lpar;FlatFileItemReader&period;class&percnt;E2&percnt;98&percnt;83FlatFileItemReader&percnt;E2&percnt;98&percnt;82FlatFileParseException">FlatFileParseException<&sol;a><&sol;code> adding information about the problematic line and its line number&period;<&sol;li><li><strong>JdbcBatchItemWriter <&sol;strong>&&num;8211&semi; The writer is thread-safe after its properties are set &lpar;normal singleton behavior&rpar;&comma; so it can be used to write in multiple concurrent transactions&period; <code><a href&equals;"&percnt;5C&sol;Users&percnt;5C&sol;e081155&percnt;5C&sol;&period;m2&percnt;5C&sol;repository&percnt;5C&sol;org&percnt;5C&sol;springframework&percnt;5C&sol;batch&percnt;5C&sol;spring-batch-infrastructure&percnt;5C&sol;4&period;1&period;0&period;RELEASE&percnt;5C&sol;spring-batch-infrastructure-4&period;1&period;0&period;RELEASE&period;jar&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;groupId&equals;&sol;org&period;springframework&period;batch&equals;&sol;&equals;&sol;maven&period;artifactId&equals;&sol;spring-batch-infrastructure&equals;&sol;&equals;&sol;maven&period;version&equals;&sol;4&period;1&period;0&period;RELEASE&equals;&sol;&equals;&sol;maven&period;scope&equals;&sol;compile&equals;&sol;&percnt;3Corg&period;springframework&period;batch&period;item&period;database&lpar;JdbcBatchItemWriter&period;class&percnt;E2&percnt;98&percnt;83JdbcBatchItemWriter&percnt;E2&percnt;98&percnt;82ItemWriter">ItemWriter<&sol;a><&sol;code> that uses the batching features from <code><a href&equals;"&percnt;5C&sol;Users&percnt;5C&sol;e081155&percnt;5C&sol;&period;m2&percnt;5C&sol;repository&percnt;5C&sol;org&percnt;5C&sol;springframework&percnt;5C&sol;batch&percnt;5C&sol;spring-batch-infrastructure&percnt;5C&sol;4&period;1&period;0&period;RELEASE&percnt;5C&sol;spring-batch-infrastructure-4&period;1&period;0&period;RELEASE&period;jar&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;groupId&equals;&sol;org&period;springframework&period;batch&equals;&sol;&equals;&sol;maven&period;artifactId&equals;&sol;spring-batch-infrastructure&equals;&sol;&equals;&sol;maven&period;version&equals;&sol;4&period;1&period;0&period;RELEASE&equals;&sol;&equals;&sol;maven&period;scope&equals;&sol;compile&equals;&sol;&percnt;3Corg&period;springframework&period;batch&period;item&period;database&lpar;JdbcBatchItemWriter&period;class&percnt;E2&percnt;98&percnt;83JdbcBatchItemWriter&percnt;E2&percnt;98&percnt;82NamedParameterJdbcTemplate">NamedParameterJdbcTemplate<&sol;a><&sol;code> to execute a batch of statements for all items provided&period; The user must provide an SQL query and a special callback for either of <code><a href&equals;"&percnt;5C&sol;Users&percnt;5C&sol;e081155&percnt;5C&sol;&period;m2&percnt;5C&sol;repository&percnt;5C&sol;org&percnt;5C&sol;springframework&percnt;5C&sol;batch&percnt;5C&sol;spring-batch-infrastructure&percnt;5C&sol;4&period;1&period;0&period;RELEASE&percnt;5C&sol;spring-batch-infrastructure-4&period;1&period;0&period;RELEASE&period;jar&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;groupId&equals;&sol;org&period;springframework&period;batch&equals;&sol;&equals;&sol;maven&period;artifactId&equals;&sol;spring-batch-infrastructure&equals;&sol;&equals;&sol;maven&period;version&equals;&sol;4&period;1&period;0&period;RELEASE&equals;&sol;&equals;&sol;maven&period;scope&equals;&sol;compile&equals;&sol;&percnt;3Corg&period;springframework&period;batch&period;item&period;database&lpar;JdbcBatchItemWriter&period;class&percnt;E2&percnt;98&percnt;83JdbcBatchItemWriter&percnt;E2&percnt;98&percnt;82ItemPreparedStatementSetter">ItemPreparedStatementSetter<&sol;a><&sol;code> or <code><a href&equals;"&percnt;5C&sol;Users&percnt;5C&sol;e081155&percnt;5C&sol;&period;m2&percnt;5C&sol;repository&percnt;5C&sol;org&percnt;5C&sol;springframework&percnt;5C&sol;batch&percnt;5C&sol;spring-batch-infrastructure&percnt;5C&sol;4&period;1&period;0&period;RELEASE&percnt;5C&sol;spring-batch-infrastructure-4&period;1&period;0&period;RELEASE&period;jar&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;groupId&equals;&sol;org&period;springframework&period;batch&equals;&sol;&equals;&sol;maven&period;artifactId&equals;&sol;spring-batch-infrastructure&equals;&sol;&equals;&sol;maven&period;version&equals;&sol;4&period;1&period;0&period;RELEASE&equals;&sol;&equals;&sol;maven&period;scope&equals;&sol;compile&equals;&sol;&percnt;3Corg&period;springframework&period;batch&period;item&period;database&lpar;JdbcBatchItemWriter&period;class&percnt;E2&percnt;98&percnt;83JdbcBatchItemWriter&percnt;E2&percnt;98&percnt;82ItemSqlParameterSourceProvider">ItemSqlParameterSourceProvider<&sol;a><&sol;code>&period; You can use either named parameters or the traditional &&num;8216&semi;&quest;&&num;8217&semi; placeholders&period;<&sol;li><li><strong>Step <&sol;strong>&&num;8211&semi; Batch domain interface representing the configuration of a step&period; As with the <code><a href&equals;"&percnt;5C&sol;Users&percnt;5C&sol;e081155&percnt;5C&sol;&period;m2&percnt;5C&sol;repository&percnt;5C&sol;org&percnt;5C&sol;springframework&percnt;5C&sol;batch&percnt;5C&sol;spring-batch-core&percnt;5C&sol;4&period;1&period;0&period;RELEASE&percnt;5C&sol;spring-batch-core-4&period;1&period;0&period;RELEASE&period;jar&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;groupId&equals;&sol;org&period;springframework&period;batch&equals;&sol;&equals;&sol;maven&period;artifactId&equals;&sol;spring-batch-core&equals;&sol;&equals;&sol;maven&period;version&equals;&sol;4&period;1&period;0&period;RELEASE&equals;&sol;&equals;&sol;maven&period;scope&equals;&sol;compile&equals;&sol;&percnt;3Corg&period;springframework&period;batch&period;core&lpar;Step&period;class&percnt;E2&percnt;98&percnt;83Step&percnt;E2&percnt;98&percnt;82Job">Job<&sol;a><&sol;code>&comma; a <code><a href&equals;"&percnt;5C&sol;Users&percnt;5C&sol;e081155&percnt;5C&sol;&period;m2&percnt;5C&sol;repository&percnt;5C&sol;org&percnt;5C&sol;springframework&percnt;5C&sol;batch&percnt;5C&sol;spring-batch-core&percnt;5C&sol;4&period;1&period;0&period;RELEASE&percnt;5C&sol;spring-batch-core-4&period;1&period;0&period;RELEASE&period;jar&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;pomderived&equals;&sol;true&equals;&sol;&equals;&sol;maven&period;groupId&equals;&sol;org&period;springframework&period;batch&equals;&sol;&equals;&sol;maven&period;artifactId&equals;&sol;spring-batch-core&equals;&sol;&equals;&sol;maven&period;version&equals;&sol;4&period;1&period;0&period;RELEASE&equals;&sol;&equals;&sol;maven&period;scope&equals;&sol;compile&equals;&sol;&percnt;3Corg&period;springframework&period;batch&period;core&lpar;Step&period;class&percnt;E2&percnt;98&percnt;83Step&percnt;E2&percnt;98&percnt;82Step">Step<&sol;a><&sol;code> is meant to explicitly represent the configuration of a step by a developer&comma; but also the ability to execute the step&period;<&sol;li><li><strong>Job<&sol;strong> &&num;8211&semi; Batch domain object representing a job&period; Job is an explicit abstraction representing the configuration of a job specified by a developer&period; It should be noted that restart policy is applied to the job as a whole and not to a step&period;<&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>import javax&period;sql&period;DataSource&semi;&NewLine;&NewLine;import io&period;spring&period;batch&period;domain&period;Person&semi;&NewLine;import io&period;spring&period;batch&period;domain&period;PersonFieldSetMapper&semi;&NewLine;&NewLine;import org&period;springframework&period;batch&period;core&period;Job&semi;&NewLine;import org&period;springframework&period;batch&period;core&period;Step&semi;&NewLine;import org&period;springframework&period;batch&period;core&period;configuration&period;annotation&period;JobBuilderFactory&semi;&NewLine;import org&period;springframework&period;batch&period;core&period;configuration&period;annotation&period;StepBuilderFactory&semi;&NewLine;import org&period;springframework&period;batch&period;item&period;database&period;BeanPropertyItemSqlParameterSourceProvider&semi;&NewLine;import org&period;springframework&period;batch&period;item&period;database&period;JdbcBatchItemWriter&semi;&NewLine;import org&period;springframework&period;batch&period;item&period;file&period;FlatFileItemReader&semi;&NewLine;import org&period;springframework&period;batch&period;item&period;file&period;mapping&period;DefaultLineMapper&semi;&NewLine;import org&period;springframework&period;batch&period;item&period;file&period;transform&period;DelimitedLineTokenizer&semi;&NewLine;import org&period;springframework&period;beans&period;factory&period;annotation&period;Autowired&semi;&NewLine;import org&period;springframework&period;context&period;annotation&period;Bean&semi;&NewLine;import org&period;springframework&period;context&period;annotation&period;Configuration&semi;&NewLine;import org&period;springframework&period;core&period;io&period;ClassPathResource&semi;&NewLine;&NewLine;&NewLine;&commat;Configuration&NewLine;public class JobConfiguration &lbrace;&NewLine;&NewLine;&Tab;&commat;Autowired&NewLine;&Tab;public JobBuilderFactory jobBuilderFactory&semi;&NewLine;&NewLine;&Tab;&commat;Autowired&NewLine;&Tab;public StepBuilderFactory stepBuilderFactory&semi;&NewLine;&NewLine;&Tab;&commat;Autowired&NewLine;&Tab;public DataSource dataSource&semi;&NewLine;&NewLine;&Tab;&commat;Bean&NewLine;&Tab;public FlatFileItemReader&lt&semi;Person&gt&semi; personItemReader&lpar;&rpar; &lbrace;&NewLine;&Tab;&Tab;FlatFileItemReader&lt&semi;Person&gt&semi; reader &equals; new FlatFileItemReader&lt&semi;&gt&semi;&lpar;&rpar;&semi;&NewLine;&Tab;&Tab;reader&period;setLinesToSkip&lpar;1&rpar;&semi;&NewLine;&Tab;&Tab;reader&period;setResource&lpar;new ClassPathResource&lpar;"&sol;data&sol;person&period;csv"&rpar;&rpar;&semi;&NewLine;&NewLine;&Tab;&Tab;DefaultLineMapper&lt&semi;Person&gt&semi; customerLineMapper &equals; new DefaultLineMapper&lt&semi;&gt&semi;&lpar;&rpar;&semi;&NewLine;&NewLine;&Tab;&Tab;DelimitedLineTokenizer tokenizer &equals; new DelimitedLineTokenizer&lpar;&rpar;&semi;&NewLine;&Tab;&Tab;tokenizer&period;setNames&lpar;new String&&num;091&semi;&rsqb; &lbrace;"id"&comma; "firstName"&comma; "lastName"&comma; "birthdate"&rcub;&rpar;&semi;&NewLine;&NewLine;&Tab;&Tab;customerLineMapper&period;setLineTokenizer&lpar;tokenizer&rpar;&semi;&NewLine;&Tab;&Tab;customerLineMapper&period;setFieldSetMapper&lpar;new PersonFieldSetMapper&lpar;&rpar;&rpar;&semi;&NewLine;&Tab;&Tab;customerLineMapper&period;afterPropertiesSet&lpar;&rpar;&semi;&NewLine;&Tab;&Tab;reader&period;setLineMapper&lpar;customerLineMapper&rpar;&semi;&NewLine;&Tab;&Tab;return reader&semi;&NewLine;&Tab;&rcub;&NewLine;&NewLine;&Tab;&commat;SuppressWarnings&lpar;&lbrace; "rawtypes"&comma; "unchecked" &rcub;&rpar;&NewLine;&Tab;&commat;Bean&NewLine;&Tab;public JdbcBatchItemWriter&lt&semi;Person&gt&semi; personItemWriter&lpar;&rpar; &lbrace;&NewLine;&Tab;&Tab;JdbcBatchItemWriter&lt&semi;Person&gt&semi; itemWriter &equals; new JdbcBatchItemWriter&lt&semi;&gt&semi;&lpar;&rpar;&semi;&NewLine;&NewLine;&Tab;&Tab;itemWriter&period;setDataSource&lpar;this&period;dataSource&rpar;&semi;&NewLine;&Tab;&Tab;itemWriter&period;setSql&lpar;"INSERT INTO PERSON VALUES &lpar;&colon;id&comma; &colon;firstName&comma; &colon;lastName&comma; &colon;birthdate&rpar;"&rpar;&semi;&NewLine;&Tab;&Tab;itemWriter&period;setItemSqlParameterSourceProvider&lpar;new BeanPropertyItemSqlParameterSourceProvider&lpar;&rpar;&rpar;&semi;&NewLine;&Tab;&Tab;itemWriter&period;afterPropertiesSet&lpar;&rpar;&semi;&NewLine;&NewLine;&Tab;&Tab;return itemWriter&semi;&NewLine;&Tab;&rcub;&NewLine;&NewLine;&Tab;&commat;Bean&NewLine;&Tab;public Step step1&lpar;&rpar; &lbrace;&NewLine;&Tab;&Tab;return stepBuilderFactory&period;get&lpar;"step1"&rpar;&NewLine;&Tab;&Tab;&Tab;&Tab;&period;&lt&semi;Person&comma; Person&gt&semi;chunk&lpar;10&rpar;&NewLine;&Tab;&Tab;&Tab;&Tab;&period;reader&lpar;personItemReader&lpar;&rpar;&rpar;&NewLine;&Tab;&Tab;&Tab;&Tab;&period;writer&lpar;personItemWriter&lpar;&rpar;&rpar;&NewLine;&Tab;&Tab;&Tab;&Tab;&period;build&lpar;&rpar;&semi;&NewLine;&Tab;&rcub;&NewLine;&NewLine;&Tab;&commat;Bean&NewLine;&Tab;public Job job&lpar;&rpar; &lbrace;&NewLine;&Tab;&Tab;return jobBuilderFactory&period;get&lpar;"job"&rpar;&NewLine;&Tab;&Tab;&Tab;&Tab;&period;start&lpar;step1&lpar;&rpar;&rpar;&NewLine;&Tab;&Tab;&Tab;&Tab;&period;build&lpar;&rpar;&semi;&NewLine;&Tab;&rcub;&NewLine;&rcub;&NewLine;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><strong>MainApp <&sol;strong>&&num;8211&semi; This is spring boot main class&comma; just right click and run the app<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list"><li><strong>JobLauncher <&sol;strong>&&num;8211&semi; Simple interface for controlling jobs&comma; including possible ad-hoc executions&comma; based on different runtime identifiers&period; It is extremely important to note that this interface makes absolutely no guarantees about whether or not calls to it are executed synchronously or asynchronously&period; The javadocs for specific implementations should be checked to ensure callers fully understand how the job will be run&period;<&sol;li><&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>&NewLine;import java&period;util&period;UUID&semi;&NewLine;&NewLine;import org&period;springframework&period;batch&period;core&period;Job&semi;&NewLine;import org&period;springframework&period;batch&period;core&period;JobExecution&semi;&NewLine;import org&period;springframework&period;batch&period;core&period;JobParameters&semi;&NewLine;import org&period;springframework&period;batch&period;core&period;JobParametersBuilder&semi;&NewLine;import org&period;springframework&period;batch&period;core&period;configuration&period;annotation&period;EnableBatchProcessing&semi;&NewLine;import org&period;springframework&period;batch&period;core&period;launch&period;JobLauncher&semi;&NewLine;import org&period;springframework&period;beans&period;factory&period;annotation&period;Autowired&semi;&NewLine;import org&period;springframework&period;boot&period;CommandLineRunner&semi;&NewLine;import org&period;springframework&period;boot&period;SpringApplication&semi;&NewLine;import org&period;springframework&period;boot&period;autoconfigure&period;SpringBootApplication&semi;&NewLine;&NewLine;&commat;SpringBootApplication&NewLine;&commat;EnableBatchProcessing&NewLine;public class SaveinDBApplication implements CommandLineRunner &lbrace;&NewLine;&NewLine;&Tab;&commat;Autowired&NewLine;&Tab;private JobLauncher jobLauncher&semi;&NewLine;&NewLine;&Tab;&commat;Autowired&NewLine;&Tab;private Job job&semi;&NewLine;&Tab;&NewLine;&Tab;public static void main&lpar;String&&num;091&semi;&rsqb; args&rpar; &lbrace;&NewLine;&Tab;&Tab;SpringApplication&period;run&lpar;DatabaseOutputApplication&period;class&comma; args&rpar;&semi;&NewLine;&Tab;&rcub;&NewLine;&NewLine;&Tab;&commat;Override&NewLine;&Tab;public void run&lpar;String&period;&period;&period; args&rpar; throws Exception &lbrace;&NewLine;&Tab;&Tab;JobParameters jobParameters &equals; new JobParametersBuilder&lpar;&rpar;&NewLine; &period;addString&lpar;"date"&comma; UUID&period;randomUUID&lpar;&rpar;&period;toString&lpar;&rpar;&rpar;&NewLine; &period;addLong&lpar;"JobId"&comma;System&period;currentTimeMillis&lpar;&rpar;&rpar;&NewLine; &period;addLong&lpar;"time"&comma;System&period;currentTimeMillis&lpar;&rpar;&rpar;&period;toJobParameters&lpar;&rpar;&semi;&NewLine;&Tab;&Tab;&NewLine;&Tab;&Tab;JobExecution execution &equals; jobLauncher&period;run&lpar;job&comma; jobParameters&rpar;&semi;&NewLine;&Tab;&Tab;System&period;out&period;println&lpar;"STATUS &colon;&colon; "&plus;execution&period;getStatus&lpar;&rpar;&rpar;&semi;&NewLine;&Tab;&rcub;&NewLine;&rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><strong>person&period;csv<&sol;strong> &&num;8211&semi; This file holds sample data to be read&period; Create this file under <strong>data <&sol;strong>folder under <strong>src&sol;main&sol;resources<&sol;strong>&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>id&comma;firstName&comma;lastName&comma;birthdate&NewLine;1&comma;Neha&comma;Limay&comma;1964-10-19 14&colon;11&colon;03&NewLine;2&comma;Gaurav&comma;Nene&comma;1977-12-11 21&colon;44&colon;30&NewLine;3&comma;Sandeep&comma;Joshi&comma;1986-12-25 11&colon;54&colon;28&NewLine;4&comma;Parag&comma;Rane&comma;1959-07-24 06&colon;00&colon;16&NewLine;5&comma;Sachit&comma;Patil&comma;1956-09-14 06&colon;49&colon;28&NewLine;6&comma;Suchita&comma;Vinchurkar&comma;1984-08-30 04&colon;18&colon;10&NewLine;7&comma;Aditi&comma;Nerkar&comma;1973-02-04 05&colon;26&colon;05&NewLine;8&comma;Shankar&comma;Parate&comma;1953-04-26 11&colon;16&colon;26&NewLine;9&comma;Tania&comma;Datta&comma;1951-06-24 14&colon;56&colon;51&NewLine;10&comma;Sandhya&comma;Potthuri&comma;1953-08-27 13&colon;15&colon;08&NewLine;11&comma;Santosh&comma;Pande&comma;1957-09-05 21&colon;36&colon;47&NewLine;12&comma;Ajinkya&comma;Deshpande&comma;1979-01-21 18&colon;31&colon;27&NewLine;13&comma;Kiran&comma;Giradkar&comma;1965-07-18 15&colon;05&colon;22&NewLine;14&comma;Deepak&comma;Patil&comma;1990-09-11 15&colon;52&colon;54&NewLine;15&comma;Suraj&comma;Bhamre&comma;1979-06-01 06&colon;58&colon;54&NewLine;16&comma;Anup&comma;Tarone&comma;1990-07-02 17&colon;36&colon;35&NewLine;17&comma;Pradeep&comma;Rodge&comma;1959-12-19 20&colon;23&colon;12&NewLine;18&comma;Pawan&comma;Bawankar&comma;1984-12-27 10&colon;36&colon;49&NewLine;19&comma;Sheetal&comma;Kale&comma;1962-06-23 20&colon;03&colon;40&NewLine;20&comma;Reetisha&comma;Hedau&comma;1988-11-12 19&colon;05&colon;13<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><strong>schema&period;sql<&sol;strong> &&num;8211&semi; Please make sure to create the table before you run the app&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>CREATE TABLE &grave;person&grave; &lpar;&NewLine; &grave;id&grave; mediumint&lpar;8&rpar; unsigned NOT NULL&comma;&NewLine; &grave;firstName&grave; varchar&lpar;255&rpar; default NULL&comma;&NewLine; &grave;lastName&grave; varchar&lpar;255&rpar; default NULL&comma;&NewLine; &grave;birthdate&grave; varchar&lpar;255&rpar;&comma;&NewLine; PRIMARY KEY &lpar;&grave;id&grave;&rpar;&NewLine;&rpar; AUTO&lowbar;INCREMENT&equals;1&semi;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><strong>Console <&sol;strong>&&num;8211&semi; You should be able to see below logs&period; This shows batch job has executed successfully&period; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code> &period; &lowbar;&lowbar;&lowbar;&lowbar; &lowbar; &lowbar;&lowbar; &lowbar; &lowbar;&NewLine; &sol;&bsol;&bsol; &sol; &lowbar;&lowbar;&lowbar;'&lowbar; &lowbar;&lowbar; &lowbar; &lowbar;&lpar;&lowbar;&rpar;&lowbar; &lowbar;&lowbar; &lowbar;&lowbar; &lowbar; &bsol; &bsol; &bsol; &bsol;&NewLine;&lpar; &lpar; &rpar;&bsol;&lowbar;&lowbar;&lowbar; &vert; '&lowbar; &vert; '&lowbar;&vert; &vert; '&lowbar; &bsol;&sol; &lowbar;&grave; &vert; &bsol; &bsol; &bsol; &bsol;&NewLine; &bsol;&bsol;&sol; &lowbar;&lowbar;&lowbar;&rpar;&vert; &vert;&lowbar;&rpar;&vert; &vert; &vert; &vert; &vert; &vert;&vert; &lpar;&lowbar;&vert; &vert; &rpar; &rpar; &rpar; &rpar;&NewLine; ' &vert;&lowbar;&lowbar;&lowbar;&lowbar;&vert; &period;&lowbar;&lowbar;&vert;&lowbar;&vert; &vert;&lowbar;&vert;&lowbar;&vert; &vert;&lowbar;&bsol;&lowbar;&lowbar;&comma; &vert; &sol; &sol; &sol; &sol;&NewLine; &equals;&equals;&equals;&equals;&equals;&equals;&equals;&equals;&equals;&vert;&lowbar;&vert;&equals;&equals;&equals;&equals;&equals;&equals;&equals;&equals;&equals;&equals;&equals;&equals;&equals;&equals;&vert;&lowbar;&lowbar;&lowbar;&sol;&equals;&sol;&lowbar;&sol;&lowbar;&sol;&lowbar;&sol;&NewLine; &colon;&colon; Spring Boot &colon;&colon; &lpar;v2&period;1&period;1&period;RELEASE&rpar;&NewLine;&NewLine;2021-01-04 14&colon;31&colon;30&period;519 INFO 21148 --- &&num;091&semi; main&rsqb; i&period;s&period;batch&period;DatabaseOutputApplication &colon; Starting DatabaseOutputApplication on with PID 21148 &lpar;&rpar;&NewLine;2021-01-04 14&colon;31&colon;30&period;522 INFO 21148 --- &&num;091&semi; main&rsqb; i&period;s&period;batch&period;DatabaseOutputApplication &colon; No active profile set&comma; falling back to default profiles&colon; default&NewLine;2021-01-04 14&colon;31&colon;31&period;095 INFO 21148 --- &&num;091&semi; main&rsqb; com&period;zaxxer&period;hikari&period;HikariDataSource &colon; HikariPool-1 - Starting&period;&period;&period;&NewLine;2021-01-04 14&colon;31&colon;31&period;595 INFO 21148 --- &&num;091&semi; main&rsqb; com&period;zaxxer&period;hikari&period;HikariDataSource &colon; HikariPool-1 - Start completed&period;&NewLine;2021-01-04 14&colon;31&colon;31&period;725 INFO 21148 --- &&num;091&semi; main&rsqb; o&period;s&period;b&period;c&period;r&period;s&period;JobRepositoryFactoryBean &colon; No database type set&comma; using meta data indicating&colon; MYSQL&NewLine;2021-01-04 14&colon;31&colon;31&period;784 INFO 21148 --- &&num;091&semi; main&rsqb; o&period;s&period;b&period;c&period;l&period;support&period;SimpleJobLauncher &colon; No TaskExecutor has been set&comma; defaulting to synchronous executor&period;&NewLine;2021-01-04 14&colon;31&colon;31&period;885 INFO 21148 --- &&num;091&semi; main&rsqb; i&period;s&period;batch&period;DatabaseOutputApplication &colon; Started DatabaseOutputApplication in 1&period;574 seconds &lpar;JVM running for 2&period;627&rpar;&NewLine;2021-01-04 14&colon;31&colon;31&period;998 INFO 21148 --- &&num;091&semi; main&rsqb; o&period;s&period;b&period;c&period;l&period;support&period;SimpleJobLauncher &colon; Job&colon; &&num;091&semi;SimpleJob&colon; &&num;091&semi;name&equals;job&rsqb;&rsqb; launched with the following parameters&colon; &&num;091&semi;&lbrace;date&equals;874ffd69-f6d4-4f9c-b27a-c7dd692e969d&comma; JobId&equals;1609750891887&comma; time&equals;1609750891887&rcub;&rsqb;&NewLine;2021-01-04 14&colon;31&colon;32&period;034 INFO 21148 --- &&num;091&semi; main&rsqb; o&period;s&period;batch&period;core&period;job&period;SimpleStepHandler &colon; Executing step&colon; &&num;091&semi;step1&rsqb;&NewLine;2021-01-04 14&colon;31&colon;32&period;129 INFO 21148 --- &&num;091&semi; main&rsqb; o&period;s&period;b&period;c&period;l&period;support&period;SimpleJobLauncher &colon; Job&colon; &&num;091&semi;SimpleJob&colon; &&num;091&semi;name&equals;job&rsqb;&rsqb; completed with the following parameters&colon; &&num;091&semi;&lbrace;date&equals;874ffd69-f6d4-4f9c-b27a-c7dd692e969d&comma; JobId&equals;1609750891887&comma; time&equals;1609750891887&rcub;&rsqb; and the following status&colon; &&num;091&semi;COMPLETED&rsqb;&NewLine;STATUS &colon;&colon; COMPLETED&NewLine;2021-01-04 14&colon;31&colon;32&period;132 INFO 21148 --- &&num;091&semi; Thread-3&rsqb; com&period;zaxxer&period;hikari&period;HikariDataSource &colon; HikariPool-1 - Shutdown initiated&period;&period;&period;&NewLine;2021-01-04 14&colon;31&colon;32&period;135 INFO 21148 --- &&num;091&semi; Thread-3&rsqb; com&period;zaxxer&period;hikari&period;HikariDataSource &colon; HikariPool-1 - Shutdown completed&period;&NewLine;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Result from MySQL DB &&num;8211&semi; From the result we can conclude that Spring Batch has read the data from CSV file and loaded into MySQL DB&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>mysql&gt&semi; use test&semi;&NewLine;Database changed&NewLine;&NewLine;mysql&gt&semi; select &ast; from person&semi;&NewLine;&plus;----&plus;-----------&plus;------------&plus;-----------------------&plus;&NewLine;&vert; id &vert; firstName &vert; lastName &vert; birthdate &vert;&NewLine;&plus;----&plus;-----------&plus;------------&plus;-----------------------&plus;&NewLine;&vert; 1 &vert; Neha &vert; Limay &vert; 1964-10-19 14&colon;11&colon;03&period;0 &vert;&NewLine;&vert; 2 &vert; Gaurav &vert; Nene &vert; 1977-12-11 21&colon;44&colon;30&period;0 &vert;&NewLine;&vert; 3 &vert; Sandeep &vert; Joshi &vert; 1986-12-25 11&colon;54&colon;28&period;0 &vert;&NewLine;&vert; 4 &vert; Parag &vert; Rane &vert; 1959-07-24 06&colon;00&colon;16&period;0 &vert;&NewLine;&vert; 5 &vert; Sachit &vert; Patil &vert; 1956-09-14 06&colon;49&colon;28&period;0 &vert;&NewLine;&vert; 6 &vert; Suchita &vert; Vinchurkar &vert; 1984-08-30 04&colon;18&colon;10&period;0 &vert;&NewLine;&vert; 7 &vert; Aditi &vert; Nerkar &vert; 1973-02-04 05&colon;26&colon;05&period;0 &vert;&NewLine;&vert; 8 &vert; Shankar &vert; Parate &vert; 1953-04-26 11&colon;16&colon;26&period;0 &vert;&NewLine;&vert; 9 &vert; Tania &vert; Datta &vert; 1951-06-24 14&colon;56&colon;51&period;0 &vert;&NewLine;&vert; 10 &vert; Sandhya &vert; Potthuri &vert; 1953-08-27 13&colon;15&colon;08&period;0 &vert;&NewLine;&vert; 11 &vert; Santosh &vert; Pande &vert; 1957-09-05 21&colon;36&colon;47&period;0 &vert;&NewLine;&vert; 12 &vert; Ajinkya &vert; Deshpande &vert; 1979-01-21 18&colon;31&colon;27&period;0 &vert;&NewLine;&vert; 13 &vert; Kiran &vert; Giradkar &vert; 1965-07-18 15&colon;05&colon;22&period;0 &vert;&NewLine;&vert; 14 &vert; Deepak &vert; Patil &vert; 1990-09-11 15&colon;52&colon;54&period;0 &vert;&NewLine;&vert; 15 &vert; Suraj &vert; Bhamre &vert; 1979-06-01 06&colon;58&colon;54&period;0 &vert;&NewLine;&vert; 16 &vert; Anup &vert; Tarone &vert; 1990-07-02 17&colon;36&colon;35&period;0 &vert;&NewLine;&vert; 17 &vert; Pradeep &vert; Rodge &vert; 1959-12-19 20&colon;23&colon;12&period;0 &vert;&NewLine;&vert; 18 &vert; Pawan &vert; Bawankar &vert; 1984-12-27 10&colon;36&colon;49&period;0 &vert;&NewLine;&vert; 19 &vert; Sheetal &vert; Kale &vert; 1962-06-23 20&colon;03&colon;40&period;0 &vert;&NewLine;&vert; 20 &vert; Reetisha &vert; Hedau &vert; 1988-11-12 19&colon;05&colon;13&period;0 &vert;&NewLine;&plus;----&plus;-----------&plus;------------&plus;-----------------------&plus;&NewLine;20 rows in set &lpar;0&period;00 sec&rpar;<&sol;code><&sol;pre>&NewLine;<div class&equals;"wp-post-navigation"> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <div class&equals;"wp-post-navigation-pre"> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;whats-new-in-spring-framework-5x&sol;">Previous<&sol;a> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <&sol;div> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <div class&equals;"wp-post-navigation-next"> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;chaos-engineering-for-spring-boot-applications&sol;">Next<&sol;a> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab; <&sol;div> &NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;<&sol;div>&NewLine;<script type&equals;"text&sol;javascript">&NewLine;jQuery&lpar;document&rpar;&period;ready&lpar;function&lpar;&dollar;&rpar; &lbrace;&NewLine; &dollar;&period;post&lpar;'https&colon;&sol;&sol;dineshonjava&period;com&sol;wp-admin&sol;admin-ajax&period;php'&comma; &lbrace;action&colon; 'mts&lowbar;view&lowbar;count'&comma; id&colon; '4548'&rcub;&rpar;&semi;&NewLine;&rcub;&rpar;&semi;&NewLine;<&sol;script>

Dinesh Rajput

Dinesh Rajput is the chief editor of a website Dineshonjava, a technical blog dedicated to the Spring and Java technologies. It has a series of articles related to Java technologies. Dinesh has been a Spring enthusiast since 2008 and is a Pivotal Certified Spring Professional, an author of a book Spring 5 Design Pattern, and a blogger. He has more than 10 years of experience with different aspects of Spring and Java design and development. His core expertise lies in the latest version of Spring Framework, Spring Boot, Spring Security, creating REST APIs, Microservice Architecture, Reactive Pattern, Spring AOP, Design Patterns, Struts, Hibernate, Web Services, Spring Batch, Cassandra, MongoDB, and Web Application Design and Architecture. He is currently working as a technology manager at a leading product and web development company. He worked as a developer and tech lead at the Bennett, Coleman & Co. Ltd and was the first developer in his previous company, Paytm. Dinesh is passionate about the latest Java technologies and loves to write technical blogs related to it. He is a very active member of the Java and Spring community on different forums. When it comes to the Spring Framework and Java, Dinesh tops the list!

Share
Published by
Dinesh Rajput
Tags: Spring Batch

Recent Posts

Strategy Design PatternsĀ using Lambda

Strategy Design Patterns We can easily create a strategy design pattern using lambda. To implement…

4 years ago

Decorator Pattern using Lambda

Decorator Pattern A decorator pattern allows a user to add new functionality to an existing…

4 years ago

Delegating pattern using lambda

Delegating pattern In software engineering, the delegation pattern is an object-oriented design pattern that allows…

4 years ago

Spring Vs Django- Know The Difference Between The Two

Technology has emerged a lot in the last decade, and now we have artificial intelligence;…

4 years ago

TOP 20 MongoDB INTERVIEW QUESTIONS 2022

Managing a database is becoming increasingly complex now due to the vast amount of data…

4 years ago

Scheduler @Scheduled Annotation Spring Boot

Overview In this article, we will explore Spring Scheduler how we could use it by…

4 years ago