我正在尝试为" 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数据流服务器时,我遇到了两个问题:
我正在使用的shell jar版本是
我面临的问题是:
jar结构与File source引导jar完全相似,并使用Spring的Maven包装器构建。带有元数据的json属性文件也是根据期望生成的,并且存在于捆绑的spring源jar中的META_INF中。
最后,我知道它可能无法在云服务器上运行,但计划是在本地服务器本地数据流服务器上运行它。我也知道我可以尝试使用spring集成框架本身,但这是通过spring cloud Dataflow实现这一目标的外部请求。
我们非常感谢任何帮助,我的请求是Artem(https://stackoverflow.com/users/2756547/artem-bilan),Gary(https://stackoverflow.com/users/1240763/gary-russell)以及所有社区的其他人。请提前感谢您的意见和反馈!
答案 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中查看更多信息。