【发布时间】: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