【问题标题】:Spring boot @ConfigurationProperties not loaded during start up as a result it's returing nullSpring boot @ConfigurationProperties 在启动期间未加载,因此返回 null
【发布时间】:2021-09-21 14:34:38
【问题描述】:

我正在使用 Spring Boot 版本 2.4.2 的 @Configuration 属性。应用程序启动似乎很好,但属性没有作为地图加载。请在下面的 sn-ps 中找到示例代码

ApisConfig.java

@Getter
@Setter
@ConfigurationProperties(prefix = "apis")
@Component
@ToString
public class ApisConfig {
    private Map<String, String> apisMap =new HashMap<>();

    public String getRouteDetails(String key){
        return this.apisMap.get(key);
    }
}

下面是spring boot注解的主要应用

@ComponentScan(
        basePackages = {"com.demo"})
@SpringBootApplication
@EnableConfigurationProperties(ApisConfig.class)
public class DemoApplication implements CommandLineRunner {

    @Autowired
    private ApisConfig apisConfig;

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

    @Override
    public void run(String... args) throws Exception {
        apisConfig.getRouteDetails("qna");
    }
}

以下是位于 src/main/resources 下的属性文件

apis.apisMap.qna=10.0.0.254
apis.apisMap.adapter=10.0.0.254
server.port=6165

以下是我用于构建的工具

  • 分级
  • IntelliJ 理想
  • Spring Boot 2.4.2

感谢任何帮助

【问题讨论】:

  • 你试过调试,应用启动时地图是空的吗?
  • 是的,它是空的,我已经实现了命令行运行器,并在 run() 方法中添加了断点,并评估了它为 null 且 map 为空的语句@TimBiegeleisen
  • 您可以删除DemoApplication 中的@ComponentScan@EnableConfigurationProperties。因为你是同一个包。之后尝试并在此处更新。
  • Lombok 是否在您的应用程序中正确配置?如果没有它应该生成的 getter 和 setter,Spring Boot 将无法看到 apisMap 属性。在您诊断问题时,我建议您通过删除 Lombok 并自己编写 getter 和 setter 来简化事情。
  • 也感谢@GnanaJeyam 的投入

标签: java spring-boot properties


【解决方案1】:

我找到了解决方案。 @AndyWilkinson 谢谢你的指点。 Lombok 未正确设置,因此未正确选择 apisMap。我已经修复它并开始像宝石一样工作。我已将以下依赖项添加到 build.gradle 文件并开始工作

annotationProcessor 'org.projectlombok:lombok'

【讨论】:

  • 设置依赖项的替代方法是通过插件:例如plugins { id 'io.freefair.lombok' version '5.3.3.3' }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多