다른 매개 변수로 동일한 스프링 배치 작업을 동시에 시작하는 방법은 무엇입니까?

회원 사운드

filename여러 파일을 동시에 가져 오기 위해 다른 매개 변수로 동일한 작업 구성을 여러 번 시작하고 싶습니다 (각 작업 하나의 파일).

@Configuration
public class MyJob {

    //the steps contain each a reader, processor and writer
    //reader is @JobScope
    @Bean
    public Job job(Step someStep, Step, someMoreStep) {
        System.out.println("registering job bean");
        return jobBuilderFactory.get(name)
            .start(someStep)
            .next(someMoreStep)
            .build();
    }
}

@Component
public class MyImporter {
    @Autowired
    private JobRegistry jobRegistry;

    @Autowired
    private JobLauncher launcher;

    private static final String FILENAME = "baseFilename";

    @Async
    public void run(String i) {
        p = new JobParametersBuilder();
        p.addDate("date", new Date());
        p.addString("filename", FILENAME + i + ".csv"); //injected via @Value jobParameter to job

        Job job = jobRegistry.getJob("getMyJob");
        launcher.run(job, p.toJobParameters());
    }
}

@Component
public class MyImportManager {
    @Autowired
    private MyImporter importer;

    //starts a  job multiple times with different "filename" parameters,
    //to simulate concurrent file imports with the same configuration job class
    public void start() {
        for (int i = 0; i < 4; i++) {
            importer.run(i);
        }
    }
}

@SpringBootApplication
@EnableBatchProcessing(modular = true)
@EnableAsync
public class MyConfig {

}

문제 : 여러 작업을 시작할 수 있지만 같은 작업을 사용하는 것 같습니다 reader. 단일 작업을 실행하면 i < 1모든 것이 잘 작동합니다. 을 늘리면 i이상한 입력이 나타납니다.

각 값을 한 줄씩 읽는 FlatFileItemReader를 사용하고 있습니다. 그러나 (다른 파일에서) 동시 가져 오기를 사용할 때 입력 문자열이 종종 손상됩니다.

그래서 동시 가져 오기를 위해 작업을 올바르게 등록하지 않는다고 가정합니까? 그런데 왜?

흥미로운 점 : 라인 "registering job bean"은 한 번만 인쇄됩니다. 그러나 비동기 작업이 시작되는만큼 자주 인쇄되지 않아야합니까?

딘 클락

FlatFileItemReader스레드로부터 안전하지 않으므로 리더 빈은 "작업"범위에 있어야합니다. 그러면 작업 당 하나의 인스턴스가 생성됩니다.

@Bean
@JobScope
public FlatFileItemReader<?> yourReaderBean(
        @Value("#{jobParameters[filename]}") String filename){
    FlatFileItemReader<?> itemReader = new FlatFileItemReader<?>();
    itemReader.setLineMapper(lineMapper());
    itemReader.setResource(new ClassPathResource(filename));
    return itemReader;
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다른 작업 매개 변수로 스프링 배치 작업을 여러 번 실행하는 방법은 무엇입니까?

분류에서Dev

다운 스트림 매개 변수 (예 : 현재 빌드 매개 변수)를 Jenkins의 다운 스트림 작업에 전달하는 방법. 동일한 스크립트 파이프 라인을 작성하는 방법은 무엇입니까?

분류에서Dev

.htacess 동일한 수의 매개 변수로 2 개의 URL을 다시 작성하는 방법은 무엇입니까?

분류에서Dev

사전에 매개 변수가 다른 일반 작업을 저장하는 방법은 무엇입니까?

분류에서Dev

다른 노드가 다른 시간을 가질 때 스프링 배치를 사용하여 작업 부하를 분산하는 방법은 무엇입니까?

분류에서Dev

pyiron에서 일부 작업을 다른 프로젝트로 이동하는 방법은 무엇입니까?

분류에서Dev

한 작업의 출력을 배치 파일의 다른 작업에 대한 입력으로 사용하는 방법은 무엇입니까?

분류에서Dev

다른 JTextField에 동일한 작업을 수행하는 작업 리스너를 추가하는 방법은 무엇입니까?

분류에서Dev

동일한 프로그램 내에서 충돌시 Qt 응용 프로그램을 자동으로 다시 시작하는 방법은 무엇입니까?

분류에서Dev

동일한 div에 서로 다른 크기가 정렬 된 두 개의 수평선을 하나씩 배치하는 방법은 무엇입니까?

분류에서Dev

배치 프로그램에 html을 매개 변수로 전달하는 방법은 무엇입니까?

분류에서Dev

Linux Mint에서 작업 표시 줄을 다른 모니터로 이동하는 방법은 무엇입니까?

분류에서Dev

Kestrel 프로세스에서 매일 비동기 작업을 실행하는 방법은 무엇입니까?

분류에서Dev

다른 옵션 / 인수로 동일한 grunt 작업을 사용하는 방법은 무엇입니까?

분류에서Dev

경로 매개 변수 변경시 ngrx 저장소 작업 디스패치를 테스트하는 방법은 무엇입니까?

분류에서Dev

다른 작업 공간에서 응용 프로그램을 시작하는 방법은 무엇입니까?

분류에서Dev

여러 쿼리 매개 변수로 URL의 URL을 다시 작성하는 방법은 무엇입니까?

분류에서Dev

컨트롤러 작업에서 동적 매개 변수 양을 처리하는 방법은 무엇입니까?

분류에서Dev

Windows 레지스트리의 전체 파일 이름 (공백 포함)을 매개 변수로 배치 파일에 전달하는 방법은 무엇입니까?

분류에서Dev

적절한 업그레이드의 영향을받는 서비스를 수동으로 다시 시작하는 방법은 무엇입니까?

분류에서Dev

동일한 코드베이스를 사용하지만 프로필이 다른 동일한 컨테이너에서 실행되는 두 개의 스프링 부트 애플리케이션을 원격 디버그하는 방법은 무엇입니까?

분류에서Dev

Touch 장치에서 응용 프로그램을 자동 시작하는 방법은 무엇입니까?

분류에서Dev

Java에서 다른 모듈의 동일한 클래스 사이의 클래스에 매개 변수를 전달하는 방법은 무엇입니까?

분류에서Dev

매개 변수화 / 인덱싱 된 유형에서 catamorphism을 작동시키는 방법은 무엇입니까?

분류에서Dev

Cocos2d x 동시에 다른 CCNod에 대한 작업을 시퀀스하는 방법은 무엇입니까?

분류에서Dev

OpenCV에서 동일한 창에 2 개의 다른 소스를 표시하는 방법은 무엇입니까?

분류에서Dev

레코드 업데이트와 동시에 배치 작업을 실행하는 방법은 무엇입니까?

분류에서Dev

여러 출력 매개 변수로 프로 시저를 작성하는 방법은 무엇입니까?

분류에서Dev

두 개의 다른 CRM 시스템에서 문제 티켓을 복사하는 프로세스를 자동화하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    다른 작업 매개 변수로 스프링 배치 작업을 여러 번 실행하는 방법은 무엇입니까?

  2. 2

    다운 스트림 매개 변수 (예 : 현재 빌드 매개 변수)를 Jenkins의 다운 스트림 작업에 전달하는 방법. 동일한 스크립트 파이프 라인을 작성하는 방법은 무엇입니까?

  3. 3

    .htacess 동일한 수의 매개 변수로 2 개의 URL을 다시 작성하는 방법은 무엇입니까?

  4. 4

    사전에 매개 변수가 다른 일반 작업을 저장하는 방법은 무엇입니까?

  5. 5

    다른 노드가 다른 시간을 가질 때 스프링 배치를 사용하여 작업 부하를 분산하는 방법은 무엇입니까?

  6. 6

    pyiron에서 일부 작업을 다른 프로젝트로 이동하는 방법은 무엇입니까?

  7. 7

    한 작업의 출력을 배치 파일의 다른 작업에 대한 입력으로 사용하는 방법은 무엇입니까?

  8. 8

    다른 JTextField에 동일한 작업을 수행하는 작업 리스너를 추가하는 방법은 무엇입니까?

  9. 9

    동일한 프로그램 내에서 충돌시 Qt 응용 프로그램을 자동으로 다시 시작하는 방법은 무엇입니까?

  10. 10

    동일한 div에 서로 다른 크기가 정렬 된 두 개의 수평선을 하나씩 배치하는 방법은 무엇입니까?

  11. 11

    배치 프로그램에 html을 매개 변수로 전달하는 방법은 무엇입니까?

  12. 12

    Linux Mint에서 작업 표시 줄을 다른 모니터로 이동하는 방법은 무엇입니까?

  13. 13

    Kestrel 프로세스에서 매일 비동기 작업을 실행하는 방법은 무엇입니까?

  14. 14

    다른 옵션 / 인수로 동일한 grunt 작업을 사용하는 방법은 무엇입니까?

  15. 15

    경로 매개 변수 변경시 ngrx 저장소 작업 디스패치를 테스트하는 방법은 무엇입니까?

  16. 16

    다른 작업 공간에서 응용 프로그램을 시작하는 방법은 무엇입니까?

  17. 17

    여러 쿼리 매개 변수로 URL의 URL을 다시 작성하는 방법은 무엇입니까?

  18. 18

    컨트롤러 작업에서 동적 매개 변수 양을 처리하는 방법은 무엇입니까?

  19. 19

    Windows 레지스트리의 전체 파일 이름 (공백 포함)을 매개 변수로 배치 파일에 전달하는 방법은 무엇입니까?

  20. 20

    적절한 업그레이드의 영향을받는 서비스를 수동으로 다시 시작하는 방법은 무엇입니까?

  21. 21

    동일한 코드베이스를 사용하지만 프로필이 다른 동일한 컨테이너에서 실행되는 두 개의 스프링 부트 애플리케이션을 원격 디버그하는 방법은 무엇입니까?

  22. 22

    Touch 장치에서 응용 프로그램을 자동 시작하는 방법은 무엇입니까?

  23. 23

    Java에서 다른 모듈의 동일한 클래스 사이의 클래스에 매개 변수를 전달하는 방법은 무엇입니까?

  24. 24

    매개 변수화 / 인덱싱 된 유형에서 catamorphism을 작동시키는 방법은 무엇입니까?

  25. 25

    Cocos2d x 동시에 다른 CCNod에 대한 작업을 시퀀스하는 방법은 무엇입니까?

  26. 26

    OpenCV에서 동일한 창에 2 개의 다른 소스를 표시하는 방법은 무엇입니까?

  27. 27

    레코드 업데이트와 동시에 배치 작업을 실행하는 방법은 무엇입니까?

  28. 28

    여러 출력 매개 변수로 프로 시저를 작성하는 방법은 무엇입니까?

  29. 29

    두 개의 다른 CRM 시스템에서 문제 티켓을 복사하는 프로세스를 자동화하는 방법은 무엇입니까?

뜨겁다태그

보관