项目场景:
java web项目部署在weblogic上,weblgoic共有两个服务,AdminServer和部署程序的server0。
问题描述
某次,根据需求对一个mapper.xml文件做了一些改动,重新发布程序之后发现改动并没有生效,查看日志发现还是执行的之前的老sql,但是加在程序里的代码都生效了。
原因分析:
排查原因:
1、程序正常启动,未发生异常。
2、其它功能都正常,未发生异常。
3、查看weblogic日志,未发现任何异常。
4、上网查看博客,初步怀疑是weblogic缓存导致。
解决方案:
怀疑是缓存导致,那么删除缓存试一试。
1、停掉weblogic
2、找到部署程序的server0文件夹,删除该目录下的/tmp文件夹和/cache文件夹。
3、重启weblogic
重启之后发现执行的还是老sql,配置并没有生效!非常奇怪,为了继续排查原因,我决定远程调试一下,看看究竟是为什么。
远程调试需要给server配置一下参数,下面说一下怎么远程调试。(不想看可以跳过此步骤)
4、打开weblogic控制台,找到server0配置页面,点击锁定编辑,加入以下参数然后点击保存并释放配置。
//参数
-Dlog4jLevel=debug -Djava.awt.headless=true -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=7703,server=y,suspend=n
5、配置idea远程调试,马赛克部分为服务器ip,jvm中加入以下参数:
//jvm参数
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7703
6、经过远程调试发现,xml文件加载的是这个文件: [/xxx/xxxp/oracle/fmw/12.1.3/user_projects/domains/base_domain/servers/AdminServer/tmp/.appmergegen_1689918509997_xxx.war/WEB-INF/classes/com/xxx/xxx/dao/xxxDao.xml]
注意:程序是部署在server0上的,程序运行时加载的文件居然是AdminServer/tmp目录下的文件
7、所以仅仅删除/server0的/tmp和/cache文件夹是不够的,还需要删除/AdminServer目录下的/tmp文件夹和/cache文件夹
8、删除之后重启weblogic,发现新的改动已生效。
总结:
weblogic很容易出现缓存问题,程序如果出现异常或者各种摸不着头脑的问题时,记得查看weblogic日志,看看有没有类似/.tmp文件夹里的内容找不到或者加载不了的问题,如果有这类异常信息,大部分原因就是缓存导致的,可以试试删除adminserver和部署程序的server目录下的/tmp文件夹和/cache文件夹。