psvm内的JOOQ的代码相同,但junit测试内的代码不起作用。
public static void main(String[] args) {
InsertSetMoreStep<Record> query = DSL.using(SQLDialect.MYSQL)
.insertInto(table("TABLE_NAME"))
.set(field("FIELD"), "field");
System.out.println("query : " + query.getSQL());
}
@Test
public void tt() {
InsertSetMoreStep<Record> query = DSL.using(SQLDialect.MYSQL)
.insertInto(table("TABLE_NAME"))
.set(field("FIELD"), "field");
System.out.println("query : " + query.getSQL());
}
运行测试会产生堆栈溢出异常:
LClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
是什么原因以及如何修复测试?
最佳答案
这实际上可能是真正的stackoverflow。在这种情况下,可以通过使用以下参数增加堆栈大小来修复此问题:
-Xss4m
尝试解释一下:据我了解,JOOQ从数据库结构生成Java类。如果JOOQ创建了许多嵌套类,这对于某些数据库设计而言是非常可能的,则类加载器将递归地加载这些内部类,这可能会因为资源密集而最终导致堆栈溢出。
我不太了解JOOQ,也无法复制它,但是很高兴看到真正的stackoverflow :-)