2024-07-31-TIL
2024-07-31-TIL
Today I Learned
예치금
- https://blog.naver.com/tepasa/222058610867
원장 데이터
- https://brunch.co.kr/@ravi-y-kim/2
이력 유형
- https://dataonair.or.kr/db-tech-reference/d-lounge/expert-column/?mod=document&uid=52906#:~:text=%EC%9D%B4%EB%A0%A5%EC%9D%80%20%EC%8B%9C%EA%B0%84%EC%97%90%20%EB%94%B0%EB%9D%BC,%EC%97%90%20%EC%A0%95%EB%B3%B4%EA%B0%80%20%EB%B0%9C%EC%83%9D%EB%90%9C%EB%8B%A4.
sLock vs xLock
- https://jaeseongdev.github.io/development/2021/06/16/Lock%EC%9D%98-%EC%A2%85%EB%A5%98-(Shared-Lock,-Exclusive-Lock,-Record-Lock,-Gap-Lock,-Next-key-Lock)/
- https://velog.io/@soongjamm/Select-%EC%BF%BC%EB%A6%AC%EB%8A%94-S%EB%9D%BD%EC%9D%B4-%EC%95%84%EB%8B%88%EB%8B%A4.-X%EB%9D%BD%EA%B3%BC-S%EB%9D%BD%EC%9D%98-%EC%B0%A8%EC%9D%B4
- https://velog.io/@impala/DB-Concurrency-Control
Billing System Design
- https://vertabelo.com/blog/billing-system-database-model/
- https://www.slideteam.net/system-architecture-of-billing-software.html
- http://www.siplnet.com/CallBilling/Prod_TechArch.aspx?Mode=
- https://mecha-mind.medium.com/system-design-billing-system-844047e916ff
Payment System Design
- https://medium.com/@sriram.inc/payment-processing-architecture-9651e7292b0c
- https://medium.com/@erande.kedar/payment-system-architecture-3040b323368a
- https://newsletter.pragmaticengineer.com/p/designing-a-payment-system
- https://www.oreilly.com/library/view/hacking-point-of/9781118810071/9781118810071c02.xhtml
- https://hazelcast.com/use-cases/payment-processing/
- https://devoxsoftware.com/blog/the-2022-manual-to-payment-system-architecture/
Settlement System Design
- https://forum.interledger.org/t/settlement-architecture/545
- https://greypencil.tistory.com/87
Inventory Management System Design
- https://vertabelo.com/blog/data-model-for-inventory-management-system/
Java ExecutorService
- https://www.baeldung.com/java-executor-service-tutorial
- https://mangkyu.tistory.com/259
Spring Batch Step
스프링 배치(Spring Batch)에서 잡(Job)을 순서대로 진행하려면 여러 방법이 있지만, 가장 흔히 사용되는 두 가지 방법은 다음과 같습니다.
JobLauncher를 이용한 순차 실행: Spring Batch에서 제공하는
JobLauncher
를 사용하여 여러 잡을 순차적으로 실행할 수 있습니다. 예를 들어, 첫 번째 잡이 완료된 후 두 번째 잡을 실행하도록 설정할 수 있습니다.JobOperator를 이용한 실행:
JobOperator
를 사용하여 잡을 제어할 수 있습니다. 이를 통해 잡의 시작, 중지, 재시작 등을 제어할 수 있으며, 여러 잡을 순서대로 실행하는 로직을 구성할 수 있습니다.
예를 들어, 첫 번째 방법을 사용하여 잡을 순서대로 실행하는 예제를 보겠습니다:
1. JobLauncher를 이용한 순차 실행
1.1. 설정 파일 (Java Configuration)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Job job1() {
return jobBuilderFactory.get("job1")
.start(step1())
.build();
}
@Bean
public Job job2() {
return jobBuilderFactory.get("job2")
.start(step2())
.build();
}
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.tasklet((contribution, chunkContext) -> {
System.out.println("Executing step1 of job1");
return RepeatStatus.FINISHED;
})
.build();
}
@Bean
public Step step2() {
return stepBuilderFactory.get("step2")
.tasklet((contribution, chunkContext) -> {
System.out.println("Executing step2 of job2");
return RepeatStatus.FINISHED;
})
.build();
}
}
1.2. JobLauncher를 이용한 잡 실행
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@SpringBootApplication
public class BatchApplication implements CommandLineRunner {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job job1;
@Autowired
private Job job2;
public static void main(String[] args) {
SpringApplication.run(BatchApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
// 첫 번째 잡 실행
JobExecution job1Execution = jobLauncher.run(job1, new JobParametersBuilder().toJobParameters());
if (job1Execution.getStatus() == BatchStatus.COMPLETED) {
// 첫 번째 잡이 완료되면 두 번째 잡 실행
JobExecution job2Execution = jobLauncher.run(job2, new JobParametersBuilder().toJobParameters());
}
}
}
2. JobOperator를 이용한 실행
2.1. 설정 파일 (Java Configuration)
위의 Job 및 Step 설정은 동일하게 사용할 수 있습니다.
2.2. JobOperator를 이용한 잡 실행
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@SpringBootApplication
public class BatchApplication implements CommandLineRunner {
@Autowired
private JobOperator jobOperator;
@Autowired
private Job job1;
@Autowired
private Job job2;
public static void main(String[] args) {
SpringApplication.run(BatchApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
// 첫 번째 잡 실행
Long job1ExecutionId = jobOperator.start("job1", "");
// 첫 번째 잡이 완료될 때까지 대기
boolean job1Completed = false;
while (!job1Completed) {
Thread.sleep(1000); // 1초 대기
job1Completed = jobOperator.getJobExecution(job1ExecutionId).getStatus() == BatchStatus.COMPLETED;
}
// 첫 번째 잡이 완료되면 두 번째 잡 실행
jobOperator.start("job2", "");
}
}
이렇게 설정하면 스프링 배치에서 여러 잡을 순서대로 실행할 수 있습니다. 이 방법 외에도 다양한 방법이 있을 수 있으며, 요구사항에 맞는 방법을 선택하여 사용하면 됩니다.
- https://docs.spring.io/spring-batch/reference/index.html
This post is licensed under CC BY 4.0 by the author.