今天遇到一个很傻的问题,在Spring Boot工程启动之后,中途就中断了,然后打印了如下日志:
...
2017-11-14 08:46:34.293 INFO 1902 --- [ main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000230: Schema export complete
2017-11-14 08:46:34.295 INFO 1902 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariCP pool HikariPool-0 is shutting down.
2017-11-14 08:46:34.305 INFO 1902 --- [ main] o.s.c.ehcache.EhCacheManagerFactoryBean : Shutting down EhCache CacheManager
然后我就用debug启动工程,在Spring 的org.springframework.util.ReflectionUtils中断点:
public static void rethrowRuntimeException(Throwable ex) {
if (ex instanceof RuntimeException) {
throw (RuntimeException) ex;
}
if (ex instanceof Error) {
throw (Error) ex;
}
throw new UndeclaredThrowableException(ex);
}
到这里并不知道怎么回事了,然后只能看日志,既然是在hibernate中报错,那肯定和数据库有关系,Spring Boot启动时自动识别配置文件中的schema.sql和data.sql文件来创建表格和初始化数据,难免有不正确的地方,恰好我之前才改过data.sql文件。
果然,在我插入数据的SQL中就出现了问题:
INSERT INTO VBAP3_MAP_MAPPING_PLAN (ID ,DISPLAY_NAME ,MEMO ,ORD ,TENANT ,VERSION )
VALUES(3, '方案3', 'AREA', 3, '1', 0);
INSERT INTO VBAP3_MAP_MAPPING_PLAN (ID ,DISPLAY_NAME ,MEMO ,ORD ,TENANT ,VERSION )
VALUES(3, '方案4', 'CHINA', 4, '1', 0);
这里出现了ID的冲突,所以启动异常了,但是SQL运行出错,应该会在日志中显示出来,这里为什么没有显示,我也不太知道了。