묻고 답해요
150만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
미해결[스프링 배치 입문] 예제로 배우는 핵심 Spring Batch
db이관시 sql 스크립트 데이터 복붙하라고 하시는데 파일은 어디에 있나요 ?
db이관시 sql 스크립트 데이터 복붙하라고 하시는데 파일은 어디에 있나요 ?
-
미해결스프링 배치
DB - JdbcCursorItemReader 강의 질문
DB - JdbcCursorItemReader 강의에서fetchSize(int chunkSize) API는 정확히 어떤걸 의미하나요?일반적으로 JDBC 프로그래밍에서 fetchSize는 어플리케이션과 DB 사이의 round trip 횟수에 영향을 주는 파라미터로 알고 있습니다. 예를 들어, 테이블에 100rows가 있고 fetchSize가 10이면 어플리케이션은 DB와 10번 데이터를 송수신하는 것으로 알고 있습니다.fetchSize(int chunkSize) API는 제가 알고 있는 fetchSize를 설정하는 API가 맞나요..?
-
미해결스프링 배치
Transition - on() / to() / stop(), fail(), end(), stopAndRestart() 강의 질문입니다.
Transition - on() / to() / stop(), fail(), end(), stopAndRestart() 강의 질문입니다. 강의 31분 35초 강의교안 아래쪽에 Step1()의 ExitStatus에 따라서 메타 테이블의 상태를 비교하는 내용이 있는데요.왼쪽, Step1()에서 ExitStatus를 FAILED로 세팅하면, batch status는 ABANDONED가되는데요.오른쪽, Step4()에서 (코드는 없지만) ExitStatus를 FAILED로 세팅했을 때는 batch status가 FAILED로 나와있는데. 정확히 batch status가 ABANDONED과 FAILED로 세팅되는 차이점은 무엇인가요?(강의를 듣는 도중에 작성하는 질문이라서...다른 강의에서 나오는 주제면 알려주시면 계속 강의를 보도록 하곘습니다.)
-
미해결스프링 배치
FlowJob - 개념 및 API 소개 강의 질문
FlowJob - 개념 및 API 소개 강의 질문드립니다.Step1이 실패했을 경우 Step2를 실행하도록 한 것은 이해했습니다.Step1을 실패시키더라도 Step2까지 실행이되며 Job도 COMPLETED 상태인 것 도 이해했습니다.근데 여기서, 똑같은 JOB을 실행하면 Job Instance가 이미 존재한다는 예외가 아닌 Step already complete or not restartable, so no action to execute: 이라는 메시지가 나오는데요. 이제까지 알기론 Job Execution이 실패한 경우에만 같은 job 파라미터로 실행할 수 있는 걸로 알고 있는데요.FlowJob의 경우는, Job Execution이 COMPLETED 상태여도 StepExecution까지 확인하는건가요?
-
미해결[스프링 배치 입문] 예제로 배우는 핵심 Spring Batch
Spring Batch5로 강의내용 최신화 업데이트될 가능성이 있을까요?
안녕하세요 혹시 Spring Batch5점대 최신버전으로 강의내용 업데이트 계획이 있을까요?
-
미해결스프링 배치
스프링 배치 청크 프로세스 - 아키텍처 문의
Chunk Process 아키텍처 챕터를 보고 있는데요. 아키텍처 그림에서 ItemReader가 읽은 item이 null 일 경우,모든 반복문 및 Chunk 프로세스를 종료한다고 되어 있는데ItemProcessor, ItemWriter 처리 이후에 Chunk 프로세스가 종료되는게 맞지 않나요?( 설명만 봐서는 read에서 null 리턴시 바로 Step이 종료되는 것 처럼 이해가 됩니다. )예를 들어 11개의 아이템이 있고 Chunk 사이즈가 5이면,Chunk가 총 3개로 처리가 되고, 각 Chunk의 사이즈는 5, 5, 1 로 3번의 트랜잭션 처리가 처리되고 난 뒤에 Chunk 프로세스가 종료가 되니까요.
-
미해결[스프링 배치 입문] 예제로 배우는 핵심 Spring Batch
reader, writer, processor에서 적용
tasklet이 아닌 chunk 단위에서 step 간에 데이터 공유를 하고 싶다면 어떤 식으로 코드를 짜야 할까요 ?찾아보니 방법이 달라서 적용이 힘든데 궁금합니다..
-
미해결[스프링 배치 입문] 예제로 배우는 핵심 Spring Batch
똑같이 실행하는데 출력이 안돼요
@Configuration @RequiredArgsConstructor @Slf4j public class HelloWorldJdbcConfig { private final JobBuilderFactory jobBuilderFactory; //이걸 통해 JOb을 생성 private final StepBuilderFactory stepBuilderFactory; //Step 생성을 위해 /** * 두 객체를 활용하여 Job과 Step을 생성할꺼야 Job은 JobBuilderFactory로 만들고 Step은 StepBuilderFactory로 만들자. */ @Bean public Job helloWorldJob() { Job helloWorldJob = jobBuilderFactory.get("helloWorldJob") //이름을 정해주고 .incrementer(new RunIdIncrementer()) //Job을 실행할 때 id를 부여하는데, Sequence를 순차적으로 부여할 수 있도록 RunIdIncrementer를 해주자. .start(helloWorldStep()) //Job안에는 Step이 존재해야해. .build(); return helloWorldJob; } @JobScope @Bean public Step helloWorldStep() { TaskletStep helloWorldStep = stepBuilderFactory.get("helloWorldStep") //역시 똑같이 get을 통해 이름 명시 .tasklet(helloWorldTasklet()) //일단 간단하게 taskLet으로 해보자. .build(); return helloWorldStep; } @StepScope //step 하위에서 실행되기 때문에 @StepScope를 등록하자. @Bean public Tasklet helloWorldTasklet() { //Tasklet은 그냥 만들면 돼 Tasklet tasklet = new Tasklet() { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { //내가 원하는 작업 부분 System.out.println("Hello World Spring Batch"); log.info("asdasdasd"); log.info("batch start!!"); //원하는 작업이 끝난 이후 어떻게 할 것인가 ?에 대한 Status를 명시해야함. return RepeatStatus.FINISHED; // FINISHED를 명시함으로써 이 Step을 끝낸다는 뜻. } }; return tasklet; } /** * 위 과정을 모두 다 했다면 * HelloWorld를 보기 위한 하나의 Job이 완성이 된 것이다 ! * 스프링을 실행해서 출력이 되는지 확인하자 !! * Job을 실행시킬 때는 properties에서 설정한 batch.job.names를 파라미터로 넘겨주어야 Job이 실행이 된다. * 위에서 Job 이름은 helloWorldJob이기 때문에 파라미터로 넣어주자 ! *Edit Configurations > Program Parameters에 --spring.batch.job.names=helloWorldJob을 넣어주자. * 그러고 실행하면 돼 ! */ /** * 또한 Job을 실행할 때는 * apllication.properties에 설정한 * spring.batch.job.names에 파라미터로 넘겨주어야 job이 실행이 된다. * --spring.batch.job.names={이름} 이런 식으로 넘겨줘야해 * 내가 현재 설정한 job의 이름은 helloWorldJob이기 때문에 해당 값을 넣어서 파라미터 등록하자. */ }위 코드를 작성한 후에 main에서 @EnableBatchProcessing 어노테이션을 추가해주고 실행하였습니다.또한 application.properties에 spring.batch.job.names=${job.name:NONE}넣어준 후 parameter 까지 제대로 넣어주었는데 실행하면 해당 출력문이 나오지 않습니다.. 뭐가 문제인지 몰라서 질문드립니다.. !
-
해결됨스프링 배치
chunkSize 질문입니다.
안녕하세요. 좋은 강의 감사드립니다 :) 예시에서 ListItemReader 를 통해 5개의 아이템을 주고 있는데요, chunkSize 가 3개라면 아이템을 2,2,1 로 나눠 처리하게 되는걸까요?
-
미해결[스프링 배치 입문] 예제로 배우는 핵심 Spring Batch
스케줄러에서 Job을 구분하지 못합니다.
강의 잘 들었습니다!마지막 강의 실행 부분에서 문제가 생겼는데요작성하신 코드와 똑같이 진행했음에도 실행 시"Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed"라는 에러가 나버립니다.제 생각엔 만들어둔 Job이 7개라어떤 Job을 실행시켜야할 지 정하지 못해 나는|에러처럼 보입니다.예상컨데 helloWorldJob이 HelloWorldJobConfig 클래스에서 만든 잡의이름이라고 보는데, 저도 똑같이 했는데왜 이런 에러가 날까요?@Qualifier("helloWorldJob")private final Job helloWorldJob;를 사용해봐도 여전히 에러가 납니다.
-
해결됨스프링 배치
spring batch 5 업데이트
이번 메이저 릴리즈에 대한 내용이 강의에 추가될 계획이 있는지 궁금합니다!
-
미해결스프링 배치
Spring Batch Plugin 설치 관련 질문
Spring Batch Plugin 설치 이유가 궁금합니다.설치하지 않았을 경우 이 부분에서 빨간 줄이 나타나며 Bean을 찾을 수 없다는 에러를 나타냅니다.플러그인을 통해서 빈을 생성하게 된다면 jar로 압축하여 실행하더라도 빈이 생성되지 않아야 되는게 맞다고 생각하지만, 그렇지는 않은걸로 알고 있습니다.또한 jar로 실행하게 되면 잘 실행이 될텐데 그럼 인텔리제이에서도 플러그인 없이 에러가 뜨면 안되지 않나 라는 생각이 들어 질문하게 되었습니다.
-
미해결[스프링 배치 입문] 예제로 배우는 핵심 Spring Batch
빌드가 실패해요 ㅠㅠ
안녕하세요!강의와는 조금 다르게 java11과 springboot 2.7.13(snapshot)으로 진행해봤는데요.빌드가 계속 실패합니다 ㅠhttps://github.com/chojuyeon94/SpringBatchTutorialorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'batchDataSourceInitializer' defined in class path resource [org/springframework/boot/autoconfigure/batch/BatchAutoConfiguration$DataSourceInitializerConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.autoconfigure.batch.BatchDataSourceScriptDatabaseInitializer]: Factory method 'batchDataSourceInitializer' threw exception; nested exception is java.lang.IllegalStateException: Unable to detect database type데이터베이스 타입을 찾을 수 없다고 나오는데요이게 데이터베이스에 연결이 잘 안되는거라고 해서 여러 방법을 써봤는데 잘 안되서 글 남깁니다!!
-
미해결스프링 배치
JobInstance 생성 및 실행에 대해서 질문이 있습니다.
안녕하세요. 7:32초 쯤에부터 말씀을 해주신 내용에 질문이 있습니다. 다음 강의인 JobParameter의 내용까지 모두 수강하고 해당 질문을 드리게 되었는데요."이전과 동일한 Job, 그 다음에 똑같은 JobParameter의 값으로 실행이 되면 이미 존재하는 JobInstance를 리턴하고, 결국엔 수행이 실패합니다""똑같은 Job과 똑같은 JobParameter의 내용으로 다시 수행할 필요가 없는거죠. 그럼 내용까지 똑같아 지니까"위와 같이 말씀을 해주셨는데 해당 말씀을 듣고, 똑같은 Parameter의 "값"을 가진다고 해도 Job이 수행이 되어야하는게 아닌가? 왜 실패처리를 하게 Spring Batch에서 구현을 해놓은거지?라는 의문이 들었습니다. 그리고 이러한 의문을 가졌을때는 JobParameter에 대한 실습을 진행하지 않았던 상태여서 JobParameter를 넘기지 않는것을 토대로 Job을 실행시켜보았는데 강사님의 말씀대로 최초 한번만 실행되고 그 이후로는 Job이 실행되지 않고 Database에 이미 완료되었다는 Error Message와 함께 데이터가 쌓이더군요.그래서 아 정말 그렇구나 JobParameter가 같으면("JobParameter가 없다"라는게 같음, 동일한 Job + Empty JobParameter) 실패처리를 하는구나라고 생각을 하고 강의 수강을 이어갔습니다.그리고 다음 강의에서 JobParameter에 총 4개의 Parameter를 가지고 Job을 실행하시는 것을 보여주셨습니다.name=user1seq=2date=2021/01/01age=16.5JobInstance 강의에서 배운 내용을 가진채로, 저는 해당 Parameter의 값으로 여러번 실행하면 에러가 날줄 알았는데 예상과는 다르게 저의 처음 예상(똑같은 Parameter의 "값"을 가진다고 해도 수행이 되어야하는게 아닌가?)대로 정상적으로 모두 실행이 되었습니다. 또한 JobParameter 강의에서 강사님께서도 같은 Parameter를 가지고 여러번 수행했을때(jar, InteliJ Configuration으로 실행 방법은 달랐지만 넘기는 Parameter는 같은) 정상적으로 해당 Job이 성공을 하는 Flow가 강의에 담겨있었습니다.배운것과 조금 다른것 같아서 아래 코드를 다시 살펴보았고, 동일한 Job + JobParameter의 "값"의 동일함이 아닌,동일한 Job + JobParameter "객체"의 동일 여부를 가지고 JobInstance의 생성 및 실행을 구분하는것이 아닌가라는 결론을 내게 되었습니다.@Override public void run(ApplicationArguments args) throws Exception { JobParameters jobParameters = new JobParametersBuilder() .addString("name", "user1") .addLong("seq", 2L) .addDate("date", new Date()) .addDouble("age", 16.5) .toJobParameters(); jobLauncher.run(job, jobParameters);위의 제 결론에 확신을 더 얻고자, 말도 안되는 코드인것 같지만 아래와 같이 수행을 해봤을때 IllegalStateException: Failed to execute ApplicationRunner 에러가 발생하였습니다.아래 코드의 의도는 동일한 jobParameters라는 객체를 가지고 같은 Job을 실행시켰을때 오류가 날것이다라는 가정이였고, 오류가 났으니 제 가정이 맞는것 같습니다.@Override public void run(ApplicationArguments args) throws Exception { JobParameters jobParameters = new JobParametersBuilder() .addString("name", "user1") .addLong("seq", 2L) .addDate("date", new Date()) .addDouble("age", 16.5) .toJobParameters(); jobLauncher.run(job, jobParameters); // 같은 jobParameters 객체를 가지고 한번 더 실행 jobLauncher.run(job, jobParameters);정리하자면, 동일한 Job + JobParameter의 "값"의 동일함이 아닌,동일한 Job + JobParameter "객체"의 동일 여부를 가지고 JobInstance의 생성 및 실행을 구분하는것이 맞는것 같다인데, 혹시 제 생각이 맞을까요? 실제로 BATCH_JOB_EXECUTION_PARAMS 테이블에서 Parameter값들은 계속 같은게 들어오지만 BATCH_JOB_INSTANCE 테이블의 JOB_KEY값은 계속 다르게 저장이되네요.
-
미해결스프링 배치
H2 데이터베이스 설정과 기본 Spring Batch 설정에 대해서 질문이 있습니다.
H2 데이터베이스 설정과, 배치 실행을 위한 Schema와 Table을 생성하는 설정은 생략하고 이번 수업을 진행하신걸까요?H2에 대한 의존성을 설치하기위해 pom.xml에 작성하신것을 언급해주시긴 했지만, 그 후에 application.yml 혹은 application.properties에 아래의 기본적인 설정이 필요합니다.spring.datasource.url=jdbc:h2:tcp://localhost/~/testspring.datasource.driver-class-name=org.h2.Driverspring.datasource.username=saspring.datasource.password=사실 이것은 너무 기본적인것이기 때문에 생략을 해도 크게 문제가 되지 않을것 같다는 생각이 듭니다.하지만, Spring Batch를 처음 접해보는 수강생으로서 아래의 설정은 언급을 한번 해주셨다면 좋지 않았을까 아쉬움이 듭니다.spring.batch.jdbc.initialize-schema=always해당 설정은 바로 다음 수업에서 다뤄주시던데, 혹시 이번 수업은 그냥 그럼 눈으로만 보고 넘어가는 수업으로 의도하신걸까요?버전이 다르거나 다른 변수들이 너무 많기때문에 수강하는 사람도 수업내용을 그대로 해보고 안된다고 바로 질문을 하기보다는 어느정도의 Googling을 통해서 해결할 수 있는 문제는 스스로 해결해야한다고 생각합니다. 그러는 과정속에서 성장도 할 수 있으니 이 과정은 필요하다고 생각합니다.하지만, 해당 수업은 수업에 전적으로 의존하는것과 수강생이 직접 Googling을 하는것의 그 중간점을 설정하기가 참 어려운것 같습니다.위의 배치 관련된 설정은 알고나니 너무 그 방법이 쉽고, 기본적인것이지만 저것을 몰랐던 상황에서는 오류가 왜 나는지에 대해서 많이 혼란스러웠던것 같습니다.해당 강의의 Github의 코드도 참고하기 위해 Part2.1과 2.2로 브랜치를 Checkout해서 확인해 보았는데도, 설정관련된 코드는 어디에도 없었습니다.강사님이 생각하시는 "수강생이 직접 해봐야하는것"의 기준은 어느정도로 생각하고 계신건가요??
-
미해결스프링 배치
Break Point와 Debugging시 단축키
안녕하세요 강의를 보다가 몇가지 질문이 생겨서 글을 남기게 됬습니다. 27분정도의 강의를 모두 직접 해봤는데도 의문이 풀리지 않아서 질문드립니다.조금 중간중간 생략이 되어있는것 같아서, 앞으로의 강의도 수강시에 이렇게 생략된것들은 저희가 그냥 할 줄안다고 혹은 했다고 가정하고 진행을 하시는건지 여쭤보고 싶습니다. 그게 맞다면 참고해서 강의를 수강할 예정입니다. 23:28초쯤에 main메소드 디버그 모드로 실행시, 갑자기 아래의 프록시를 만드는 createLazyProxy 메소드 4개에 Break Point가 찍혀있는데, 이거는 강의 내에서 혹시 언제 찍힌건가요? 아무리 찾아봐도 없는것 같아서 질문 드립니다. 그냥 저희가 SimpleBatchConfiguration.java에 가서 직접 포인트를 찍고 Debugging을 실행시킨다라는걸 가정하신걸까요? 아니면 이번 강의에서는 그냥 눈으로만 보고 넘기는걸까요?return createLazyProxy(jobExplorer, JobExplorer.class); 24:43초 쯔음에, createLazyProxy관련 Break Point 4개를 왔다갔다 하실때 단축키를 사용하시는것 같은데 혹시 어떤 단축키를 쓰신건가요? 혹은 단축키가 각각 개발자 마다 다르니, Step Over, Step Into와 같은 Debugging의 기본 Feature들 중에서 어떠한 것을 사용하신건가요? 혹시 위의 제가 말씀드린 것들중에 없다면 사용하신 Feature의 이름을 말씀해주시면 좋을것 같습니다.관련해서 강사님의 앞으로의 강의 계획을 제가 다른 질문에서 본적이 있습니다. 너무 기대가 되는데, 강사님도 앞으로의 강의에 강의중에 사용하신 단축키를 화면의 중앙 하단에 표시해주는 App을 사용하셔서 수강생들에게 어떠한 단축키를 사용하셨는지 실시간으로 알려줄 수 있게 강의를 녹화해보시는건 어떨까요? 이게 수강생들에게 상당히 도움이 많이됩니다.24:49초쯤에, BatchConfigurerConfiguration.java에서도 두개의 Break Point가 찍혀져 있는데요, 이것도 1번과 마찬가지로 그냥 저희가 해당 파일에 직접 들어가서 Break Point를 찍고 보라는걸 의도하셔서 생략하신건지 여쭤보고 싶습니다. 그리고 JPA관련된 의존성을 애초에 Initializer 단계에서 받지 않았기때문에 해당 Break Point의 코드에는 도달할 수 없을것 같습니다. 하지만 강의에서는 2번 질문처럼 어떤 단축키를 통해서? 왔다갔다 되더니 해당 2개의 Break Point에 도달을 한것 같습니다. 밑에 Debug관련된 Stack창에 Stack이라도 찍혀있다면 그거 보고서라도 할텐데 그것도 없어서 어떻게 저 코드에 도달하신걸까 여쭤보고 싶습니다. 저는 1,2번 질문에 있는 총 6개의 Break Point를 모두 찍고 Debugging을 진행했었는데 도달을 하지는 않았던것 같습니다.JpaBatchConfigurer(properties, batchDataSource.getIfAvailable(() -> dataSource) 위에 제가 질문 드린것들을 저는 아 그냥 수강생들이 충분히 할 수 있다고 생각을 하셔서 생략을 하셨구나라고 생각을 해서 강의에 있는 모든 내용을 직접 찾아보면서 해보았습니다. 꼭 강사님의 강의가 아니더라도 다른 분들의 강의를 들을때도 마찬가지로 저는 이렇게 직접 확인해보면서 학습을 하는데요, 이러한 것들이 있다면 Break Point를 미리 찍어놨다던지 라는, 딱 한번만이라도 언급만이라도 해주시면 좋을것 같습니다. Context를 갑자기 잃어버리는 느낌이여서 강사님의 의도를 전혀 파악하지 못하는것 같습니다.현재 23.5.30 기준으로 Spring의 Version도 오르고, Spring Batch 버전이 5버전으로 오른것 같습니다. 관련해서 Deprecated된게 조금 있던데 우선 강의에 나온 버전으로 듣고나면 5버전에서 어떤게 어떻게 바뀐건지 왜 Deprecated된건지 스스로 학습할수 있을것 같다고 생각이 드는데 맞을까요?사실 관련되서 질문이 하나도 없어서, 이게 지금 다른분들은 수월하게 하실 수 있는데 저만 이러는건지도 의문이 듭니다. 답변 주시면 잘 참고해서 나머지 강의도 열심히 수강하겠습니다 감사합니다 :D
-
미해결스프링 배치
사용자 정의 ExitStatus를 listener에서 정의 하는 이유
사용자 정의 ExitStatus를 StepExecutionListener.afterStep에서 정의하는 이유가 궁금합니다.Tasklet 안에서 조건에 따라 contribution.setExitStatus(new ExitStatus("PASS"));를 사용해도 되는게 아닌가 싶은데, 그냥 afterStep에서도 할 수 있다는걸 보여준걸까요? 또, 다음 강의인 JobExecutionDecider 는 사용자 정의 StepExecutionListener.afterStep에서 사용자 종료 코드를 정의하는 것을 대체한다고 생각하면 되는걸까요?
-
미해결스프링 배치
ItemStream close(); 메서드
close 는중간에 오류가 나면 바로 close 메서드가 자동 실행되고 그렇지 않으면 모든 open update 메서드가 끝나면 자동 실행 된다고생각하면 되는건가요 ?
-
미해결스프링 배치
다음 강의 계획이 있으신가요?
강사님 강의를 보고 있는 사람입니다.아직 봐야할게 많지만 강의 퀄리티가 너무 좋아 정말 만족하고 있습니다.혹시 다음 강의 계획이 있으신지 궁금합니다.또 있다면 언제쯤 나올 예정인지도요.감사합니다.
-
미해결스프링 배치
강의 내용에 쿼츠도 있을까요?
아직 강의 듣는중인데 쿼츠도 있나 궁금하네요
주간 인기글
순위 정보를
불러오고 있어요