【问题标题】:Properties files best way of using them属性文件的最佳使用方式
【发布时间】:2015-04-21 08:17:30
【问题描述】:

我正在为属性文件苦苦挣扎。在我的应用程序中,我使用两种属性文件方式:在 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 连接等,我使用带有 context:property-placeholder 的 Spring xml 文件。

我想让这两种方式只有一种——属性文件的位置也不同,从上面我把它们放在 /WEB-INF/classes/ 和 Spring 只放在 /WEB-INF/ 这可能会让人困惑.

关于我的问题:

  1. 统一这两种方式有什么意义吗,我的意思是它们都是 有它们的含义,还是两者都使用spring更好 他们我已经在使用它了吗?
  2. 在 Spring 中我还找到了两种初始化属性的方法,一种 使用@Value 注释,其次使用@Autowireing bean。如果我是 正确他们都应该做同样的功能,只是更新 和较旧的风格,还是这两者之间有真正的区别?
  3. 最后一个问题:我搜索的是保存属性文件的不同方法。最常见的是 /resources、/WEB-INF 和 /classes/config/。它也随着时间的推移而有所不同,还是仅仅取决于程序员他更喜欢什么?我没有找到直接的答案。

对不起,如果这个问题看起来很愚蠢,但是通过搜索不同的答案,我对正确的方法感到困惑。

谢谢。

【问题讨论】:

    标签: java spring spring-mvc properties


    【解决方案1】:
    1. 是的,请统一这一点 - 没有理由编写您自己的代码来访问属性文件,因为 Spring 通过将值直接注入到使用 @Value 或表达式(例如${home} 在您的应用程序上下文 XML 中。
    2. 使用@Value 从属性文件注入值。 @Autowired 用于注入 bean 而不是默认值 - 它不具备环境感知能力,您不能将表达式传递给它。
    3. 将您的属性文件放入src/main/resources。这是Maven 标准 - Maven 会将它们部署到 WEB-INF/类,因此它们可以在您的类路径中使用,并且可以通过 Spring 应用程序轻松访问。

    【讨论】:

    • 谢谢。我移动了资源下的所有属性文件,这样才有意义。而且@Value 似乎运行良好且轻松。
    【解决方案2】:

    1)再次阅读您的问题,认为我现在更好地理解了您的问题。您应该有单独的 Web/Database/Security/.. 配置文件,但您可以保留一个应用程序属性文件。

    我认为您将可能包含您的策略、并发模型、线程数等的应用程序属性文件与用于设置 ORM、Servlet 映射等的配置文件混淆了。

    2) @Autowired 用于 Bean 的依赖注入,不能用于解析属性文件中的值。它是@Value 的特化。

    3) 我首选的保存应用程序属性文件的方法是允许通过环境变量/ tomcat 参数配置位置。

    您可以执行以下操作:

    @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 从属性文件中注入值。

    【讨论】:

    • 感谢您的回复。这是通用的好方法。可能不需要在这个应用程序中使用它,但很高兴知道。关于豆子——我实际上让它工作了,所以它可以做到,但可能不是最好的方法。
    猜你喜欢
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 2012-04-06
    • 2012-04-16
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    相关资源
    最近更新 更多