我正在努力处理属性文件。在我的应用程序中,我使用两种属性文件:在spring和我的应用程序中直接使用。
在应用程序中,我使用一种方法来获取属性:
private String getHome() {
String name = null;
try {
Properties prop = new Properties();
String propFname = "path.properties";
InputStream is = getClass().getClassLoader().getResourceAsStream(propFname);
if (is == null) {
throw new FileNotFoundException("path.properties File Not found");
}
prop.load(is);
name = prop.getProperty("HOME");
} catch (FileNotFoundException e) {
log.error(e);
System.exit(1);
} catch (IOException e) {
log.error(e);
System.exit(1);
}
return name;
}
然后在我的班上我使用:
private static String home = new MailService().getHome();
但对于JDBC连接等,我使用Spring xml文件和context:property-placeholder。
我想让这两种方式只有一种 - 属性文件的位置也不同,从上面我将它们放在/ WEB-INF / classes /中,而来自Spring只在/ WEB-INF /中可能会让人困惑
关于我的问题:
很抱歉,如果这个问题看似虚假,但是通过搜索不同的答案,我对正确的方法感到困惑。
感谢。
答案 0 :(得分:2)
@Value
或表达式将值直接注入到需要它们的类中来提供此功能,例如应用程序上下文XML中的${home}
。@Value
从属性文件中注入值。 @Autowired
用于注入bean而不是默认值 - 它不是环境感知的,你不能传递一个表达式。src/main/resources
中。这是Maven标准 - Maven会将它们部署到WEB-INF / classes,因此它们可以在您的类路径中使用,并且可以通过Spring应用程序轻松访问。答案 1 :(得分:1)
1)再次阅读你的问题,认为我现在更好地理解你的问题。您应该有Web / Database / Security / ..的单独配置文件,但您可以保留一个应用程序属性文件。
我认为您混淆了可能包含策略,并发模型,线程编号等的应用程序属性文件,以及用于设置ORM,Servlet映射等的配置文件。
2)@Autowired用于Beans的依赖注入,不能用于解析属性文件中的值。它是@Value的专业化。
3)我保存应用程序属性文件的首选方法是允许通过environement变量/ tomcat arugment配置位置。
您可以执行以下操作:
@Configuration
@PropertySource(value = "file:${OTT_PROPS}")
@Profile("production")
public class ProductionConfiguration {
// this must be static else spring does some odd stuff
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
然后提供属性文件的位置为tomcat参数:
•-DOTT_PROPS =" path_to_properties_file“
并使用@Value从属性文件中注入值。