一尘不染

Spring Boot-从属性文件注入映射

spring-boot

属性文件如下所示:

url1=path_to_binary1
url2=path_to_binary2

根据这个我尝试以下方法:

@Component
@EnableConfigurationProperties
public class ApplicationProperties {
    private Map<String, String> pathMapper;

    //get and set
}

在另一个组件中,我自动连接了ApplicationProperties:

@Autowired
private ApplicationProperties properties;         
      //inside some method:
      properties.getPathMapper().get(appName);

产生NullPointerException

如何纠正?

更新

我有正确的根据user7757360的建议:

@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix="app")
public class ApplicationProperties {

和属性文件:

app.url1=path_to_binary1
app.url2=path_to_binary2

仍然不起作用

更新2

@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix="app")
public class ApplicationProperties {
    private Map<String, String> app;

里面application.properties

app.url1=path_to_binary1
app.url2=path_to_binary2

仍然不起作用


阅读 298

收藏
2020-05-30

共1个答案

一尘不染

NullPointerException可能是空的ApplicationProperties

所有自定义属性都应加注解@ConfigurationProperties(prefix="custom")。之后,必须在您的主类(具有main方法的类)上添加@EnableConfigurationProperties(CustomProperties.class)。对于自动完成,您可以使用:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

如果使用@ConfigurationProperties不带前缀,则仅使用字段名称。您的属性中的字段名称。就您而言path- mapper,接下来您具体keyvalue。例:

path-mapper.key=value

在更改自己的属性后,请记住您需要重新加载应用程序。例:

https://github.com/kchrusciel/SpringPropertiesExample

2020-05-30