【发布时间】:2019-11-14 20:49:36
【问题描述】:
我正在创建一个跟踪对象状态的 Kafka Springboot 侦听器。我有 kafka 部分工作并且能够听主题。我正在使用树映射将作为主题的字符串键映射到对象。主题名称实际上包含一些我想用来初始化对象的信息。我的问题是这个(对不起,我对 SpringBoot 不是很熟悉)。
在我的 Post Construct 方法中,我有一个名为 locoTopics 的字符串数组。我已经验证了字符串正在进入并且它们的形式是“ignore.ignore.mark.id”。我遇到的问题是,当我尝试在 Post Construct 方法中拆分字符串时,它似乎返回 null,即使字符串肯定包含“。”表达。我说它出现了,因为程序似乎向前跳转并跳过了几行代码。准确地说,当我调试时。它似乎来自“String [] locoArray = locoTopics[i].split("\.");”立即到我的 Object 构造函数并跳过其间的所有步骤。然后它似乎跳进跳出循环。我很困惑为什么会这样。这是与正在发生的 SpringBoot 相关的事情,还是我在代码中遗漏了什么?任何帮助将不胜感激。
public class InitTrackerReceiver {
// instance variables
Map mapr = new TreeMap<String, Locomotive>();
String[] locoTopics;
public List<String> m_failureCodes;
// Moved Functionality to get loco ids into separate class, Locomotive IDs now
// gets locoids
@Autowired
public LocomotiveIDs locomotiveIDs;
//This is where loco objects will be instantiated
@PostConstruct
public void initializeLocomotives() {
// grab loco topic strings and separate into a string array
locoTopics = locomotiveIDs.getLocoString();
// Go through the loco topics from application.properties and create a Loco
// object with that string as identifier
for (int i = 0; i < locoTopics.length; i++) {
String [] locoArray = locoTopics[i].split("\\.");
String markString = locoArray[2];
String scacString = "name";
String idString = locoArray[3];
mapr.put(locoTopics[i], new Locomotive(locoTopics[i], markString, scacString, idString));
}
}
@Value("#{'${failure.init.messagefields}'.split(',')}")
List<String> typesToFail;
【问题讨论】:
-
你查看
locomotiveIDs.getLocoString()的返回了吗?是你预期的吗? -
是的,它是一个形式为 ["ignore1.ignore1.mark1.id1", "ignore2.ignore2.mark2.id2" .........] 的字符串数组到 locoTopics[i] 的方式一切都按预期工作。事实上,当我删除字符串拆分部分并更改我在机车上的构造函数以接受整个字符串时。它工作得很好。只有将字符串拆分命令放入其中时才会出现问题。
标签: java spring-boot