您的位置:首页 > 编程语言 > Java开发

记录一次项目引用导致的StackOverflowError

2017-05-27 15:39 1226 查看
概述下情况maven eclipse开发,jdk1.7

一个项目分成3个模块,独立打包

xxx下面是3个子项目xx.dao,xx.service,xx.proxy

调用关系是Proxy->service->dao

其中dao和Service打包和单元测试均正常,开发到Proxy进行单元测试的时候爆出如下异常

五月 27, 2017 3:25:25 下午 org.springframework.test.context.TestContextManager retrieveTestExecutionListeners
信息: @TestExecutionListeners is not present for class [class xx.xxProxyTest]: using defaults.


看了下junit的异常更加诡异

java.lang.StackOverflowError
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:988)
at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:39)
at org.apache.log4j.LogManager.getLogger(LogManager.java:45)
at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
at org.apache.log4j.Category.<init>(Category.java:57)
at org.apache.log4j.Logger.<init>(Logger.java:37)
at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:43)
at org.apache.log4j.LogManager.getLogger(LogManager.java:45)
at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
at org.apache.log4j.Category.<init>(Category.java:57)


我甚至调了eclipse的配置文件,发现无效,又试下其他一些无效的方法,最终通过将dao和Service引入proxy才成功跑通了测试用例,记录下来,避免再犯。

补上单元测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/test/resources/config/spring-placeholder.xml" })
public class xxxProxyTest  {
@Resource
xxxxServiceProxy xxxxServiceProxy;

@Test
public void testSelectCustaccount() {
List list = xxxxServiceProxy.selectCustaccount(1);
System.out.println("1111111111" + JSON.toJSONString(list));
}

}


注意,spring-placeholder.xml配置的是自动扫描,所以xxxxServiceProxyImpl还是需要加上@Resource注解的,不然还是这个报错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息