如何使用PropertyPlaceholderConfigurer和xml读取属性文件,以及如何使用@Value访问属性?

时间:2019-05-21 17:24:32

标签: java spring-boot spring-mvc spring-annotations

我必须从属性文件中读取url,因此不必每次更改url时都输入代码。我正在使用spring-maven项目。 我在application-context.xml文件中使用<context:property-placeholder location="classpath:apiUrls.properties"/>。 当我尝试使用@Value("${my.property}")访问java类中的属性时 private String url; 我从字面上得到的是“ $ {my.property}”,而不是属性的值。

以下是链接:How to read values from properties file?

我正在使用PropertyPlaceholderConfigurer的第一种方法使用xml进行尝试。

在web.xml文件中:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:applicationContext.xml
        </param-value>
    </context-param>

在applicationContext.xml文件中:

    <context:component-scan base-package="com.api"></context:component-scan>

    <context:property-placeholder location="classpath:apiUrls.properties"/>

在属性文件(apiUrls.properties文件)中: category.getAll=http://google.com/getSomeData

在Java类中:

@service
public class DemoCMSCategoryServiceImpl implements DemoCMSCategoryService {

    @Autowired
    RestTemplate restTemplate;

    @Value("${category.getAll}")
    private String url;
    .........
    .........
//In a function
String uri = this.url; //uri is ${my.property} not the value

这应该可行,我在其他项目中也做到了。我也尝试使用@PropertySource(然后在xml中什么也不做),并且它起作用了,所以问题似乎出在xml部分。某种程度上,属性没有被添加到上下文中。如果它可以正常工作,则uri应该是http://google.com/getSomeData-来自属性文件。 项目的目录结构为:Directory Structure

0 个答案:

没有答案