首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bitronix + Spring测试+不同的弹簧配置文件

Bitronix + Spring测试+不同的弹簧配置文件
EN

Stack Overflow用户
提问于 2015-02-27 13:26:06
回答 1查看 508关注 0票数 0

我有几个测试,它们都扩展了定义Spring测试应用程序上下文的相同根测试。我的一个测试使用了不同的配置文件,因此我用@ActiveProfiles("specialTestProfile")注释了子类,这个配置文件创建了一个特殊的模拟bean,它被注入到上下文中。我想在执行这个测试之前和之后清除我的上下文,但是我没有找到正确的方法。我知道Spring测试框架做了一些上下文缓存,在我的例子中,我应该有两个不同的上下文,不应该需要重新加载上下文,但是它不能工作,因为如果我不清理上下文,就会产生这个奇怪的错误:

代码语言:javascript
复制
    Caused by: bitronix.tm.resource.ResourceConfigurationException: cannot create JDBC datasource named unittestdb
    at bitronix.tm.resource.jdbc.PoolingDataSource.init(PoolingDataSource.java:57)
    at sun.reflect.GeneratedMethodAccessor404.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1608)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1549)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479)
    ... 62 more
Caused by: java.lang.IllegalArgumentException: resource with uniqueName 'unittestdb' has already been registered
    at bitronix.tm.resource.ResourceRegistrar.register(ResourceRegistrar.java:55)
    at bitronix.tm.resource.jdbc.PoolingDataSource.buildXAPool(PoolingDataSource.java:68)
at bitronix.tm.resource.jdbc.PoolingDataSource.init(PoolingDataSource.java:53)
... 68 more

即使我重新加载了每个测试类的上下文(通过用@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)注释我的父类,我仍然会在某个时候得到上面的错误)。你知道如何解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-28 02:43:11

如果没有看到PoolingDataSource的确切配置,我就无法确切地知道如何解决您的问题。

但是,似乎可以通过调用PoolingDataSource方法(如果使用Java在@Bean方法中)或通过设置uniqueName属性(如果使用XML )来创建具有唯一名称的uniqueName,从而解决这个问题。如何生成唯一的名称取决于所使用的配置样式。

如果您没有为创建ApplicationContext bean的每个PoolingDataSource设置一个唯一的名称,那么您将继续看到异常,它告诉您不能使用"unittestdb“名称创建第二个池,因为它已经存在。原因是PoolingDataSource中的PoolingDataSource方法委托给ManagementRegistrar.register(),它以唯一的名称注册了一个MBean,相同的MBeanServer用于同一个JVM进程中的所有测试(即用于您套件中的所有测试)。

另一个选项可能不是为每个应用程序上下文生成唯一的池名,而是通过将bitronix.tm.disableJmx属性设置为false来禁用JMX的使用。有关详细信息,请参阅isDisableJmx()bitronix.tm.Configuration中的setDisableJmx()方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28766220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档