先说下背景:我新入职公司不到两个月,我们的项目采用的tomcat配置文件链接项目webapp,同时由tomcat管理数据源(即在tomcat目录下conf\Catalina\localhost中配置项目路径兼数据源),eg:
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="E:\Workspaces\MyEclipse 9\sinopeccoalv1\webapp" reloadable="false" path="\domain" privileged="true" antiResourceLocking="false" antiJARLocking="false">
<Resource name="StandardWorkDataSource" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@192.168.1.109:1521:orcl"
username="xxxx" password="xxxx"
type="javax.sql.DataSource"
maxActive="400"
maxIdle="200"
maxWait="5000"/>
</Context>
刚来的时候是同事给配置的这个,当初懵懵懂懂的,慢慢知道了这跟直接放到webapp的效果是一样的。
就这样开发了一个多月,一直没什么异常,今天突然发现同一个项目版本的一个页面,放在我的机子上运行报错,copy到同时的机子上运行,完全没问题。
导致报错的原因是:在我的机子上hibernate查不到类型为clob字段的属性值(没有抛出任何异常,debug时查看对象的属性值总为null),copy到同事的机子上部署后就能查出来了。
所以,主要问题就顺理成章的变成了:为什么同一个项目放在不同的机器上部署后,有的机器上的项目能查询出clob字段,有的就查不出来?
经过我一天的排查,原因终于找到了:是因为我的数据源是有tomcat管理的,而我没有吧oracle的jar包(oracle14.jar)放到tomcat目录下的lib中,这样就导致一些oracle比较特殊的字段类型查不出来数据值,但是从不抛出任何异常(这个比较纠结)。
解决方案:将oracle14.jar放到tomcat目录下的lib目录中。(由于在网上没有找到任何前车之鉴,所以这是我纠结一天的成果,拿出来分享一下。)