我在src/main/resources
中有一个属性文件。
Spring 4.0和Java 1.8项目。
mock.properties
key=test
WEB-INF / web.xml中
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>
WEB-INF / MVC-调度-servlet.xml中
<context:component-scan base-package="com.x.y.z.*">
</context:component-scan>
<context:annotation-config />
<context:spring-configured />
<context:property-placeholder location="classpath:mock.properties"
order="-1" ignore-resource-not-found="true" ignore-unresolvable="true" />
<mvc:annotation-driven />
Controller.java ...我可以在控制器中访问属性键的值。
@Controller
@RequestMapping("/xyz")
public class EC2Controller {
@Value("${key}")
String v;
}
Helper.java ...无法访问任何属性。总是得到“null”
@Component
public class Helper {
@Value("${key}")
String v;
}
我也尝试过在论坛和spring docs上提出的各种选项,但帮助者只是无法阅读prop.I试过以下
@Configuration
@PropertySource("classpath:mock.properties")
public class Helper {
@Value("${key}")
String v;
@Bean
public static PropertySourcesPlaceholderConfigurer
propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
和
@Configuration
@PropertySource("classpath:mock.properties")
public class Helper {
@Autowired
Environment env;
String v = env.getProperty("key");
}
无效。
答案 0 :(得分:0)
答案取决于您是否使用&#34; springonfig.xml&#34;你在上面展示的。根据您的代码示例,看起来您不是(除非缺少某些内容)。
你的&#34; springonfig.xml&#34;包括 context:property-placeholder ,所以它应该足够了。但是如果您没有使用它,或者想要使用@Configuration(Java配置)类(您可以在同一个应用程序中混合使用xml和Java配置),那么您需要一个PropertySourcesPlaceHolderConfigurer来解析@Value中的$ {},例如:
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
为了使用PropertySource中的属性解析定义或@Value注释中的$ {...}占位符,必须注册一个PropertySourcesPlaceholderConfigurer ...
请注意,文档说明在使用XML中的context-propertyholder时会自动发生这种情况 - 但是如上所述,从您的代码示例中可以看出您是否正在使用它。
答案 1 :(得分:0)
您可以尝试使用此代码段,然后使用 $ {key} 注入值:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/demo.properties</value>
</list>
</property>
</bean>
或者这个,并使用#{app.key} 来注入价值:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/context/spring-util-3.2.xsd" profile="dev">
...
<util:properties id="app" location="app.properties" />
...
</beans>
希望能帮到你。