[ Spring Batch ] Rest API 연결시 파라미터 넘기는 방법 조언 부탁드립니다!

914 views
Skip to first unread message

H

unread,
Jun 3, 2021, 9:03:28 PM6/3/21
to Korea Spring User Group Q&A

현재 spring batch 를 구현중인 신입 개발자 입니다!

batch 를 이용해, 기 구현되어있는 rest api 를 호출해야 하는데요!

batch 에서 select 한 값을 rest api 에 파라미터로 넘겨줘야 하는데,

어떤 식으로 만들어야 할지 감이 잘 안옵니다!


@Bean

    public ItemReader<BankingDTO> getIncompleteTradeBatchReader() {

        return new ItemReader<BankingDTO>() {

            @Override

            public BankingDTO read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {

                if (checkRestCall == false) {      //호출여부 체크

                    String uri = setServerUrl()+"/banking/send/result";

                    RestTemplate restTemplate   = new RestTemplate();

                    BankingDTO[] retArray       = restTemplate.getForObject(uri, BankingDTO[].class);   //호출 결과를 우선 배열로 받고, 리스트로 변환

                    collectData = Arrays.asList(retArray);    //배열을 리스트로 변환

                    log.info("Rest Call result : >>>>>>>" + collectData);

                    checkRestCall  = true;

                }

                BankingDTO nextCollect = null;  //ItemReader는 반복문으로 동작한다. 하나씩 Writer로 전달해야 한다.


                if (nextIndex < collectData.size()) {    //전체 리스트에서 하나씩 추출해서, 하나씩 Writer로 전달

                    nextCollect = collectData.get(nextIndex);

                    nextIndex++;

                }

                return nextCollect;   //DTO 하나씩 반환한다. Rest 호출시 데이터가 없으면 null로 반환.

            }

        };

    }


열심히 구글링해가며 이렇게 코드를 짰는데요!

db select 후 파라미터를 넘겨주어야 하는데,

어떤 식으로 구현하면 좋을지 감이 잘 안옵니다ㅜㅜ

선배님들 경험 조언 좀 부탁드립니다!

감사합니다 :)

Lee brandon

unread,
Jun 3, 2021, 10:06:03 PM6/3/21
to ks...@googlegroups.com

보통 요걸 이용해서 uri 를 만들어서 사용하죠..

org.springframework.web.util.UriComponentsBuilder

 

 

 

보낸 사람: H
보낸 날짜: 2021 6 4일 금요일 오전 10:03
받는 사람: Korea Spring User Group Q&A
제목: [KSUG] [ Spring Batch ] Rest API 연결시 파라미터 넘기는 방법 조언 부탁드립니다!

--
이 메일은 Google 그룹스 'Korea Spring User Group Q&A' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+uns...@googlegroups.com에 이메일을 보내세요.
웹에서 이 토론을 보려면 https://groups.google.com/d/msgid/ksug/a225cc22-0bd4-4678-ad0b-9ad9b9682583n%40googlegroups.com() 방문하세요.

 

Message has been deleted

H

unread,
Jun 6, 2021, 10:28:14 PM6/6/21
to Korea Spring User Group Q&A
select 를 이용해 받아온 값을 파라미터로 rest API 로 넘겨주어야 합니다!
통신은 되는데요
DB를 통해 select 값을 불러오고, 그 값을 파라미터에 담아 넘겨주려면
어떤 식으로 구현해줘야 할까요..?
spring 프로젝트처럼 mapper / service / ... 등등 만들어주면 되는 게 맞나요?
이렇게 했는데 자꾸 아래와 같은 에러가 나와서요
어떻게 하면 좋을 지 조언 좀 부탁드립니다!ㅠㅠ
감사합니다


20210607 11:27:00.241 [scheduling-1] ERROR o.s.b.c.s.AbstractStep - Encountered an error executing step getIncompleteTradeBatchStep in job bankingSystemBatchJob 
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.payhada.batch.user.dao.BankingDao.getIncompleteTradeList
at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:214)
at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48)
at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
at com.sun.proxy.$Proxy92.getIncompleteTradeList(Unknown Source)
at com.payhada.batch.main.service.impl.BankingServiceImpl.getIncompleteTradeList(BankingServiceImpl.java:23)
at com.payhada.batch.BankingJobConfiguration$1.read(BankingJobConfiguration.java:86)
at com.payhada.batch.BankingJobConfiguration$1.read(BankingJobConfiguration.java:1)
at org.springframework.batch.core.step.item.SimpleChunkProvider.doRead(SimpleChunkProvider.java:99)
at org.springframework.batch.core.step.item.SimpleChunkProvider.read(SimpleChunkProvider.java:180)
at org.springframework.batch.core.step.item.SimpleChunkProvider$1.doInIteration(SimpleChunkProvider.java:126)
at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:375)
at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:215)
at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:145)
at org.springframework.batch.core.step.item.SimpleChunkProvider.provide(SimpleChunkProvider.java:118)
at org.springframework.batch.core.step.item.ChunkOrientedTasklet.execute(ChunkOrientedTasklet.java:71)
at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:407)
at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:331)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:273)
at org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInIteration(StepContextRepeatCallback.java:82)
at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:375)
at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:215)
at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:145)
at org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:258)
at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:208)
at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:148)
at org.springframework.batch.core.job.AbstractJob.handleStep(AbstractJob.java:410)
at org.springframework.batch.core.job.SimpleJob.doExecute(SimpleJob.java:136)
at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:319)
at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:147)
at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:140)
at jdk.internal.reflect.GeneratedMethodAccessor119.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$PassthruAdvice.invoke(SimpleBatchConfiguration.java:127)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
at com.sun.proxy.$Proxy94.run(Unknown Source)
at com.payhada.batch.JobScheduler.bankingJob(JobScheduler.java:97)
at jdk.internal.reflect.GeneratedMethodAccessor121.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)


2021년 6월 4일 금요일 오전 11시 6분 3초 UTC+9에 dd.st...@gmail.com님이 작성:

Lee brandon

unread,
Jun 6, 2021, 10:52:30 PM6/6/21
to ks...@googlegroups.com

일단 아래 오류는 설정이 잘못된 것 같은데요?

mybatis 를 사용하시는 것 같은데…. xml 을 못찾아서 오류.. 설정부터 확인해보세요

 

 

 

 

보낸 사람: H
보낸 날짜: 2021 6 7일 월요일 오전 11:28

제목: Re: [KSUG] [ Spring Batch ] Rest API 연결œ 파라미터 넘기는 방법 조언 부탁드립니다!

H

unread,
Jun 7, 2021, 3:17:32 AM6/7/21
to Korea Spring User Group Q&A
네ㅜㅜ 그래서 수십번 확인했는데, 오타도 오류가 날만한 부분도 없습니다ㅜㅜ
코드를 공유하고 싶지만, 회사 프로젝트라 상세하게 올리지 못한 점 양해 부탁드립니다ㅜㅜ

select 로 불러온 값을 API 로 넘기려고 할 때, mapper 와 service 를 사용하는 것이 맞나요?
이 방법 자체가 틀린거라면 새로 수정해야할 것 같고,
사용이 가능한 방법이라면 더 뜯고보고 찾아봐야할 것 같습니다..!
사내 배치를 할 줄 아는 개발자가 없어서
혼자 찾아보고 연구하며 하려니 어렵네요..ㅜㅜ!!

2021년 6월 7일 월요일 오전 11시 52분 30초 UTC+9에 dd.st...@gmail.com님이 작성:

Lee brandon

unread,
Jun 7, 2021, 3:49:39 AM6/7/21
to ks...@googlegroups.com

오타 문제가 아니라.. 쿼리가 선언되어있는 xml 을 정상적으로 찾지 못해서 발생하는거 같은데

Mybatis 설정 중에 xml 위치 설정 부분 확인해보세요..

 

 

 

감사합니다.

 

이상용 드림

 

보낸 사람: H
보낸 날짜: 2021 6 7일 월요일 오후 4:17

Lee brandon

unread,
Jun 7, 2021, 3:49:55 AM6/7/21
to ks...@googlegroups.com

참고해보시기를

https://mybatis.org/spring/ko/batch.html

 

 

 

보낸 사람: H
보낸 날짜: 2021 6 7일 월요일 오후 4:17

Reply all
Reply to author
Forward
0 new messages