【问题标题】:Trouble splitting an array in @PostConstruct Method of my Kafka SpringBoot Application在我的 Kafka Spring Boot 应用程序的 @PostConstruct 方法中拆分数组时遇到问题
【发布时间】: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


【解决方案1】:

我想我会继续跟进答案。我不知道这是怎么发生的,但是调试器中的 Eclipse 中的代码与正在运行的代码不同。我不知道这是否是 EGIT 或 Eclipse 中的错误。当我运行 Maven clean 并且我的项目将不再启动时,这一点变得很明显。每当我尝试调试时,它会启动并说它找不到主类,这是我的 Spring 应用程序启动类。我做了一个 Maven 构建,这似乎让一切都同步了。然后代码开始按预期工作。

【讨论】:

    猜你喜欢
    • 2016-08-29
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 2012-05-07
    • 2013-04-14
    • 2023-03-16
    相关资源
    最近更新 更多