【问题标题】:How to load app-wide settings at startup (for Spring3 webapp)?如何在启动时加载应用程序范围的设置(对于 Spring3 webapp)?
【发布时间】:2012-06-26 21:21:24
【问题描述】:

我正处于使用 Hibernate 编写 Spring3 MVC webapp 的基本阶段。我希望所有数据模型类都能够访问基本配置值,例如数据库表前缀名称等。我想要这个选项,所以我(或其他开发人员)可以通过在 .properties 中修改它们来即时更改它们文件。

我最好的选择是在 util 包中创建一个 Config 类,该类具有一个从 .properties 文件加载一堆属性的静态块?我想这个类本身可能是静态的,有各种获取器来访问其中的值。

如果我选择上述方法,如果由于某种原因我指定的 .properties 文件无法加载,我怎么能确保应用程序没有加载(轻微失败)?有例外吗?

如果我的方式很糟糕,还有什么更好的方案?

谢谢!

【问题讨论】:

    标签: java web-applications spring-mvc spring-3


    【解决方案1】:

    恕我直言,这是一个很好的方法。如果你要为这个类显式声明一个 bean,比如

    <bean id="myConfig" class="com.yourcompany.yourproject.Config"/>

    如果无法实例化 bean,spring 将在启动时失败。因此,如果属性文件不可读/不可用,只需从 Configs 构造函数中抛出未经检查的异常。

    如果 - 出于某种原因 - 您全局启用了延迟加载,则必须为此 bean 显式禁用它,否则您将无法获得故障快速解决方案

    <bean id="myConfig" class="com.yourcompany.yourproject.Config" lazy-init="false"/>

    编辑: 这个场景的另一个不错的特性是,您可以告诉 maven 来“过滤”资源(.properties 文件),并且您可以获得所有 maven 变量。这就是我的道具文件的外观(我将此信息用于“关于”对话框。有人打开过关于对话框的顺便说一句吗?)

    project.version=${project.version}
    project.name=${project.name}
    project.organization.name=${project.organization.name}
    project.url=${project.url}
    project.description=${project.description}
    

    【讨论】:

    • 这很好。在配置初始化程序中抛出异常后,spring会自动关闭,还是我必须捕获异常并执行system.exit?很抱歉造成混乱 - 我还没有完全使用 Spring,我还在 ORM 层上。
    • 由spring处理。如果是应用服务器,则应用部署将失败,如果是独立应用,则会退出。
    • app-server...是的,听起来很有趣..有什么好的读物吗?
    • 只是在谷歌上搜索 JBoss、Glassfish、IBM WebSphere 等。我主要使用 Glassfish,部分原因是它是免费的,部分原因是主观口味。 YMMV
    • 异常最终在哪里捕获?在“catch”块中我该怎么做才能退出? Spring 如何知道不加载 bean,因此不加载应用程序?我打算使用 Tomcat 6 或 7。谢谢
    猜你喜欢
    • 2017-08-19
    • 1970-01-01
    • 2020-02-13
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    相关资源
    最近更新 更多