Spring Boot - 从属性文件中注入地图

问题描述 投票:0回答:4

属性文件如下所示:

url1=path_to_binary1
url2=path_to_binary2

根据this我尝试了以下方法:

@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

怎么纠正呢?

更新

我有正确的用户7757360建议:

@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

仍然无法正常工作

java spring spring-boot configuration
4个回答
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


3
投票

如果您可以为属性文件提供更具体的示例,将会很有帮助。您应该在url1和url2中使用相同的前缀,然后才能使用

@ConfigurationProperties(prefix="my")

如在

my.pathMapper.url1=path_to_binary1 my.pathMapper.url2=path_to_binary2

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

    //get and set for pathMapper are important
}

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-loading-yaml看到更多


0
投票

将your.properties文件放在src/main/resources下,并将其作为a

@Configuration
@PropertySource("classpath:your.properties")
public class SpringConfig(){}

或者在你的春天PropertyPlaceholderConfigurer中将它作为yourApplicationContext.xml

然后使用属性值

@Value("app.url1")
String path_to_binary1;

@Value("app.url2")
String path_to_binary2;

// ...

System.out.println(path_to_binary1+path_to_binary2);

0
投票

从属性文件中提供地图需要两件事。首先,您需要一个具有配置和目标字段的类来保存属性文件中的数据。

@Configuration
@PropertySource("classpath:myprops.properties")
@ConfigurationProperties("props")
@Component
public class Properties{
   private Map<String,String> map = new HashMap<String,String>();
   // getter setter
}

然后定义名为myprops.properties的属性文件,将所有属性定义为props

props.map.port = 443
props.map.active = true
props.map.user = aUser
© www.soinside.com 2019 - 2024. All rights reserved.