【发布时间】:2020-07-23 11:16:39
【问题描述】:
尽管之前已经针对许多旧版本的 grails 提出过这个或类似的问题,但我想知道在现代 grails 4.0.3 的 grails 域类中从 application.yml 访问配置值的最佳方法是什么。
所以,假设我们有一个voucher.groovy 喜欢
class Voucher implements HibernateEntity<Voucher> {
...
Date reservedAt
static transients = ['validUntil']
Date getValidUntil() {
Integer expirationTime = // TODO: fill in the configuration value
DateTime expirationDateTime = new DateTime(this.reservedAt)
.plusDays(expirationTime)
.withHourOfDay(23)
.withMinuteOfHour(59)
.withSecondOfMinute(59)
.withMillisOfSecond(999)
return expirationDateTime.toDate()
}
}
还有一个名为voucher.expirationTime 的配置值在我们的application.yml 中
...
voucher.expirationTime: 10
...
如何在我的getValidUntil() 方法中访问配置值?
编辑
正如@JeffScottBrown 在他的评论中提到的,您不应该访问域类中的配置值。所以我最终得到了他建议的使用自定义 gsp 标签的方法。 (请看下面的答案)
【问题讨论】:
-
我留下评论而不是答案,因为这不能回答您提出的“如何访问域类中的配置值?”的问题。您不应访问域类中的配置值。出于多种原因,一个更好的主意是将需要配置的逻辑移动到服务中,并使用
@Value将配置值注入其中。 -
谢谢你,@JeffScottBrown!我的最终目标是在 gsp 中显示
validUntil日期。访问视图中的配置值还是通过服务获取Voucher并在此服务中添加额外的临时值是否有意义? -
“访问视图中的配置值还是通过服务获取凭证并在此服务中添加额外的临时值是否有意义?” - 我不会做这两个。我会将逻辑放在自定义 GSP 标记中,该标记非常易于编写,并且还可以使用
@Value将配置值注入其中。这样就可以将逻辑排除在您的 GSP 之外,这很好。 -
@JeffScottBrown 我不认为访问域类中的配置值通常是邪恶的。是的,通常它很少发生,但我可以想象在某些情况下配置对域的持久性有一些影响。另外,我不想打破活动记录模式并创建服务只是为了能够获取一些配置值......