我可以使用注射获得一些属性。但是当我使用spring环境时,我找不到它。我的最终目标是找到所有定义的属性,并通过前缀在它们之间进行搜索。 Spring: access all Environment properties as a Map or Properties object中的答案都不适合我。
这是我的Dispatcher
配置:
<bean id="proxyProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="ignoreResourceNotFound" value="true"/>
<property name="locations">
<list>
<value>classpath:device.properties</value>
<value>file:/${user.dir}/device-local.properties</value>
<value>file:${smartpos.config.dir:/etc/pos}/device.properties</value>
</list>
</property>
</bean>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true"/>
<property name="properties" ref="proxyProperties"/>
<property name="placeholderPrefix" value="!device{"/>
<property name="placeholderSuffix" value="}"/>
</bean>
固定值注射工作正常:
@Service
public class DeviceService {
@Value(value = "!device{application.version.pattern}")
public void setVersion(String apiVersion) throws DeviceAPIException { }
在Environment
中查找该属性不起作用,我无法找到它:
@Autowired
public DeviceService(Environment env) {
String s = env.getProperty("application.version.pattern");
s = env.getProperty("!device{application.version.pattern}");
}
我打开了Environment
并且有5个属性源,如System或JNDI,但它们都不包含device.properties
文件中的属性。这可能是链接问题无法解答的原因。它们都列出了系统属性,但缺少我的属性。
我使用jetty-maven-plugin在jetty中运行此应用程序。