我正在尝试读取我放在/ 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
答案 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);