gpt4 book ai didi

caching - 在域类之外更改域类缓存设置

转载 作者:行者123 更新时间:2023-12-02 14:53:20 24 4
gpt4 key购买 nike

我有一个带有一堆域类的插件。该插件被多个应用程序使用。

我的问题是,我无法在域类本身中指定mapping-> cache设置(因为根据使用它们的应用程序,它们需要具有不同的值)。例如,在应用程序A中,我想将域类X只读缓存,而将域类Y不缓存。在应用程序B中,我想缓存域类X事务性,并且缓存域类Y只读。

我想要的(我希望它已经可用)是这样的:

grails.gorm.default.mapping { cache true } 

但是,我可以将其应用于一个特定的域类,而不必是全局的,例如:
grails.gorm.com.integralblue.domain.User.mapping { cache true } 

有人建议让每个域类检查grails配置,例如:
static mapping = {
cache: Holders.grailsApplication.config.com.package.Person.cache ?: false
}

和配置:
com.package.Person.cache = true

但我想避免这种情况

谢谢!

最佳答案

您提到的方法应在理想情况下使用。
我同意必须在插件和应用程序中进行更改。

理想情况下,插件中的域类应提供宽松的映射,可以将其覆盖。

如果您在插件或grails.gorm.default.mapping { cache true }中使用过cache: true或在域类中使用过映射,则可以根据需要在应用程序中轻松覆盖它。例如:

//Domain class in Plugin
class Person{
static mapping = {
cache: 'read-only'
}
}

由于映射只不过是常规对象中的静态块,因此可以在运行时像相关应用程序中的metaClassed一样轻松地进行映射
//Application A:
Person.metaClass.'static'.mapping = {
cache 'transactional'
}

//Application B:
Person.metaClass.'static'.mapping = {
cache 'read-write'
}

(未经测试)
如果要对所有域类共同执行相同的操作,则可以按以下方式使用域类 Artifact
//Application A BootStrap
grailsApplication.domainClasses.each{
it.clazz.metaClass.'static'.mapping = {cache 'transactional'}
}

有选择地:
//Application A BootStrap
def personClazz =
grailsApplication.domainClasses.find{it.clazz.simpleName == 'Person'}.clazz
personClazz .metaClass.'static'.mapping = {cache 'transactional'}

*无论哪种情况,您都必须使用插件在“应用程序”中进行一些修改。

关于caching - 在域类之外更改域类缓存设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17452865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com