1

저는 현재 Spring Integration을 처음 사용합니다.
기본적으로 Java Spring 통합 DSL과 비동기 적으로 여러 파일 위치로 폴링을 시도합니다. 파일 이름을 가져오고 파일 이름과 함께 몇 가지 작업을 수행하고 마지막으로 파일을 S3에 푸시해야합니다. 내 질문은 파일 작업을 수행하는 이러한 작업을 작업 실행자 또는 서비스 활성기 처리기에서 수행 할 수 있는지 여부입니다. 나는 옳은 장소인지 모르겠습니다.Spring Integration Service Activator 핸들러 비즈니스 로직

@Autowired 
private AWSFileManager awsFileManager; 

@Bean 
public IntegrationFlow inboundChannelFlow(@Value("${file.poller.delay}") long delay, 
@Value("${file.poller.messages}") int maxMsgsPerPoll, 
TaskExecutor taskExecutor, MessageSource<File> fileSource) 
{ 
    return IntegrationFlows.from(fileSource, 
      c -> c.poller(Pollers.fixedDelay(delay) 
        .taskExecutor(taskExecutor) 
        .maxMessagesPerPoll(maxMsgsPerPoll))) 
      .handle("AWSFileManager", "fileUpload") 
      .channel(ApplicationConfiguration.inboundChannel) 
      .get(); 
} 

@Bean 
TaskExecutor taskExecutor(@Value("${file.poller.thread.pool.size}") int poolSize) { 
    ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); 
    //Runnable task1 =() -> {this.methodsamp();}; 
    taskExecutor.setCorePoolSize(poolSize); 

    //taskExecutor.execute(task1); 
    return taskExecutor; 
} 
@Async 
public void methodsamp() 
{ 
    try 
    { 
     awsFileManager.fileUpload(); 
     System.out.println("test"); 
    } 
    catch(Exception ex) 
    { 

    } 

여기에 샘플 코드를 첨부했습니다.
매개 변수로 fileUpload 메서드에 전달해야하므로 채널의 파일 이름을 검색 할 수있는 방법이 있습니다. 알려주십시오.

+0

SO 스레드 당 질문을 너무 많이하지 마십시오. –

+0

예. 확실합니다. 다음에 그것을 따라갈 것입니다. 고맙습니다 ! – Raven21

답변

1

질문이 명확하지 않습니다. TaskExecutor은 흐름의 스레드 컨텍스트를위한 것입니다. 서비스 활성화 자 (.handle())는 비즈니스 논리 방법에 정확하게 부합합니다. 이것은 실행 프로그램의 스레드에서 수행 할 수 있습니다. 그리고 실제로는 IntegrationFlow에서 올바르게 사용합니다.

FileReadingMessageSourcejava.io.File 인 메시지를 payload으로 생성합니다. 따라서 파일 이름을 얻는 방법은 File.getName()입니다!

+0

정말 고맙습니다. 알았어.하지만 핸들러는 빈 이름과 메서드 이름을 모두 가지고 문자열을 취한다. 파일 이름 매개 변수를 어떻게 지정합니까? – Raven21

+0

왜 그렇게 생각하니? AWS S3로 보내려면'File' 객체가 꼭 필요합니다. 그래서, 당신은'fileUpload()'에서'.handle()'에 의해 수신되는 메시지의'poyload'가 무엇인지 예상해야합니다. –

+0

Books on the matter 또는 적어도 Spring Integration Reference Manual을 읽어 보시기 바랍니다. 'fileReadingMessageSource'는 파일을 페이로드로 사용하여 메시지를 생성합니다. 그들은 채널로 보내집니다. '.handle()'은 그 채널을 구독하고 서비스 메소드를 호출하고 메소드의 인수에 적절한 값을 제공합니다. 서비스 메소드를'fileUpload (File fileToUpload)'로 만들고 수신 메시지의'payload'가이 인수로 전달됩니다. –