起因:
需要在虚拟机上搭建一个演示环境寄给客户来试用,昨天好好的工程,今天突然无法启动了,提示hibernate.InvalidMappingException,连上网络百度下是什么问题,都说是配置文件的问题,决定重启下tomcat,结果又可以启动了,可是我什么都没改,怎么系统又突然好了,对比发现第一次启动的时候没有连接外网,第二次启动连上了外网,难道和着有关系;断掉外网再次启动,依然报错,启用外网工程就可以启动。这个有点奇怪,本地工程没有配置外网的jar包和文件,怎么会有这问题,暂时先不考虑它,既然是hibernate的配置问题那么就把最近改过的配置文件对比下,结果找到了一个hbm实体类映射文件的引入的dtd的头和其他文件不一致的:
有问题的文件头
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
正确的文件的头
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
在doctype一行中出现了换行导致的dtd文件受损,修改后断网启动工程,可以启动成功,这样一来可以解释为什么连上网就可以启动工程了,当dtd受损时tomcat会连接外网找到对应的dtd进行替换(猜测),所以出现了这么怪异的问题。