在Spring 3.1中使用新的@PropertySource
注释,如何使用Environment访问多个属性文件?
目前我有:
@Controller
@Configuration
@PropertySource(
name = "props",
value = { "classpath:File1.properties", "classpath:File2.properties" })
public class TestDetailsController {
@Autowired
private Environment env;
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
String file1Name = env.getProperty("file1.name","file1.name not found");
String file2Name = env.getProperty("file2.name","file2.name not found");
System.out.println("file 1: " + file1Name);
System.out.println("file 2: " + file2Name);
return "home";
}
结果是来自 File1.properties 的正确文件名,但未找到 file2.name 。如何访问 File2.properties ?
答案 0 :(得分:46)
如果您可以迁移到 Spring 4.x ,则问题已通过新的@PropertySources注释解决:
@PropertySources({
@PropertySource("/file1.properties"),
@PropertySource("/file2.properties")
})
答案 1 :(得分:5)
有两种不同的方法: 第一个是在applicationContext.xml中使用PropertyPlaceHolder: beans-factory-placeholderconfigurer
<context:property-placeholder location="classpath*:META-INF/spring/properties/*.properties"/>
要添加的名称空间为xmlns:context="http://www.springframework.org/schema/context"
如果要直接访问控制器中String变量的键,请使用:
@Value("${some.key}")
private String valueOfThatKey;
第二种方法是在applicationContext.xml中使用util:properties
:
<util:properties id="fileA" location="classpath:META-INF/properties/a.properties"/>
<util:properties id="fileB" location="classpath:META-INF/properties/b.properties"/>
使用namesapce xmlns:util="http://www.springframework.org/schema/util"
schemaLocations:http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
然后在你的控制器中:
@Resource(name="fileA")
private Properties propertyA;
@Resource(name="fileB")
private Properties propertyB;
如果您想要文件中的值,请使用方法getProperty(String key)
答案 2 :(得分:4)
可以在Spring中访问多个Properties
,
@PropertySource的示例,
@PropertySource({
"classpath:hibernateCustom.properties",
"classpath:hikari.properties"
})
@PropertySources的例子,
@PropertySources({
@PropertySource("classpath:hibernateCustom.properties"),
@PropertySource("classpath:hikari.properties")
})
指定properties
路径后,您可以像往常一样通过Environment
实例访问它们
我正在编译error
,因为我使用属性值来配置我的应用上下文。我尝试了通过网络找到的所有内容,但它们对我不起作用!
在我配置Spring上下文之前,
applicationContext.setServletContext(servletContext);
applicationContext.refresh();
实施例
public class SpringWebAppInitializer implements WebApplicationInitializer{
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
// Create the 'root' Spring application context
AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
// register config class i.e. where i used @PropertySource
applicationContext.register(AppContextConfig.class);
// below 2 are added to make @PropertySources/ multi properties file to work
applicationContext.setServletContext(servletContext);
applicationContext.refresh();
// other config
}
}
有关您的信息,我使用的是 Spring 4.3