gpt4 book ai didi

java - 从 Java 类访问 Config.groovy

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:02:57 25 4
gpt4 key购买 nike

当我的 Grails 应用程序启动时,我还会在后台启动 Spring Integration 和 Batch 进程。我想将一些数据库连接属性存储在 Config.groovy 文件中,但如何从集成/批处理过程中使用的 Java 类访问它们?

我找到了这个主题:

Converting Java -> Grails ... How do I load these properties?

建议使用:

private Map config = ConfigurationHolder.getFlatConfig();

后面是类似的东西:

String driver = (String) config.get("jdbc.driver");

这实际上工作正常(属性从 Config.groovy 正确加载)但问题是 ConfigurationHolder 在被弃用之后。我发现处理该问题的任何线程似乎都是 Grails 特定的,并建议使用依赖注入(inject),就像在这个线程中一样:

How to access Grails configuration in Grails 2.0?

那么是否有一种未被弃用的方法来从 Java 类文件访问 Config.groovy 属性?

最佳答案

刚刚检查了我现有的一些代码,我使用了 this method described by Burt Beckwith

创建一个新文件:src/groovy/ctx/ApplicationContextHolder.groovy

package ctx

import org.springframework.context.ApplicationContext
import org.springframework.context.ApplicationContextAware
import javax.servlet.ServletContext

import org.codehaus.groovy.grails.commons.GrailsApplication
import org.codehaus.groovy.grails.plugins.GrailsPluginManager
import org.springframework.context.ApplicationContext
import org.springframework.context.ApplicationContextAware

@Singleton
class ApplicationContextHolder implements ApplicationContextAware {
private ApplicationContext ctx

private static final Map<String, Object> TEST_BEANS = [:]

void setApplicationContext(ApplicationContext applicationContext) {
ctx = applicationContext
}

static ApplicationContext getApplicationContext() {
getInstance().ctx
}

static Object getBean(String name) {
TEST_BEANS[name] ?: getApplicationContext().getBean(name)
}

static GrailsApplication getGrailsApplication() {
getBean('grailsApplication')
}

static ConfigObject getConfig() {
getGrailsApplication().config
}

static ServletContext getServletContext() {
getBean('servletContext')
}

static GrailsPluginManager getPluginManager() {
getBean('pluginManager')
}

// For testing
static void registerTestBean(String name, bean) {
TEST_BEANS[name] = bean
}

// For testing
static void unregisterTestBeans() {
TEST_BEANS.clear()
}
}

然后,编辑 grails-app/config/spring/resources.groovy 以包括:

  applicationContextHolder(ctx.ApplicationContextHolder) { bean ->
bean.factoryMethod = 'getInstance'
}

然后,在 src/javasrc/groovy 中的文件中,您可以调用:

GrailsApplication app = ApplicationContextHolder.getGrailsApplication() ;
ConfigObject config = app.getConfig() ;

关于java - 从 Java 类访问 Config.groovy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13157951/

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