gpt4 book ai didi

spring - 如何在 Groovy 中使用 Spring DSL 基于环境(dev、qa、prod)注入(inject)依赖?

转载 作者:行者123 更新时间:2023-12-02 14:46:37 25 4
gpt4 key购买 nike

我们在 Grails/Groovy 中构建了一个 Web 应用程序。在 groovy 中,我们构建了一个可插入的缓存组件,以在 Grails 应用程序中提供大型 http 响应流的缓存。我们希望在运行时基于环境注入(inject)缓存实现,例如,当开发人员在做一些本地工作时,注入(inject)一个简单的基于 Map 的缓存,但在操作环境中,注入(inject)一个 RDBMS 缓存数据库,你明白了。

我们在使用 SWITCH 的 Grails 教程中找到了这个引用,它似乎可以工作,但它又丑又麻烦。我们有超过 5 种不同的环境(local、dev、test、uat 和 prod),我们需要在代码的其他地方注入(inject)特定于环境的类,所以这种方法绝对不理想。有没有其他选择?示例将不胜感激,谢谢!

//from resources.groovy
beans = {
switch(Environment.current) {

case Environment.PRODUCTION:
cacheBean(com.util.OracleCacheImpl) {
//properties here
}
break

case Environment.LOCAL:
cacheBean(com.util.MockMapCache) {
//properties
}
break
}
}

最佳答案

您可以尝试在 Config.groovy 中设置您的 bean 定义。 ,使用其内置的environments {}通过 application 处理和分配定义属性(property)。

所以在 resources.groovy :

beans = {
// Create a clone of the properties definition Closure
def cacheProps = application.config.cache.bean.props.clone()
cacheProps.delegate = this
cacheBean(application.config.cache.bean.class, cacheProps)
}

Config.groovy :
environments {
production {
cache.bean.class = com.util.OracleCacheImpl
cache.bean.props = {
//properties as in resources.groovy
}
}
'local' {
cache.bean.class = com.util.MockMapCache
cache.bean.props = {
//properties as in resources.groovy
}
}
'uat' {
//etc...
}
//etc...
}

再想一想,您可能可以将整个 bean 定义放在 Config.groovy 中。 Closure并在 resources.groovy 中调用它
resources.groovy
beans = {
// Create a clone of the properties definition Closure
def cacheBeans = application.config.cache.beans.clone()
cacheBeans.delegate = this
cacheBeans()
}
Config.groovy
environments {
production {
cache.beans = {
cacheBean(com.util.OracleCacheImpl) {
//properties here
}
}
}
'local' {
cache.beans = {
cacheBean(com.util.MockMapCache) {
//properties here
}
}
}
'uat' {
//etc...
}
//etc...
}

关于spring - 如何在 Groovy 中使用 Spring DSL 基于环境(dev、qa、prod)注入(inject)依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8421432/

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