Skip to content

Commit 7fe2684

Browse files
committed
Initial commit
0 parents  commit 7fe2684

File tree

37 files changed

+1076
-0
lines changed

37 files changed

+1076
-0
lines changed

.gitignore

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
HELP.md
2+
.db-data
3+
.gradle
4+
build/
5+
!gradle/wrapper/gradle-wrapper.jar
6+
!**/src/main/**/build/
7+
!**/src/test/**/build/
8+
9+
### STS ###
10+
.apt_generated
11+
.classpath
12+
.factorypath
13+
.project
14+
.settings
15+
.springBeans
16+
.sts4-cache
17+
bin/
18+
!**/src/main/**/bin/
19+
!**/src/test/**/bin/
20+
21+
### IntelliJ IDEA ###
22+
.idea
23+
*.iws
24+
*.iml
25+
*.ipr
26+
out/
27+
!**/src/main/**/out/
28+
!**/src/test/**/out/
29+
30+
### NetBeans ###
31+
/nbproject/private/
32+
/nbbuild/
33+
/dist/
34+
/nbdist/
35+
/.nb-gradle/
36+
37+
### VS Code ###
38+
.vscode/

application-batch/build.gradle

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
plugins {
2+
id 'org.springframework.boot' version '3.2.3'
3+
id 'io.spring.dependency-management' version '1.1.4'
4+
id 'java-library'
5+
}
6+
7+
group = 'com.skt'
8+
version = '0.0.1-SNAPSHOT'
9+
sourceCompatibility = '17'
10+
11+
repositories {
12+
mavenCentral()
13+
}
14+
15+
dependencies {
16+
implementation 'org.springframework.boot:spring-boot-starter-batch'
17+
implementation 'org.springframework.boot:spring-boot-starter-validation'
18+
implementation project(':domain-mysql')
19+
implementation project(':etc-yaml-importer')
20+
testImplementation 'org.springframework.boot:spring-boot-starter-test'
21+
testImplementation 'org.springframework.batch:spring-batch-test'
22+
23+
compileOnly 'org.projectlombok:lombok'
24+
annotationProcessor 'org.projectlombok:lombok'
25+
testCompileOnly 'org.projectlombok:lombok'
26+
testAnnotationProcessor 'org.projectlombok:lombok'
27+
}
28+
29+
tasks.named('test') {
30+
useJUnitPlatform()
31+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.skt.applicationbatch;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
6+
@SpringBootApplication
7+
public class ApplicationBatchApplication {
8+
9+
public static void main(String[] args) {
10+
SpringApplication.run(ApplicationBatchApplication.class, args);
11+
}
12+
13+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.skt.applicationbatch.configure;
2+
3+
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
4+
import org.springframework.context.annotation.Configuration;
5+
6+
@EnableBatchProcessing
7+
@Configuration
8+
public class BatchProcessConfig {
9+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.skt.applicationbatch.job;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.springframework.batch.core.Job;
5+
import org.springframework.batch.core.Step;
6+
import org.springframework.batch.core.job.builder.JobBuilder;
7+
import org.springframework.batch.core.repository.JobRepository;
8+
import org.springframework.batch.core.step.builder.StepBuilder;
9+
import org.springframework.batch.core.step.tasklet.Tasklet;
10+
import org.springframework.batch.repeat.RepeatStatus;
11+
import org.springframework.context.annotation.Bean;
12+
import org.springframework.context.annotation.Configuration;
13+
import org.springframework.transaction.PlatformTransactionManager;
14+
15+
@Configuration
16+
@RequiredArgsConstructor
17+
public class SimpleJob {
18+
private final JobRepository jobRepository;
19+
private final PlatformTransactionManager transactionManager;
20+
21+
@Bean
22+
public Job simpleJobBean() {
23+
return new JobBuilder("simpleJob", jobRepository)
24+
.start(simpleStepBean())
25+
.build();
26+
}
27+
28+
@Bean
29+
public Step simpleStepBean() {
30+
return new StepBuilder("simpleStep", jobRepository)
31+
.tasklet(helloWorldTasklet(), transactionManager)
32+
.build();
33+
}
34+
35+
@Bean
36+
public Tasklet helloWorldTasklet() {
37+
return (contribution, chunkContext) -> {
38+
System.out.println("Hello, Spring Batch!");
39+
return RepeatStatus.FINISHED;
40+
};
41+
}
42+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
server:
2+
port: 8080
3+
4+
logging:
5+
level:
6+
root: debug
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
spring:
2+
profiles:
3+
active: local
4+
# batch:
5+
# job:
6+
# enabled: false
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.skt.applicationbatch;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.springframework.batch.core.Job;
5+
import org.springframework.batch.core.JobExecution;
6+
import org.springframework.batch.core.StepExecution;
7+
import org.springframework.batch.core.launch.JobLauncher;
8+
import org.springframework.batch.core.repository.JobRepository;
9+
import org.springframework.batch.test.JobLauncherTestUtils;
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.context.ApplicationContext;
12+
import org.springframework.core.env.ConfigurableEnvironment;
13+
import org.springframework.stereotype.Component;
14+
15+
import java.util.Arrays;
16+
17+
@Slf4j
18+
@Component
19+
public class JobTestUtils {
20+
@Autowired
21+
private ApplicationContext applicationContext;
22+
@Autowired
23+
private JobRepository jobRepository;
24+
@Autowired
25+
private JobLauncher jobLauncher;
26+
@Autowired
27+
private ConfigurableEnvironment env;
28+
29+
public JobLauncherTestUtils getJobTester(String jobName) {
30+
Job job = applicationContext.getBean(jobName, Job.class);
31+
JobLauncherTestUtils jobLauncherTestUtils = new JobLauncherTestUtils();
32+
jobLauncherTestUtils.setJob(job);
33+
jobLauncherTestUtils.setJobRepository(jobRepository);
34+
jobLauncherTestUtils.setJobLauncher(jobLauncher);
35+
return jobLauncherTestUtils;
36+
}
37+
38+
public void loggingJobExecution(JobExecution jobExecution) {
39+
log.info("active profiles : {}", Arrays.toString(env.getActiveProfiles()));
40+
41+
StringBuilder b = new StringBuilder();
42+
b.append("Steps Information").append('\n');
43+
44+
int i = 1;
45+
46+
for (StepExecution step : jobExecution.getStepExecutions()) {
47+
b.append("Step").append(i++).append(" name=").append(step.getStepName()).append("\n")
48+
.append("\tread:").append(step.getReadCount()).append('\n')
49+
.append("\tread skip:").append(step.getReadSkipCount()).append('\n')
50+
.append("\tproc skip:").append(step.getProcessSkipCount()).append('\n')
51+
.append("\tfilter:").append(step.getFilterCount()).append('\n')
52+
.append("\twrite:").append(step.getWriteCount()).append('\n')
53+
.append("\twrite skip:").append(step.getWriteSkipCount()).append('\n');
54+
}
55+
56+
log.info(b.toString());
57+
}
58+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.skt.applicationbatch.job.cursorvspaging;
2+
3+
import com.skt.applicationbatch.JobTestUtils;
4+
import org.junit.jupiter.api.Test;
5+
import org.springframework.batch.core.JobExecution;
6+
import org.springframework.batch.core.JobParametersBuilder;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.boot.test.context.SpringBootTest;
9+
10+
import java.util.HashMap;
11+
import java.util.Map;
12+
13+
@SpringBootTest
14+
class CursorJobConfigTest {
15+
@Autowired
16+
private JobTestUtils jobTestUtils;
17+
18+
@Test
19+
public void testCursorJob() throws Exception {
20+
JobParametersBuilder paramBuilder = new JobParametersBuilder();
21+
paramBuilder.addLong("ts", System.currentTimeMillis());
22+
23+
Map<String, String> param = new HashMap<>();
24+
param.forEach(paramBuilder::addString);
25+
26+
JobExecution jobExecution = jobTestUtils.getJobTester("cursorTestJob")
27+
.launchJob(paramBuilder.toJobParameters());
28+
29+
jobTestUtils.loggingJobExecution(jobExecution);
30+
}
31+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.skt.applicationbatch.job.cursorvspaging;
2+
3+
import com.skt.applicationbatch.JobTestUtils;
4+
import org.junit.jupiter.api.Test;
5+
import org.springframework.batch.core.JobExecution;
6+
import org.springframework.batch.core.JobParametersBuilder;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.boot.test.context.SpringBootTest;
9+
10+
import java.util.HashMap;
11+
import java.util.Map;
12+
13+
@SpringBootTest
14+
class PagingJobConfigTest {
15+
@Autowired
16+
private JobTestUtils jobTestUtils;
17+
18+
@Test
19+
public void testPagingJob() throws Exception {
20+
JobParametersBuilder paramBuilder = new JobParametersBuilder();
21+
paramBuilder.addLong("ts", System.currentTimeMillis());
22+
23+
Map<String, String> param = new HashMap<>();
24+
param.forEach(paramBuilder::addString);
25+
26+
JobExecution jobExecution = jobTestUtils.getJobTester("pagingTestJob")
27+
.launchJob(paramBuilder.toJobParameters());
28+
29+
jobTestUtils.loggingJobExecution(jobExecution);
30+
}
31+
}

0 commit comments

Comments
 (0)