2

我正在尝试为非控制器或 taglib 类创建外部配置,因为这些值需要在不重新编译的情况下更改。现在 ConfigurationHolder 和 ApplicationHolder 已被弃用,对此我有什么选择?

我已经完成了大约 3 个小时的谷歌搜索,似乎自从这些课程被弃用以来,有人想出的唯一一件事就是使用 DI。但是,我需要此配置以某种方式位于 WAR 文件的外部,所以我不知道这是否对我有帮助,除非我遗漏了什么?

谢谢

4

2 回答 2

1

看看你的默认配置文件的第一行......

如果您取消注释此代码,您将获得一个在应用程序启动时读取的外部配置。

因此,如果配置发生更改,您不必重新编译而是重新启动应用程序。由于许多管理员在夜间自动重启应用程序服务器,这应该不是什么大问题,不是吗?

// locations to search for config files that get merged into the main config
// config files can either be Java properties files or ConfigSlurper scripts

// grails.config.locations = [ "classpath:${appName}-config.properties",
//                             "classpath:${appName}-config.groovy",
//                             "file:${userHome}/.grails/${appName}-config.properties",
//                             "file:${userHome}/.grails/${appName}-config.groovy"]

// if(System.properties["${appName}.config.location"]) {
//    grails.config.locations << "file:" + System.properties["${appName}.config.location"]
// }

为了从 /src/groovy 中访问配置,请查看以下问题:How to access Grails configuration in Grails 2.0?

顺便说一句:是的,configurationHolder 已被弃用,但它仍然有效:-)

于 2012-06-12T07:13:28.027 回答
0

根据我从 js3v 得到的回复,我建议查看Settings plugin。它为您提供了一种非常好的方式来输入这些类型的项目和一个基本的 CRUD 界面来管理它们。您可以有 String、Integer、Date 和 BigDecimal 类型。您可以创建名称来对它们进行分段(例如admin.email.defaultGreeting,或banking.defaultInterestRate)并在 gsp 或控制器/服务/域类中访问它们,如下所示:

//gsp
<g:setting valueFor="admin.email.defaultGreeting" default="Hello!" encodeAs="HTML"/>

//Other
import org.grails.plugins.settings.*
Setting.valueFor("admin.email.defaultGreeting", "Hello!")
于 2012-06-12T18:54:09.120 回答