当前位置: 首页 > 知识库问答 >
问题:

从xml到Java的Spring集成InboundChannelAdapter导致新的轮询控制台日志

百里渊
2023-03-14

将Spring集成bean从xml转换为Java。现在,我得到了每个@InboundChannelAdapter的新控制台日志,这是我以前没有得到的:

AbstractPollingEndpoint task-scheduler-7调试在轮询期间没有收到任何消息,返回“false”

<file:inbound-channel-adapter id="the-file-input"
    directory="file:${import.file.dir.incomingFileDir}" channel="the-input" filter="customFilter" />
<si:channel id="the-input" />
<si:service-activator input-channel="the-input"
    output-channel="job-requests" ref="theJobLauncher" />

<bean id="theJobLauncher" class="com.example.POJO">

</bean>

新的Java配置

@Bean(name="theInput")
public MessageChannel manifestInputChannel() {
    return new DirectChannel();
}

@Bean(name="theFileInput")
@InboundChannelAdapter(channel="theInput")
public MessageSource<File> filesInboundChannelAdapter(@Value("${import.file.dir.incomingFileDir}") String incomingDirectory){
    FileReadingMessageSource sourceReader = new FileReadingMessageSource();
    sourceReader.setDirectory(new File(incomingDirectory));
    sourceReader.setFilter(customFileFilter);

    sourceReader.afterPropertiesSet();

    return sourceReader;
}


@Bean
@ServiceActivator(inputChannel="theInput", outputChannel="jobRequestsChannel")
public Pojo theJobLauncher() {
    Pojo theJobLauncher = new Pojo();

    return theJobLauncher;
}

Jobjaucher引用具有@MessageEndpoint注释和@ServiceActivator方法的类

这个新的控制台日志行是正常的还是我的配置有问题?

共有1个答案

百里成仁
2023-03-14

您引用的内容正好在AbstractPollingEndpoint中:

    if (message == null) {
        if (this.logger.isDebugEnabled()) {
            this.logger.debug("Received no Message during the poll, returning 'false'");
        }
        result = false;
    }

因此,这肯定意味着您已经将org.springframework.integration类别的记录器配置为debug级别。

这一点也不疼。您只是在以前的版本中没有这种日志配置。

您不需要自己调用SourceReader.AfterPropertiesSet();。这是一个应用程序上下文回调,它确实要被调用,因为您将它声明为bean。

您的@serviceactivator定义不正确。只有当您使用MessageHandler实现时,@bean注释才可以存在。

您可以将@serviceactivator(inputchannel=“theinput”,outputchannel=“jobrequestschannel”)移动到pojo方法中,只需使用@bean为该pojo声明一个bean。或者,由于您已经在该类上使用了@messageendpoint,您可以考虑打开@componentscan来让应用程序上下文获取您的类a bean。

另一种方法实际上类似于MessageHandler实现,并调用您的POJO:

@Bean
@ServiceActivator(inputChannel="theInput", outputChannel="jobRequestsChannel")
public MessageHandler theJobLauncherServiceActivator(Pojo theJobLauncher) {
    return new MethodInvokingMessageHandler(theJobLauncher, (String) null);
}
 类似资料:
  • 如何使用java dsl Integrationflows从spring集成触发spring批处理作业。 我有下面的代码,它轮询目录中的文件,当新文件添加到目录中时,会生成一条消息,我想在该实例中触发一个Spring批处理作业。请建议。

  • 当我尝试运行这段代码时,我在Level Object中面临一些问题。 错误:

  • 每次我尝试通过清除控制台按钮清除eclipse中的控制台时,都会导致eclipse意外死亡。

  • 我正在为我的应用程序使用spring boot,并且我正在使用默认的spring boot日志记录。 是否有任何配置来防止spring boot将日志消息打印到控制台?

  • 下面是配置了标头的出站http网关,但在添加轮询器时不会连续触发。它只会被触发一次,然后停止。

  • 我正在使用jhipster,我想在我的WebApp中集成spring批处理管理控制台。(例如http://localhost:8080/batch-console) 我尝试在我的jhipster webapp中集成以下响应,有没有一种方法可以正确地集成spring-batch-admin和spring-boot?但我得到以下错误(属性似乎未加载) Spring Boot版本:1.4.1.发布Jhi