Merge remote-tracking branch 'eugenp/master'
This commit is contained in:
		
						commit
						99bad7dfeb
					
				| @ -6,7 +6,7 @@ public class ServiceMain { | ||||
| 
 | ||||
|     public static void main(String[] args) throws InterruptedException { | ||||
|         ProcessHandle thisProcess = ProcessHandle.current(); | ||||
|         long pid = thisProcess.getPid(); | ||||
|         long pid = thisProcess.pid(); | ||||
| 
 | ||||
|         Optional<String[]> opArgs = Optional.ofNullable(args); | ||||
|         String procName = opArgs.map(str -> str.length > 0 ? str[0] : null).orElse(System.getProperty("sun.java.command")); | ||||
|  | ||||
| @ -10,7 +10,7 @@ import static org.hamcrest.Matchers.*; | ||||
| import static org.hamcrest.MatcherAssert.assertThat; | ||||
| 
 | ||||
| public class Java9ObjectsAPIUnitTest { | ||||
| 
 | ||||
|      | ||||
|     @Test | ||||
|     public void givenNullObject_whenRequireNonNullElse_thenElse(){ | ||||
|         assertThat(Objects.<List>requireNonNullElse(null, Collections.EMPTY_LIST), | ||||
| @ -23,6 +23,11 @@ public class Java9ObjectsAPIUnitTest { | ||||
|                 Collections.EMPTY_LIST), is(List.of("item1", "item2"))); | ||||
|     } | ||||
| 
 | ||||
|     @Test(expected = NullPointerException.class) | ||||
|     public void givenNull_whenRequireNonNullElse_thenException(){ | ||||
|         Objects.<List>requireNonNullElse(null, null); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenObject_whenRequireNonNullElseGet_thenObject(){ | ||||
|         assertThat(Objects.<List>requireNonNullElseGet(null, List::of), | ||||
| @ -32,40 +37,39 @@ public class Java9ObjectsAPIUnitTest { | ||||
|     @Test | ||||
|     public void givenNumber_whenInvokeCheckIndex_thenNumber(){ | ||||
|         int length = 5; | ||||
| 
 | ||||
|         assertThat(Objects.checkIndex(4, length), is(4)); | ||||
| 
 | ||||
|         try{ | ||||
|             Objects.checkIndex(5, length); | ||||
|         }catch(Exception ex){ | ||||
|             assertThat(ex, instanceOf(IndexOutOfBoundsException.class)); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Test(expected = IndexOutOfBoundsException.class) | ||||
|     public void givenOutOfRangeNumber_whenInvokeCheckIndex_thenException(){ | ||||
|         int length = 5; | ||||
|         Objects.checkIndex(5, length); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenSubRange_whenCheckFromToIndex_thenNumber(){ | ||||
|         int length = 6; | ||||
| 
 | ||||
|         assertThat(Objects.checkFromToIndex(2,length,length), is(2)); | ||||
| 
 | ||||
|         try{ | ||||
|             Objects.checkFromToIndex(2,7,length); | ||||
|         }catch(Exception ex){ | ||||
|             assertThat(ex, instanceOf(IndexOutOfBoundsException.class)); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void giveSubRange_whenCheckFromIndexSize_thenNumber(){ | ||||
|     @Test(expected = IndexOutOfBoundsException.class) | ||||
|     public void givenInvalidSubRange_whenCheckFromToIndex_thenException(){ | ||||
|         int length = 6; | ||||
|         Objects.checkFromToIndex(2,7,length); | ||||
|     } | ||||
| 
 | ||||
|         assertThat(Objects.checkFromToIndex(2,5,length), is(2)); | ||||
| 
 | ||||
|         try{ | ||||
|             Objects.checkFromToIndex(2,6,length); | ||||
|         }catch(Exception ex){ | ||||
|             assertThat(ex, instanceOf(IndexOutOfBoundsException.class)); | ||||
|         } | ||||
|     @Test | ||||
|     public void givenSubRange_whenCheckFromIndexSize_thenNumber(){ | ||||
|         int length = 6; | ||||
|         assertThat(Objects.checkFromIndexSize(2,3,length), is(2)); | ||||
|     } | ||||
| 
 | ||||
|     @Test(expected = IndexOutOfBoundsException.class) | ||||
|     public void givenInvalidSubRange_whenCheckFromIndexSize_thenException(){ | ||||
|         int length = 6; | ||||
|         Objects.checkFromIndexSize(2, 6, length); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -29,6 +29,8 @@ | ||||
| - [Introduction to Neuroph](http://www.baeldung.com/intro-to-neuroph) | ||||
| - [Guide to Apache Commons CircularFifoQueue](http://www.baeldung.com/commons-circular-fifo-queue) | ||||
| - [Quick Guide to RSS with Rome](http://www.baeldung.com/rome-rss) | ||||
| - [Introduction to NoException](http://www.baeldung.com/intrduction-to-noexception) | ||||
| 
 | ||||
| 
 | ||||
| The libraries module contains examples related to small libraries that are relatively easy to use and does not require any separate module of its own. | ||||
| 
 | ||||
|  | ||||
| @ -462,6 +462,11 @@ | ||||
| 			<artifactId>pcollections</artifactId> | ||||
| 			<version>${pcollections.version}</version> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>com.machinezoo.noexception</groupId> | ||||
| 			<artifactId>noexception</artifactId> | ||||
| 			<version>1.1.0</version> | ||||
| 		</dependency> | ||||
|     <dependency> | ||||
| 			<groupId>org.eclipse.collections</groupId> | ||||
| 			<artifactId>eclipse-collections</artifactId> | ||||
| @ -510,4 +515,4 @@ | ||||
| 		<rome.version>1.0</rome.version> | ||||
|     <eclipse-collections.version>8.2.0</eclipse-collections.version> | ||||
| 	</properties> | ||||
| </project> | ||||
| </project> | ||||
|  | ||||
| @ -0,0 +1,24 @@ | ||||
| package com.baeldung.noexception; | ||||
| 
 | ||||
| import com.machinezoo.noexception.ExceptionHandler; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| 
 | ||||
| public class CustomExceptionHandler extends ExceptionHandler { | ||||
| 
 | ||||
|     private Logger logger = LoggerFactory.getLogger(CustomExceptionHandler.class); | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean handle(Throwable throwable) { | ||||
| 
 | ||||
|         if (throwable.getClass() | ||||
|             .isAssignableFrom(RuntimeException.class) | ||||
|             || throwable.getClass() | ||||
|                 .isAssignableFrom(Error.class)) { | ||||
|             return false; | ||||
|         } else { | ||||
|             logger.error("Caught Exception ", throwable); | ||||
|             return true; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,62 @@ | ||||
| package com.baeldung.noexception; | ||||
| 
 | ||||
| import com.machinezoo.noexception.Exceptions; | ||||
| import org.junit.Test; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| 
 | ||||
| public class NoExceptionUnitTest { | ||||
| 
 | ||||
|     private static Logger logger = LoggerFactory.getLogger(NoExceptionUnitTest.class); | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenStdExceptionHandling_thenCatchAndLog() { | ||||
|         try { | ||||
|             System.out.println("Result is " + Integer.parseInt("foobar")); | ||||
|         } catch (Throwable exception) { | ||||
|             logger.error("Caught exception:", exception); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenDefaultNoException_thenCatchAndLog() { | ||||
|         Exceptions.log().run(() -> System.out.println("Result is " + Integer.parseInt("foobar"))); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenLogger_whenDefaultNoException_thenCatchAndLogWithClassName() { | ||||
|         Exceptions.log(logger).run(() -> System.out.println("Result is " + Integer.parseInt("foobar"))); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenLoggerAndMessage_whenDefaultNoException_thenCatchAndLogWithMessage() { | ||||
|         Exceptions.log(logger, "Something went wrong:").run(() -> System.out.println("Result is " + Integer.parseInt("foobar"))); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenDefaultValue_whenDefaultNoException_thenCatchAndLogPrintDefault() { | ||||
|         System.out.println("Result is " + Exceptions.log(logger, "Something went wrong:").get(() -> Integer.parseInt("foobar")).orElse(-1)); | ||||
|     } | ||||
| 
 | ||||
|     @Test(expected = Error.class) | ||||
|     public void givenCustomHandler_whenError_thenRethrowError() { | ||||
|         CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); | ||||
|         customExceptionHandler.run(() -> throwError()); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenCustomHandler_whenException_thenCatchAndLog() { | ||||
|         CustomExceptionHandler customExceptionHandler = new CustomExceptionHandler(); | ||||
|         customExceptionHandler.run(() -> throwException()); | ||||
|     } | ||||
| 
 | ||||
|     private static void throwError() { | ||||
|         throw new Error("This is very bad."); | ||||
|     } | ||||
| 
 | ||||
|     private static void throwException() { | ||||
|         String testString = "foo"; | ||||
|         testString.charAt(5); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,77 @@ | ||||
| /* | ||||
|  * Copyright 2006-2013 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *      http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package org.baeldung.spring_batch_intro.partitioner; | ||||
| 
 | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| import org.springframework.batch.core.partition.support.Partitioner; | ||||
| import org.springframework.batch.item.ExecutionContext; | ||||
| import org.springframework.core.io.Resource; | ||||
| import org.springframework.util.Assert; | ||||
| 
 | ||||
| public class CustomMultiResourcePartitioner implements Partitioner { | ||||
| 
 | ||||
|     private static final String DEFAULT_KEY_NAME = "fileName"; | ||||
| 
 | ||||
|     private static final String PARTITION_KEY = "partition"; | ||||
| 
 | ||||
|     private Resource[] resources = new Resource[0]; | ||||
| 
 | ||||
|     private String keyName = DEFAULT_KEY_NAME; | ||||
| 
 | ||||
|     /** | ||||
|      * The resources to assign to each partition. In Spring configuration you | ||||
|      * can use a pattern to select multiple resources. | ||||
|      * @param resources the resources to use | ||||
|      */ | ||||
|     public void setResources(Resource[] resources) { | ||||
|         this.resources = resources; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * The name of the key for the file name in each {@link ExecutionContext}. | ||||
|      * Defaults to "fileName". | ||||
|      * @param keyName the value of the key | ||||
|      */ | ||||
|     public void setKeyName(String keyName) { | ||||
|         this.keyName = keyName; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Assign the filename of each of the injected resources to an | ||||
|      * {@link ExecutionContext}. | ||||
|      * | ||||
|      * @see Partitioner#partition(int) | ||||
|      */ | ||||
|     @Override | ||||
|     public Map<String, ExecutionContext> partition(int gridSize) { | ||||
|         Map<String, ExecutionContext> map = new HashMap<String, ExecutionContext>(gridSize); | ||||
|         int i = 0, k = 1; | ||||
|         for (Resource resource : resources) { | ||||
|             ExecutionContext context = new ExecutionContext(); | ||||
|             Assert.state(resource.exists(), "Resource does not exist: " + resource); | ||||
|             context.putString(keyName, resource.getFilename()); | ||||
|             context.putString("opFileName", "output" + k++ + ".xml"); | ||||
| 
 | ||||
|             map.put(PARTITION_KEY + i, context); | ||||
|             i++; | ||||
|         } | ||||
|         return map; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,169 @@ | ||||
| package org.baeldung.spring_batch_intro.partitioner; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| import java.net.MalformedURLException; | ||||
| import java.text.ParseException; | ||||
| 
 | ||||
| import javax.sql.DataSource; | ||||
| 
 | ||||
| import org.baeldung.spring_batch_intro.model.Transaction; | ||||
| import org.baeldung.spring_batch_intro.service.RecordFieldSetMapper; | ||||
| import org.springframework.batch.core.Job; | ||||
| import org.springframework.batch.core.Step; | ||||
| import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; | ||||
| import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; | ||||
| import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; | ||||
| import org.springframework.batch.core.configuration.annotation.StepScope; | ||||
| import org.springframework.batch.core.launch.JobLauncher; | ||||
| import org.springframework.batch.core.launch.support.SimpleJobLauncher; | ||||
| import org.springframework.batch.core.repository.JobRepository; | ||||
| import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean; | ||||
| import org.springframework.batch.item.UnexpectedInputException; | ||||
| import org.springframework.batch.item.file.FlatFileItemReader; | ||||
| import org.springframework.batch.item.file.mapping.DefaultLineMapper; | ||||
| import org.springframework.batch.item.file.transform.DelimitedLineTokenizer; | ||||
| import org.springframework.batch.item.xml.StaxEventItemWriter; | ||||
| import org.springframework.batch.support.transaction.ResourcelessTransactionManager; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.beans.factory.annotation.Value; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.core.io.ClassPathResource; | ||||
| import org.springframework.core.io.FileSystemResource; | ||||
| import org.springframework.core.io.Resource; | ||||
| import org.springframework.core.io.support.ResourcePatternResolver; | ||||
| import org.springframework.core.task.TaskExecutor; | ||||
| import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; | ||||
| import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; | ||||
| import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; | ||||
| import org.springframework.oxm.Marshaller; | ||||
| import org.springframework.oxm.jaxb.Jaxb2Marshaller; | ||||
| import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; | ||||
| import org.springframework.transaction.PlatformTransactionManager; | ||||
| 
 | ||||
| @Configuration | ||||
| @EnableBatchProcessing | ||||
| public class SpringbatchPartitionConfig { | ||||
| 
 | ||||
|     @Autowired | ||||
|     ResourcePatternResolver resoursePatternResolver; | ||||
| 
 | ||||
|     @Autowired | ||||
|     private JobBuilderFactory jobs; | ||||
| 
 | ||||
|     @Autowired | ||||
|     private StepBuilderFactory steps; | ||||
| 
 | ||||
|     @Bean(name = "partitionerJob") | ||||
|     public Job partitionerJob() throws UnexpectedInputException, MalformedURLException, ParseException { | ||||
|         return jobs.get("partitionerJob") | ||||
|             .start(partitionStep()) | ||||
|             .build(); | ||||
|     } | ||||
| 
 | ||||
|     @Bean | ||||
|     public Step partitionStep() throws UnexpectedInputException, MalformedURLException, ParseException { | ||||
|         return steps.get("partitionStep") | ||||
|             .partitioner("slaveStep", partitioner()) | ||||
|             .step(slaveStep()) | ||||
|             .taskExecutor(taskExecutor()) | ||||
|             .build(); | ||||
|     } | ||||
| 
 | ||||
|     @Bean | ||||
|     public Step slaveStep() throws UnexpectedInputException, MalformedURLException, ParseException { | ||||
|         return steps.get("slaveStep") | ||||
|             .<Transaction, Transaction> chunk(1) | ||||
|             .reader(itemReader(null)) | ||||
|             .writer(itemWriter(marshaller(), null)) | ||||
|             .build(); | ||||
|     } | ||||
| 
 | ||||
|     @Bean | ||||
|     public CustomMultiResourcePartitioner partitioner() { | ||||
|         CustomMultiResourcePartitioner partitioner = new CustomMultiResourcePartitioner(); | ||||
|         Resource[] resources; | ||||
|         try { | ||||
|             resources = resoursePatternResolver.getResources("file:src/main/resources/input/partitioner/*.csv"); | ||||
|         } catch (IOException e) { | ||||
|             throw new RuntimeException("I/O problems when resolving the input file pattern.", e); | ||||
|         } | ||||
|         partitioner.setResources(resources); | ||||
|         return partitioner; | ||||
|     } | ||||
| 
 | ||||
|     @Bean | ||||
|     @StepScope | ||||
|     public FlatFileItemReader<Transaction> itemReader(@Value("#{stepExecutionContext[fileName]}") String filename) throws UnexpectedInputException, ParseException { | ||||
|         FlatFileItemReader<Transaction> reader = new FlatFileItemReader<Transaction>(); | ||||
|         DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer(); | ||||
|         String[] tokens = { "username", "userid", "transactiondate", "amount" }; | ||||
|         tokenizer.setNames(tokens); | ||||
|         reader.setResource(new ClassPathResource("input/partitioner/" + filename)); | ||||
|         DefaultLineMapper<Transaction> lineMapper = new DefaultLineMapper<Transaction>(); | ||||
|         lineMapper.setLineTokenizer(tokenizer); | ||||
|         lineMapper.setFieldSetMapper(new RecordFieldSetMapper()); | ||||
|         reader.setLinesToSkip(1); | ||||
|         reader.setLineMapper(lineMapper); | ||||
|         return reader; | ||||
|     } | ||||
| 
 | ||||
|     @Bean(destroyMethod = "") | ||||
|     @StepScope | ||||
|     public StaxEventItemWriter<Transaction> itemWriter(Marshaller marshaller, @Value("#{stepExecutionContext[opFileName]}") String filename) throws MalformedURLException { | ||||
|         StaxEventItemWriter<Transaction> itemWriter = new StaxEventItemWriter<>(); | ||||
|         itemWriter.setMarshaller(marshaller); | ||||
|         itemWriter.setRootTagName("transactionRecord"); | ||||
|         itemWriter.setResource(new FileSystemResource("src/main/resources/output/" + filename)); | ||||
|         return itemWriter; | ||||
|     } | ||||
| 
 | ||||
|     @Bean | ||||
|     public Marshaller marshaller() { | ||||
|         Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); | ||||
|         marshaller.setClassesToBeBound(new Class[] { Transaction.class }); | ||||
|         return marshaller; | ||||
|     } | ||||
| 
 | ||||
|     @Bean | ||||
|     public TaskExecutor taskExecutor() { | ||||
|         ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); | ||||
|         taskExecutor.setMaxPoolSize(5); | ||||
|         taskExecutor.setCorePoolSize(5); | ||||
|         taskExecutor.setQueueCapacity(5); | ||||
|         taskExecutor.afterPropertiesSet(); | ||||
|         return taskExecutor; | ||||
|     } | ||||
| 
 | ||||
|     private JobRepository getJobRepository() throws Exception { | ||||
|         JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean(); | ||||
|         factory.setDataSource(dataSource()); | ||||
|         factory.setTransactionManager(getTransactionManager()); | ||||
|         // JobRepositoryFactoryBean's methods Throws Generic Exception, | ||||
|         // it would have been better to have a specific one | ||||
|         factory.afterPropertiesSet(); | ||||
|         return (JobRepository) factory.getObject(); | ||||
|     } | ||||
| 
 | ||||
|     private DataSource dataSource() { | ||||
|         EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); | ||||
|         EmbeddedDatabase db = builder.setType(EmbeddedDatabaseType.HSQL) | ||||
|             .addScript("classpath:org/springframework/batch/core/schema-drop-h2.sql") | ||||
|             .addScript("classpath:org/springframework/batch/core/schema-h2.sql") | ||||
|             .build(); | ||||
|         return db; | ||||
|     } | ||||
| 
 | ||||
|     private PlatformTransactionManager getTransactionManager() { | ||||
|         return new ResourcelessTransactionManager(); | ||||
|     } | ||||
| 
 | ||||
|     public JobLauncher getJobLauncher() throws Exception { | ||||
|         SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); | ||||
|         // SimpleJobLauncher's methods Throws Generic Exception, | ||||
|         // it would have been better to have a specific one | ||||
|         jobLauncher.setJobRepository(getJobRepository()); | ||||
|         jobLauncher.afterPropertiesSet(); | ||||
|         return jobLauncher; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,28 @@ | ||||
| package org.baeldung.spring_batch_intro.partitioner; | ||||
| 
 | ||||
| import org.springframework.batch.core.Job; | ||||
| import org.springframework.batch.core.JobExecution; | ||||
| import org.springframework.batch.core.JobParameters; | ||||
| import org.springframework.batch.core.launch.JobLauncher; | ||||
| import org.springframework.context.annotation.AnnotationConfigApplicationContext; | ||||
| 
 | ||||
| public class SpringbatchPartitionerApp { | ||||
|     public static void main(final String[] args) { | ||||
|         // Spring Java config | ||||
|         final AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); | ||||
|         context.register(SpringbatchPartitionConfig.class); | ||||
|         context.refresh(); | ||||
| 
 | ||||
|         final JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher"); | ||||
|         final Job job = (Job) context.getBean("partitionerJob"); | ||||
|         System.out.println("Starting the batch job"); | ||||
|         try { | ||||
|             final JobExecution execution = jobLauncher.run(job, new JobParameters()); | ||||
|             System.out.println("Job Status : " + execution.getStatus()); | ||||
|             System.out.println("Job succeeded"); | ||||
|         } catch (final Exception e) { | ||||
|             e.printStackTrace(); | ||||
|             System.out.println("Job failed"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,4 @@ | ||||
| username, user_id, transaction_date, transaction_amount | ||||
| devendra, 1234, 31/10/2015, 10000 | ||||
| john, 2134, 3/12/2015, 12321 | ||||
| robin, 2134, 2/02/2015, 23411 | ||||
| 
 | 
| @ -0,0 +1,4 @@ | ||||
| username, user_id, transaction_date, transaction_amount | ||||
| devendra, 1234, 31/10/2015, 10000 | ||||
| john, 2134, 3/12/2015, 12321 | ||||
| robin, 2134, 2/02/2015, 23411 | ||||
| 
 | 
| @ -0,0 +1,4 @@ | ||||
| username, user_id, transaction_date, transaction_amount | ||||
| devendra, 1234, 31/10/2015, 10000 | ||||
| john, 2134, 3/12/2015, 12321 | ||||
| robin, 2134, 2/02/2015, 23411 | ||||
| 
 | 
| @ -0,0 +1,4 @@ | ||||
| username, user_id, transaction_date, transaction_amount | ||||
| devendra, 1234, 31/10/2015, 10000 | ||||
| john, 2134, 3/12/2015, 12321 | ||||
| robin, 2134, 2/02/2015, 23411 | ||||
| 
 | 
| @ -0,0 +1,4 @@ | ||||
| username, user_id, transaction_date, transaction_amount | ||||
| devendra, 1234, 31/10/2015, 10000 | ||||
| john, 2134, 3/12/2015, 12321 | ||||
| robin, 2134, 2/02/2015, 23411 | ||||
| 
 | 
							
								
								
									
										21
									
								
								spring-batch/src/main/resources/output/output1.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								spring-batch/src/main/resources/output/output1.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <transactionRecord> | ||||
| 	<transactionRecord> | ||||
| 		<amount>10000.0</amount> | ||||
| 		<transactionDate>2015-10-31T00:00:00+05:30</transactionDate> | ||||
| 		<userId>1234</userId> | ||||
| 		<username>devendra</username> | ||||
| 	</transactionRecord> | ||||
| 	<transactionRecord> | ||||
| 		<amount>12321.0</amount> | ||||
| 		<transactionDate>2015-12-03T00:00:00+05:30</transactionDate> | ||||
| 		<userId>2134</userId> | ||||
| 		<username>john</username> | ||||
| 	</transactionRecord> | ||||
| 	<transactionRecord> | ||||
| 		<amount>23411.0</amount> | ||||
| 		<transactionDate>2015-02-02T00:00:00+05:30</transactionDate> | ||||
| 		<userId>2134</userId> | ||||
| 		<username>robin</username> | ||||
| 	</transactionRecord> | ||||
| </transactionRecord> | ||||
							
								
								
									
										21
									
								
								spring-batch/src/main/resources/output/output2.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								spring-batch/src/main/resources/output/output2.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <transactionRecord> | ||||
| 	<transactionRecord> | ||||
| 		<amount>10000.0</amount> | ||||
| 		<transactionDate>2015-10-31T00:00:00+05:30</transactionDate> | ||||
| 		<userId>1234</userId> | ||||
| 		<username>devendra</username> | ||||
| 	</transactionRecord> | ||||
| 	<transactionRecord> | ||||
| 		<amount>12321.0</amount> | ||||
| 		<transactionDate>2015-12-03T00:00:00+05:30</transactionDate> | ||||
| 		<userId>2134</userId> | ||||
| 		<username>john</username> | ||||
| 	</transactionRecord> | ||||
| 	<transactionRecord> | ||||
| 		<amount>23411.0</amount> | ||||
| 		<transactionDate>2015-02-02T00:00:00+05:30</transactionDate> | ||||
| 		<userId>2134</userId> | ||||
| 		<username>robin</username> | ||||
| 	</transactionRecord> | ||||
| </transactionRecord> | ||||
							
								
								
									
										21
									
								
								spring-batch/src/main/resources/output/output3.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								spring-batch/src/main/resources/output/output3.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <transactionRecord> | ||||
| 	<transactionRecord> | ||||
| 		<amount>10000.0</amount> | ||||
| 		<transactionDate>2015-10-31T00:00:00+05:30</transactionDate> | ||||
| 		<userId>1234</userId> | ||||
| 		<username>devendra</username> | ||||
| 	</transactionRecord> | ||||
| 	<transactionRecord> | ||||
| 		<amount>12321.0</amount> | ||||
| 		<transactionDate>2015-12-03T00:00:00+05:30</transactionDate> | ||||
| 		<userId>2134</userId> | ||||
| 		<username>john</username> | ||||
| 	</transactionRecord> | ||||
| 	<transactionRecord> | ||||
| 		<amount>23411.0</amount> | ||||
| 		<transactionDate>2015-02-02T00:00:00+05:30</transactionDate> | ||||
| 		<userId>2134</userId> | ||||
| 		<username>robin</username> | ||||
| 	</transactionRecord> | ||||
| </transactionRecord> | ||||
							
								
								
									
										21
									
								
								spring-batch/src/main/resources/output/output4.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								spring-batch/src/main/resources/output/output4.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <transactionRecord> | ||||
| 	<transactionRecord> | ||||
| 		<amount>10000.0</amount> | ||||
| 		<transactionDate>2015-10-31T00:00:00+05:30</transactionDate> | ||||
| 		<userId>1234</userId> | ||||
| 		<username>devendra</username> | ||||
| 	</transactionRecord> | ||||
| 	<transactionRecord> | ||||
| 		<amount>12321.0</amount> | ||||
| 		<transactionDate>2015-12-03T00:00:00+05:30</transactionDate> | ||||
| 		<userId>2134</userId> | ||||
| 		<username>john</username> | ||||
| 	</transactionRecord> | ||||
| 	<transactionRecord> | ||||
| 		<amount>23411.0</amount> | ||||
| 		<transactionDate>2015-02-02T00:00:00+05:30</transactionDate> | ||||
| 		<userId>2134</userId> | ||||
| 		<username>robin</username> | ||||
| 	</transactionRecord> | ||||
| </transactionRecord> | ||||
							
								
								
									
										21
									
								
								spring-batch/src/main/resources/output/output5.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								spring-batch/src/main/resources/output/output5.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <transactionRecord> | ||||
| 	<transactionRecord> | ||||
| 		<amount>10000.0</amount> | ||||
| 		<transactionDate>2015-10-31T00:00:00+05:30</transactionDate> | ||||
| 		<userId>1234</userId> | ||||
| 		<username>devendra</username> | ||||
| 	</transactionRecord> | ||||
| 	<transactionRecord> | ||||
| 		<amount>12321.0</amount> | ||||
| 		<transactionDate>2015-12-03T00:00:00+05:30</transactionDate> | ||||
| 		<userId>2134</userId> | ||||
| 		<username>john</username> | ||||
| 	</transactionRecord> | ||||
| 	<transactionRecord> | ||||
| 		<amount>23411.0</amount> | ||||
| 		<transactionDate>2015-02-02T00:00:00+05:30</transactionDate> | ||||
| 		<userId>2134</userId> | ||||
| 		<username>robin</username> | ||||
| 	</transactionRecord> | ||||
| </transactionRecord> | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user