非控制器或taglib类的外部配置

时间:2012-06-11 22:03:08

标签: java grails groovy

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

我已经做了大约3个小时的谷歌搜索,似乎有人提出的唯一的事情,因为这些类已被弃用只是使用DI。但是,我需要这个配置在某种程度上是WAR文件的外部,所以我不知道这是否会对我有所帮助,除非我遗漏了什么?

由于

2 个答案:

答案 0 :(得分: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?

btw:是的,不推荐使用configurationHolder,但它仍然有效: - )

答案 1 :(得分:0)

根据我从js3v得到的回复,我建议查看Settings plugin。它为您提供了一种非常好的方式来输入这些类型的项目和一个基本的CRUD界面来管理它们。您可以使用String,Integer,Date和BigDecimal类型。您可以创建名称以对其进行细分(例如admin.email.defaultGreetingbanking.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!")