0

我有一个有点复杂的应用程序配置,我正在尝试映射到 POJO,但它不起作用。我查看了示例,并认为这是正确的方法。

应用程序属性:

app.activeEnv=dev
debug=true
logging.level.com.nationwide.ess.contentcollector=DEBUG

app.nas1Root=/Users/userid/devl/ICC_DEV
app.nas2Root=ohlewnas0130.nwie.net

task.triggerCron=* * * * * *

task.job[0].name=CCC
task.job[0].monitor[0]=${app.nas1Root}/Claims/CCC/index
task.job[0].monitor[1]=${app.nas2Root}/Folder/CCC/index
task.job[0].processed=${app.nas2Root}/Processed/CCC_Claims
task.job[0].errors=${app.nas1Root}/Errors/CCC_Claims
task.job[0].triggerTimes[0]=15:55
task.job[0].triggerTimes[1]=16:00

task.job[1].name=CIF
task.job[1].monitor[0]=${app.nas1Root}/Policy/CIF_OV
task.job[1].processed=${app.nas1Root}/Processed/CIF_Dist
task.job[1].errors=${nas1Root}/Errors/CIF_Dist
task.job[1].triggerTimes[0]=12:00

应用程序属性.java:

package com.nationwide.ess.contentcollector.config;

import java.util.List;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;

import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@ConfigurationProperties(prefix="app")
public class ApplicationProperties {
  private String activeEnv;
  private String nas1Root;
  private String nas2Root;

  @Bean
  @ConfigurationProperties(prefix = "task")
    public static Task task() {
    return new Task();
  }
  
  @Data
  @NoArgsConstructor
  public static class Task {
    private String triggerCron;
    private List<Job> job;

    @Data
    @NoArgsConstructor
    public static class Job {
      private String name;

      private List<String> monitor;

      private String processed;

      private String errors;

      private List<String> triggerTimes;
    }
  }
}

ContentCollectorApplication.java:

package com.nationwide.ess.contentcollector;

import com.nationwide.ess.contentcollector.config.ApplicationProperties;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
@EnableConfigurationProperties(ApplicationProperties.class)
public class ContentCollectorApplication {
  static final Logger log = LoggerFactory.getLogger(SpringApplication.class);

  public static void main(String[] args) {
    SpringApplication.run(ContentCollectorApplication.class, args);
  }

}

但是当它运行时,ApplicationProperties 只有“app”级别的值(没有 task 和 task.job)。

4

1 回答 1

2

Task类移动到它自己的文件中,然后当您需要这些属性时,您只需声明对TaskPropertiesSpring 管理的 bean 的依赖项,以便 Spring 注入它(假设它是对另一个 Spring 管理的 bean 的依赖项):

@Data
@NoArgsConstructor
@ConfigurationProperties(prefix = "task")
public class TaskProperties {
  private String triggerCron;
  private List<Job> job;

  @Data
  @NoArgsConstructor
  public static class Job {
    private String name;
    private List<String> monitor;
    private String processed;
    private String errors;
    private List<String> triggerTimes;
  }
}

由于我不完全确定静态嵌套Job类,如果前面的不起作用,那么尝试移动Job到它自己的文件,如下所示:

@Data
@NoArgsConstructor
@ConfigurationProperties(prefix = "task")
public class TaskProperties {
  private String triggerCron;
  private List<Job> job;
}
@Data
@NoArgsConstructor
public static class Job {
  private String name;
  private List<String> monitor;
  private String processed;
  private String errors;
  private List<String> triggerTimes;
}
于 2021-11-02T00:22:53.570 回答