如何读取WEB-INF中的属性文件?

时间:2014-12-09 10:45:51

标签: java spring spring-java-config

我正在尝试读取我放在/ WEB-INF / config文件夹下的配置文件。原因是Jetty Maven插件does not support resource filtering。有人可以解释一下如何使用Spring Java配置功能吗?

我知道<context: property-placeholder ... />应该有效,但我不想使用XML。

申请dirs

├───META-INF
└───WEB-INF
    ├───classes
    ├───config
    ├───i18n
    ├───lib
    ├───pages
    └───resources

属性来源配置

@Configuration
@EnableWebMvc
@PropertySources({
    @PropertySource("log4j.properties"),
    @PropertySource("general.properties") }
)
public class ApplicationContext extends WebMvcConfigurerAdapter {

    @Autowired
    ServletContext servletContext;

    @Bean
    public PropertyPlaceholderConfigurer properties() {
        PropertyPlaceholderConfigurer propertySources = new PropertyPlaceholderConfigurer();
        Resource[] resources = new ServletContextResource[] {
                        new ServletContextResource(servletContext, "WEB-INF/config/log4j.properties"),
                        new ServletContextResource(servletContext, "WEB-INF/config/general.properties")
        };
        propertySources.setLocations(resources);
        propertySources.setIgnoreUnresolvablePlaceholders(true);
        return propertySources;
    }
}

异常:

java.lang.IllegalArgumentException: Cannot resolve ServletContextResource without ServletContext

2 个答案:

答案 0 :(得分:0)

正如@ M.Deinum所说,没有必要手动配置PropertyPlaceholderConfigurer:Spring Boot有PropertyPlaceholderAutoConfiguration来处理它。

您需要的一切都是@PropertySource

由于general.properties位于ServletContext,因此应该是这样的:

@PropertySource("/WEB-INF/config/general.properties")

注意,它不会对log4j.properties做同样的事情。考虑将其移至/WEB-INF/classes以允许log4j自动获取它。

答案 1 :(得分:-1)

使用以下带有@Autowired注释的代码行。

@Autowired
ServletContext servletContext;
String filePath = servletContext.getRealPath("/WEB-INF/XXXX/");
File file = new File(filePath );
FileInputStream fileInput = new FileInputStream(file);