属性文件如下所示:
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
仍然无法正常工作
@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
仍然无法正常工作
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
,接下来你具体key
和value
。例:
path-mapper.key=value
请记住,在您自己的属性更改后,您需要重新加载应用程序。例:
如果您可以为属性文件提供更具体的示例,将会很有帮助。您应该在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
}
将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);
从属性文件中提供地图需要两件事。首先,您需要一个具有配置和目标字段的类来保存属性文件中的数据。
@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