weblogic 发布war包时, weblogic将war中的classes中的文件打包成了_wl_cls_gen.jar, 导致struts(我这的2.5.17)在读取文件时需要从这个jar里进行读取, 且每次读取一个xml就关闭了输入流; 从jar中读取的过程存在解压的步骤, 在tmp文件夹中写入临时文件, 进而出现大量相同的文件, 且文件的MD5和_wl_cls_gen.jar的一致, 这也是我做出以上描述的依据.
-
升级struts 2.5.17 至 2.5.18
-
修改发布方式, 将war包解压后发布
选中解压后的文件夹
后面配置中的"
源可访问性
"选最后一项(这里选了之后好像上面那步没啥用, 因为文件是从这里加载了)
再次发布后就没有生成_wl_cls_gen.jar和大量的临时文件了
-
扩大缓存,直接在内存中解压jar并提取文件, 目前没找到相应方法/配置 , 文件读取缓存大小,但是好像不能解决每次取xml就解压的问题,
weblogic, 大量临时文件, Struts, jar_cache, tmp, java.io.tmpdir
-
系统发布时间很长还卡, 启动还需要写入大量的临时文件
-
看日志发现在自定义的监听器都执行完毕后卡好一会, 临时文件就是在这时写入,是大量的jar_cache*.tmp文件, 大约几兆, 但是数量很多导致占用大量java.io.tmpdir指定的空间, 文件大小一致, MD5也一致, tomcat中就没有这个问题
-
分析了tmp文件, 发现是项目中文件, 大致是class和各种properties及xml文件, 默认发现jsp/html等(伏笔)
-
因为系统发布时间较长, 打算先删掉一些启动项缩短时间 (因为我也不清楚什么原因, 考虑到需要测试和发布很多次观察现象做总结, 能快点就快点, 删context.xml和DTO怕起不来, 删了Action.xml和字典加载), 发现临时文件变少了
-
字典是写在缓存里的, 而且内容也对不上, 怀疑是一个action对应一个临时文件,测试后发现不对
-
怀疑是一个package对应一个临时文件, 测试后也不对
-
怀疑是一个action.xml对应一个临时文件, 测试现象符合预期
-
日志打的info, debug级别的日志太多, 没敢开, 但是又需要知道是哪里写入的
-
故意在xml中写了个语法错误,通过异常栈看到了调用过程,(windows启的weblogic,没用过jstack), 感觉XmlConfigurationProvider.loadConfigurationFiles这方法值得怀疑
-
下载Struts的源码看一下, 发现文件流都是正常关闭的
-
故意include一个不存在的文件, 没发现报错, 上eclipse调试发现异常被吞掉了, 只输出了一条debug, 这怎么也应该要配warn吧
-
尝试eclipse连接weblogic调试, 报了个拒绝连接, 就放弃了
-
查看语法报错的提示发现文件路径是: zip:部分路径/_wl_cls_gen.jar!/xml路径
-
确认了weblogic的发布目录下的lib文件夹有这个文件_wl_cls_gen.jar且classes文件夹中无内容
-
比对_wl_cls_gen.jar和临时文件的MD5, 结果一致
-
搜到解决方法纯属巧合, 想着不让weblogic打包classes生成jar, 就先搜发布优化, 没找到合适的, 看了下welogic文档, 没找到中文的, 放弃
-
最后看到了 “weblogic 单独更新class文件"里提到了使用展开目录部署, 搜索后找到了"weblogic的三种发布方式”, 用其中的按目录发布暂时解决了这个问题
weblogic
发布
war
包
时,class文件会打
包
_wl_cls_gen.
jar
文件放在../
tmp
/_WL_user的lib目录下,程序里获取class里的配置文件等需要使用this.getClass().getResourceAsStream("绝对路径");
Weblogic
下载、安装、数据源配置可参考:
weblogic
安装部署、
weblogic
配置JNDI数据源,接下来进入到我自己研究的干货领域,我通过几个常见问题来介绍
weblogic
:
在MAIN_NAME文件夹下:nohup ./start
Weblogic
.sh
首次运行会在MAIN_NAME文件夹下
生成
nohup.out文件,作用同Tomcat下的catalina.out
想了解
Java
运行
Jar
包
内存配置的操作的相关
内容
吗,闲丰在本文为您仔细讲解
Java
Jar
包
内存配置的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:
Java
,
Jar
包
,内存配置,下面大家一起来学习吧。如下:
java
-
jar
-Xms1024m -Xmx1536m -XX:PermSize=128M -XX:MaxPermSize=256M car.
jar
说明:1、堆内存:最小102...
网上的办法都不靠谱,没说到点上。
在
发布
war
包
时,
weblogic
会自动把classes下面的文件编译成一个_wl_cls_gen.
jar
文件,放在WEB-INF/lib下面。
这时,我们不能使用先获取文件路径,再通过new File(filePath)的方式获取文件。因为获取到的路径是以zip://开头的。
String path = this.class.getClassL
项目在eclipse中打
包
时,class文件夹是存在的,并且不为空。
但是当项目部署到
weblogic
时,是打成
war
包
的,这时src目录就已经消失了,classes目录在部署到
weblogic
中时经过解压的
war
包
,classes目录下是空的,classes下的东西是被打
包
成 _wl_cls_gen.
jar
! ,
包
括配置文件都被压缩了,这个
jar
包
(_wl_cls_gen.
jar
!
import
java
.net.
Jar
URLConnection;
import
java
.net.URL;
import
java
.net.URLClassLoader;
import
java
.util.Enumeration;
import
java
.util.HashSet;
import
java
.util.Map;
import
java
.util.Se
起因:一个项目我直接在
weblogic
服务器下把
发布
WebContent下的文件是可以访问文件成功的,但是打成
war
包
发布
在
weblogic
下就会出错。文件是放在src下的,最终编译在WEB-INF的classes文件下。Original Code:ClassLoader classLoader = Thread.currentThread().getContextClassLoader();cl...
driver =com.intersys.jdbc.
Cache
Driver
url =jdbc:
Cache
://127.0.0.1:1972/USER
username =_system
password =123456
新建jdbc驱动加载文件
ExamHisJDBCUtils.
java
public class Exam...
Jenkins配置windows为从节点时代理失败
报错位置:
java
-
jar
remoting.
jar
-workDir -
jar
-
cache
/remoting/
jar
Cache
C:\Users\Admin
报错: No argument is allowed: /remoting/
jar
Cache
C:\Users\Admin
原因:没有设置远程工作目录,设置成remoting.
jar
目录即可
1、
weblogic
部署
war
包
后,
tmp
目录下的classes为空,是因为
weblogic
自动将.class文件和配置文件都打到lib/_wl_cls_gen.
jar
中。
2、所以在
struts
.xml中增加
3、试了一下,仍然找不到Action。
这是因为打的_wl_cls_gen.
jar
没有META-INF文件夹,
Struts
不能识别此
jar
包
。故
在源
包
或resources...