属性文件是使用它们的最佳方式

时间:2015-04-21 08:17:30

标签: java spring spring-mvc properties

我正在努力处理属性文件。在我的应用程序中,我使用两种属性文件:在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 /中可能会让人困惑

关于我的问题:

  1. 统一这两种方式是否有任何意义,我的意思是他们俩 有它们的含义,或者只是更好地使用弹簧 我已经在使用它了吗?
  2. 在Spring中,我还发现了两种初始化属性的方法,一种 使用@Value注释,然后使用@Autowiring bean。如果我是 纠正他们应该做同样的功能,这是更新的 和旧款式或这两者之间是否存在真正的差异?
  3. 最后一个问题:我搜索的是保存属性文件的不同方法。最常见的是/ resources,/ WEB-INF和/ classes / config /。它也可以随着时间的推移而区分,或者只是程序员对他更喜欢的东西?我没有找到直接答案。
  4. 很抱歉,如果这个问题看似虚假,但是通过搜索不同的答案,我对正确的方法感到困惑。

    感谢。

2 个答案:

答案 0 :(得分:2)

  1. 是的,请统一这一点 - 没有理由编写自己的代码来访问属性文件,因为Spring通过@Value或表达式将值直接注入到需要它们的类中来提供此功能,例如应用程序上下文XML中的${home}
  2. 使用@Value从属性文件中注入值。 @Autowired用于注入bean而不是默认值 - 它不是环境感知的,你不能传递一个表达式。
  3. 将您的媒体资源文件放在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从属性文件中注入值。