我有这个Spring启动应用程序。属性
list1=valueA,valueB
list2=valueC
list3=valueD,valueE
topics=list1,list2,list3
我想做的是在@KafkaListener
的主题
元素中使用主题属性值的值注释
使用表达式
@KafkaListener(topics={"#{'${topics}'.split(',')}"})
我得到列表1
,列表2
,列表3
作为分隔字符串
我如何循环到这个列表以获得值A
,值B
,值C
,值D
,值E
?
编辑:我必须解析主题
属性,以便@KafkaListener注册以使用来自主题value eA
、value eB
、value eC
等的消息。
我读到可以通过这种方式调用方法:
@KafkaListener(topics="#parse(${topics})")
所以,我写了这个方法:
public String[] parse(String s) {
ExpressionParser parser = new SpelExpressionParser();
return Arrays.stream(s.split(",").map(key -> (String)(parser.parse(key).getValue())).toArray(String[]::new);
}
但未调用parse
方法
因此,我尝试用这种方式直接将其添加到注释中:
@KafkaListener(topics="#{Arrays.stream('${topics}'.split(',')).map(key->${key}).toArray(String[]::new)}")
但是这个解决方案也会给我带来错误。
编辑2:
以这种方式修改会调用该方法
@KafkaListener(topics="parse()")
@Bean
public String[] parse(String s) {
...
}
问题是如何在方法中获得“主题”道具
你不能像那样调用任意的方法;您需要引用bean @someBean.parse(...)
;使用< code>#parse需要将静态方法注册为函数。
然而,这对我很有效,而且简单得多:
list1=valueA,valueB
list2=valueC
list3=valueD,valueE
topics=${list1},${list2},${list3}
和
@KafkaListener(id = "so64390079", topics = "#{'${topics}'.split(',')}")
编辑
如果您不能在< code >主题中使用占位符,这也可以...
@SpringBootApplication
public class So64390079Application {
public static void main(String[] args) {
SpringApplication.run(So64390079Application.class, args);
}
@KafkaListener(id = "so64390079", topics = "#{@parser.parse('${topics}')}")
public void listen(String in) {
System.out.println(in);
}
}
@Component
class Parser implements EnvironmentAware {
private Environment environmment;
@Override
public void setEnvironment(Environment environment) {
this.environmment = environment;
}
public String[] parse(String[] topics) {
StringBuilder sb = new StringBuilder();
for (String topic : topics) {
sb.append(this.environmment.getProperty(topic));
sb.append(',');
}
return StringUtils.commaDelimitedListToStringArray(sb.toString().substring(0, sb.length() - 1));
}
}
“env”为:“org.springframework.core.env.environment” 现在,当我在Eclipse中运行Spring Boot应用程序时,我希望这段代码从类路径中的application.properties获取属性(在project/src/main/resources中),但它使用的是project/config中的另一个application.properties
我想让运行中的Spring(引导)应用程序的所有属性占位符及其解析值都可用于进程监控。在第一步中,可以将它们写入日志,或者创建一个类似于application.pid文件的'resolved.properties'文件。应该考虑使用属性占位符(隐式/显式)的所有属性。 动机:在操作过程中通常很难知道解析属性的值。系统属性或命令行参数是“可见的”,但代码中隐藏的默认值(如)很难找到。我希望能够回答“
我使用pyChume5.0和python3.5。并且我通过pyChume5的内置函数(设置-项目-项目解释器-"")下载了所有的liarbry。其他库看起来不错,但是flask-SQLAlchey出现了一些问题。 我导入烧瓶-SQLAlChemysuccessfully.however,py 我已经尝试了一些方法,但它们不起作用.例如:1.重新启动 2.删除并重新下载 3.刷新缓存。PyCharm
获取以下异常: 原因:org.hibernate.queryException:无法解析属性:primaryAddress:com.hcentive.user.ContactInfo在org.hibernate.persister.entity.abstractPropertyMapping.PropertyException(abstractPropertyMapping.java:62)~[h
问题内容: 我有我的配置: 我得到错误 我知道这可能缺少属性文件,但是我在类路径中恰好有它。有什么不见了? 我的web.xml: 问题答案: 你的应用程序中可能有多个。尝试在超类的方法上设置一个断点,看看在应用程序启动时是否多次调用了该断点。如果不止一个,则可能需要查看配置属性,以便你的应用程序可以正常启动。
问题内容: 我需要解析Java(Android)中来自AppEngine的DateTime字符串。该字符串如下所示:。它是某种标准格式吗?有没有比使用custom更简单的方法? 问题答案: 非常简单,除了日期字符串由于其中的最后一个而有些偏离。只需替换并使用以下模式即可: