Spring Cloud DataFlow本地服务器不导入Tailing File的新自定义源

时间:2016-08-30 20:53:34

标签: spring spring-boot spring-integration spring-cloud-stream spring-cloud-dataflow

我正在尝试为" Tailing"写一个自定义来源。我使用了春季样本的片段来编写代码。这是实际的代码,

root_logger

属性文件是,

@ComponentScan
@EnableBinding(Source.class)
@EnableConfigurationProperties(TailSourceProperties.class)
public class TailSourceConfiguration {
    @Autowired
    private TailSourceProperties properties;
    private final Logger logger = LoggerFactory.getLogger(TailSourceConfiguration.class); 

    @Autowired
    Source source;

    @Bean
    public IntegrationFlow tailFlow() {
        return IntegrationFlows.from((MessageProducers p) ->p.tail(new File(properties.getFilename())).delay(500).end(false).autoStartup(true)).channel(source.output()).get();
    }
}

现在,当我使用此代码运行junit测试时,使用下面的junit测试用例就可以正常工作了。

@ConfigurationProperties("tail")
public class TailSourceProperties {

    /**
     * The file name to tail
     */
    @Value("#{ systemProperties['tail.file'] ?: '/tmp/tailfile.log'}")
    private String filename;

     /**
     * the native options to be used in conjunction with the tail command eg. -F -n 0 etc.
     */
    @Value("#{ systemProperties['tail.nativeoptions'] ?: '-F -n 0'}")
    private String nativeOptions;

    public String getNativeOptions() {
        return nativeOptions;
    }

    public void setNativeOptions(String nativeOptions) {
        this.nativeOptions = nativeOptions;
    }

    public String getFilename() {
        return filename;
    }

    public void setFilename(String filename) {
        this.filename = filename;
    }

}

运行junit测试时,我确实在控制台中看到了默认文件内容。

现在,当我尝试将其捆绑在jar中并将其部署到具有版本的本地spring cloud数据流服务器时,我遇到了两个问题:

  • 弹簧云数据流服务器和本地1.0.1.BUILD-SNAPSHOT.jar
  • 弹簧云数据流服务器和本地1.0.0.RELEASE.jar

我正在使用的shell jar版本是

  • 弹簧云数据流壳1.0.1.BUILD-SNAPSHOT.jar

我面临的问题是:

  1. 源类型已成功部署并显示在应用列表中,但当我运行 应用信息源:尾 时,应用属性信息不会显示请查看下面的截图。
  2. Screenshot of the shell

    jar结构与File source引导jar完全相似,并使用Spring的Maven包装器构建。带有元数据的json属性文件也是根据期望生成的,并且存在于捆绑的spring源jar中的META_INF中。

    1. 源本身不起作用。 当我尝试将这个新的尾源与日志接收器一起使用时,它永远不会起作用。
    2. 最后,我知道它可能无法在云服务器上运行,但计划是在本地服务器本地数据流服务器上运行它。我也知道我可以尝试使用spring集成框架本身,但这是通过spring cloud Dataflow实现这一目标的外部请求。

      我们非常感谢任何帮助,我的请求是Artem(https://stackoverflow.com/users/2756547/artem-bilan),Gary(https://stackoverflow.com/users/1240763/gary-russell)以及所有社区的其他人。请提前感谢您的意见和反馈!

1 个答案:

答案 0 :(得分:1)

首先感谢邀请您审核您的工作:)。

其次,这是一项伟大的工作,我坚持将其贡献给框架。我们在Spring XD中有这样一个模块,我不知道是什么阻止我们将Spring Cloud Stream Apps扩展到tail。所以,随时填写issue关于此事并公布解决方案!

现在,我认为您必须将spring-configuration-metadata-whitelist.properties文件添加到jar的META-INF

您的内容必须是这样的:

configuration-properties.classes=[THE_PACKAGE_TO_CLASS].TailSourceProperties

如果没有适当的Binder组装,它也无法正常工作。

您必须向项目添加spring-cloud-stream-binder-rabbit-1.0.0.RELEASE依赖项,以使用RabbitMQ Binder构建目标超级jar。或spring-cloud-stream-binder-kafka如果是你的情况。

在Spring Cloud Stream App Starters Stream README中查看更多信息。