toSftpChannel Bean仅在SpringbootTest中起作用,而在其他类中不起作用

时间:2018-08-20 12:16:58

标签: spring-integration spring-integration-sftp

public class ABC {

    @Autowired
    @Qualifier("toSftpChannel")
    public MessageChannel toSftpChannel;

    public void handleRequest(String id) {
        RestTemplate restTemplate = new RestTemplate();
        DocumentumDataObject dataObj = restTemplate.getForObject(
                "url" + id,
                DataObject.class);

        String decodedData = new String(Base64.getDecoder().decode(dataObj.getFileEncodedString()));

        String fileName = "dctm_gsnfr_" + id + ".pdf";
        System.out.println("channel: " + toSftpChannel);
        this.toSftpChannel.send(MessageBuilder.withPayload(decodedData).setHeader(FileHeaders.FILENAME, fileName).build());

    }

}

以上代码不起作用。对于'toSftpChannel'自动装配的bean,我没有得到这样的bean MessageChannel。

但是下面的代码可以:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ABCTest{

    @Autowired
    @Qualifier("toSftpChannel")
    public MessageChannel toSftpChannel;

    @Test
    public void sftpOutboundFlowTest() {
        System.out.println("channel: " + toSftpChannel);
        this.toSftpChannel
            .send(MessageBuilder.withPayload(payload)
                    .setHeader(FileHeaders.FILENAME, fileName)
                    .build());
    }

}

请考虑以下代码是其余的bean:

@Configuration
@EnableAutoConfiguration
@IntegrationComponentScan
public class ASDF {

@Autowired
private SftpSessionHandler sftpSessionHandler;

@Bean
public IntegrationFlow sftpOutboundFlow() {
    return IntegrationFlows.from("toSftpChannel")
            .handle(Sftp.outboundAdapter(this.sftpSessionHandler.sftpSession, FileExistsMode.FAIL)
                            .useTemporaryFileName(false)
                            .remoteDirectory("/")
            ).get();
}

@Component
public class SftpSessionHandler {

public DefaultSftpSessionFactory sftpSession;

public SftpSessionHandler() {
    sftpSession = new DefaultSftpSessionFactory(true);
    sftpSession.setHost("1.2.3.4");
    sftpSession.setPort(22);
    sftpSession.setUser("asdf");
    sftpSession.setPassword("asdf");
    sftpSession.setAllowUnknownKeys(true);
    }

}

总体流程是

  1. 暴露了在路径中具有对象ID的其余端点
  2. 请求处理程序被调用,它是ABC类,它从id获取文件,并调用sftpChannel.send()
  3. 设置了sftpOutboundflow以将文件发送到目标sftp服务器
  4. 测试类工作正常,但请求处理程序不起作用

我是春季整合的新手(2周)。我已经看过您在YouTube上进行的技术讲座,并发现它很有启发性。先感谢您。 :)

0 个答案:

没有答案