gpt4 book ai didi

grails - 由于 JNDI 查找,无法在 Grails 集成测试中初始化服务

转载 作者:行者123 更新时间:2023-12-02 15:34:18 24 4
gpt4 key购买 nike

我有一个实现 InitializingBean 和 DisposableBean 的服务

class MyService implements InitializingBean, DisposableBean {

static transactional = false

def grailsApplication

@Override
void afterPropertiesSet() {
System.setProperty("JMS_TIMEOUT", grailsApplication.config.JMS_TIMEOUT);
// code performing a JDNI lookup
}
}
enter code here

系统属性用于初始化服务中的一些其他组件。我已经在 Config.groovy 中添加了配置。
grails.config.locations = [ "file:${basedir}/grails-app/conf/myconfig.properties" ]

这在运行应用程序时工作正常。但是,我正在测试/集成中编写一个注入(inject)服务的集成测试。
class MyServiceIntegrationTests  extends GrailsUnitTestCase {

def myService

void testMyService() {

}
}

运行测试时,我得到一个 StackTrace,其根本原因如下:
Caused by: javax.naming.NameNotFoundException: Name [ConnectionFactory] not bound; 0 bindings: []
at javax.naming.InitialContext.lookup(InitialContext.java:354)
at com.ubs.ecredit.common.jmsclient.DefaultConnector.<init>(DefaultConnector.java:36)

似乎无法加载配置或在集成测试中有所不同。知道如何更改配置或代码,以便在实例化服务之前也为我的集成测试设置这些属性吗?

更新:
事实证明,原因不是配置,而是 JDNI 查找和 Grails 中的错误。
见: http://jira.grails.org/browse/GRAILS-5726

最佳答案

${basedir}在不同的环境中获得不同的路径。作为替代方案,您可以使用 PropertiesLoaderUtils.loadProperties加载您的自定义配置:

import org.springframework.core.io.support.PropertiesLoaderUtils
import org.springframework.core.io.ClassPathResource
....
void afterPropertiesSet() {
def configProperties = PropertiesLoaderUtils.loadProperties(
new ClassPathResource("myconfig.properties"))
System.setProperty("JMS_TIMEOUT", configProperties.getProperty("JMS_TIMEOUT"))
....
}

关于grails - 由于 JNDI 查找,无法在 Grails 集成测试中初始化服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14243146/

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