我使用以下方法从属性中获取值。但我想知道哪一个最适合遵循编码标准?另外,还有其他方法可以从Spring中的属性文件中获取值吗?
PropertySourcesPlaceholderConfigurer
getEnvironment() from the Spring's Application Context
Spring EL @Value
答案 0 :(得分:1)
与其他配置类(ApplicationConfiguration等)一起,我创建了一个带有注释@Service的类,这里我有以下字段来访问我文件中的属性:
@Service
public class Properties (){
@Value("${com.something.user.property}")
private String property;
public String getProperty (){ return this.property; }
}
然后我可以自动装配该类并从我的属性文件中获取属性
答案 1 :(得分:1)
答案是, 这取决于。
如果属性是配置值,
然后配置'21781','4243','15787'
'21781','4249','15793'
'21781','4255','15823'
'21782','4243','15787'
'21782','4249','15793'
'21782','4255','15823'
'21782','4285','15526'
'21782','4288','17588'
'21783','4243','15787'
'21783','4249','15793'
'21783','4255','15823'
'21783','4285','15527'
'21783','4288','17588'
'21784','4243','15787'
'21784','4249','15793'
'21784','4255','15823'
'21784','4285','15527'
'21784','4288','15542'
'21785','4243','15877'
'21785','4249','15793'
'21785','4255','15823'
'21785','4285','15527'
'21785','4288','17588'
(下面是Spring xml配置文件的示例)。
propertyConfigurer
以这种方式配置时, 找到的最后一个文件的属性覆盖那些找到的earler (在位置列表中)。 这允许您发送war文件中捆绑的标准configuration.properties文件,并在每个安装位置存储configuration.overrides.properties以解决安装系统差异。
一旦你有了propertyConfigurer,
使用<bean id="propertyConfigurer"
class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<value>classpath:configuration.properties</value>
<value>classpath:configuration.overrides.properties</value>
</list>
</property>
</bean>
注释注释您的类。
这是一个例子:
@Value
不需要将配置值集群到一个类中, 但这样做可以更容易地找到值的使用位置。
答案 2 :(得分:0)
@Value将是一种简单易用的方法,因为它会将属性文件中的值注入您的字段。
旧的PropertyPlaceholderConfigurer和Spring 3.1中添加的新PropertySourcesPlaceholderConfigurer都解析了bean定义属性值和@Value注释中的$ {...}占位符。
与 getEnvironment
不同使用 property-placeholder 不会将属性公开给 Spring Environment - 这意味着检索这样的值 不起作用 - 它将返回null
当您使用<context:property-placeholder location="classpath:foo.properties" />
并使用env.getProperty(key);
时,它将始终返回null。
使用getEnvironment查看此帖子中的问题:Expose <property-placeholder> properties to the Spring Environment
此外,在Spring Boot中,您可以使用 @ConfigurationProperties 在application.properties中使用分层和类型安全来定义自己的属性。并且您不需要为每个字段添加@Value。
@ConfigurationProperties(prefix = "database")
public class Database {
String url;
String username;
String password;
// standard getters and setters
}
在application.properties中:
database.url=jdbc:postgresql:/localhost:5432/instance
database.username=foo
database.password=bar