![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
ebg_coder
这个作者很懒,什么都没留下…
展开
-
多个tomcat同时使用 不设置CATALINA_HOME环境变量
通常一台服务器只使用一个tomcat,设置一个CATALINA_HOME的环境变量。但有些时候需要一台服务器启动多个tomcat,那就不能设置CATALINA_HOME了!我们可以在对应tomcat的startup.bat启动脚本中,加入对应的CATALINA_HOME。6.0.20的也是一样。原创 2024-07-02 15:29:33 · 183 阅读 · 1 评论 -
Apache Commons FileUpload 拒绝服务漏洞(CVE-2023-24998)
网上搜索资料得知解决办法是将 Commons FileUpload 升级到 1.5 及以上版本,注意就是fileupload包的升级,可能会导致commons-io包的版本不匹配。我测试了一下,commons-fileupload-1.5和commons-io-2.4应该是没问题的,在这里也提供jar包,有需要的可自行下载。前几天客户委托的第三方软件扫描出漏洞:Apache Commons FileUpload 拒绝服务漏洞(CVE-2023-24998)。原创 2024-03-28 11:02:19 · 742 阅读 · 2 评论 -
Long.getLong和parseLong的区别
最近项目上有小伙伴在string转long的时候,看到有getLong方法没多思考就使用了。自己写方法的时候名字也尽可能规范点,比如说这个getLong()方法要是叫getSystemPropLong之类的,估计就没这么多人用错了。毕竟jdk也是人写的,总会有不规范的地方。要实现字符串string转换成long,一般是用Long.parseLong(String s) ,大部分情况下性能最优。Long.getLong(String s)方法是获取系统参数,并将系统参数转为Long类型。原创 2023-07-19 15:53:53 · 921 阅读 · 0 评论 -
Linux统计java线程状态
Linux系统没有图形界面,用jvisualvm工具监控线程数和状态可能不方便,可以使用jstack命令统计。然后cd到jdk的bin目录,使用jstack命令,目的是生成一个dump。第二列就是进程号,找到相应服务的进程号。首先使用命令获取服务的进程号pid。最后统计dump里面的线程状态。原创 2023-03-06 10:32:26 · 596 阅读 · 0 评论 -
Linux jmap命令报错:unable to open socket file
网上资料是说可能是权限问题,登录用户和启动服务的用户不一致;或者是/tmp/hsperfdata_$USER目录下面没有pid文件。最后解决:java服务使用了jetty的线程池QueuedThreadPool,该版本线程数最大值是250,后面发现服务把线程数用完了,导致新线程一直无法创建。前几天客户的java服务出问题了,反馈说业务都不能操作,页面也不能登了,像宕机一样。登上Linux服务器一看,服务还在啊,也没内存溢出。可能也因为该原因无法使用jmap和jstack命令,重启服务后一切正常。原创 2023-03-03 10:22:33 · 1801 阅读 · 0 评论 -
java过滤 \u、不可见的乱码
由于用户经常从excel,word等乱七八糟的地方copy内容过来,而其中有不可见的字符,导致输出内容看上去是对的,但放到文本编辑工具里发现,其实是多了一个零长度的字符(比如:\u2028,0000200B ZERO WIDTH SPACE),所以需要过滤掉不合法的unicode编码等特殊字符。转载 2022-11-02 10:30:59 · 2448 阅读 · 0 评论 -
根据jdk32位或64位 启动应用选择不同的内存
由于产品的jdk是免安装版的,即不会写入环境变量,所以稍微有点麻烦。最近做了一个优化需求,要写一个脚本,根据用户环境已安装的jdk是32位还是64位,来启动不同的java-xmx最大内存。linux系统中,即使是32位的jdk1.6,设置成Xmx为2G,也是能正常启动的,所以不需要修改shell脚本。,产品后面升级成64位了,但是还有许多存量客户使用旧的32位的jdk,这时候就需要根据位数来选择不同内存启动了。,通过这种方式来判断产品在运行的jdk的位数。因为产品使用的jdk是1.6,而。原创 2022-10-31 15:10:27 · 488 阅读 · 0 评论 -
Data truncation异常
今天更新数据库时出现了java.sql.DataTruncation Data truncation的异常,经过检查发现,某个字段数据库设置长度为3,实际值是5,导致异常。 经过搜索发现,除了长度以外,精度,范围,大小等都有可能出现该异常。...原创 2018-12-13 16:59:39 · 31660 阅读 · 1 评论 -
与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。问题解决
可以看出是在做修改的时候发生的报错,从日志里面分析发现是两个不同的进程对同一张表进行update,但是修改的范围where id是不同的。后面发现问题是因为,该表没有给id设置索引导致,sqlserver如果没有索引默认update的时候会锁整个表,导致该死锁问题。解决方案:给id加上索引或者主键。原创 2022-10-18 10:26:34 · 5318 阅读 · 0 评论 -
fastjson格式化输出打印
java使用fastjson组装json报文的时候,如果直接.toString()打印出来字符串是很丑的,没有空格和缩进。SerializerFeature也是fastjson包里面的类。这样设置后,打印出来日志输出就会是格式化好的字符串了。原创 2022-10-14 15:48:38 · 2971 阅读 · 0 评论 -
idea设置类似 Eclipse的outline视图
菜单找到-视图(View)--> 工具窗口(Tool Windows)--> 结构(Structure)eclipse中有个视图叫outline,可以列出所有方法和变量,在一个类很多行数的时候非常有作用。原创 2022-09-29 19:24:50 · 1683 阅读 · 0 评论 -
linux too many open files解决办法
too many open files是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。如果你对你的程序有一定的解的话,应该对程序打开文件数(链接数)上限有一定的估算,如果感觉数字异常,请使用第一步的lsof -p 进程id > openfiles.log命令,获得当前占用句柄的全部详情进行分析。转载 2022-09-13 10:14:54 · 4217 阅读 · 0 评论 -
PGP加密后密文内容缺少的问题解决
无意中发现,使用的jdk是1.8.0_141,资料有显示说jdk1.8后面的版本有修复什么密钥加密问题,于是让客户更换成1.8.0_201,问题解决了!前几天一个客户反馈,PGP加密后,密文比正常的少了一大截,导致服务端解密失败。虽然更换jdk解决了问题,但是不知道问题的原因是什么……知其然而不知其所以然。(正常应该还有十几二十行密文才对)原创 2022-08-23 17:16:06 · 252 阅读 · 0 评论 -
Comparison method violates its general contract解决办法
查询JDK的资料得知,在JDK1.7开始对Comparator类进行了优化,必须包含3个特性。也就是compare(a,b)>0, compare(b,c)>0, 则compare(a,c)>0。反对称性:如果compare(o1,o2) = 1,则compare(o2, o1)必须返回符号相反的值也就是 -1;自反性:当两个相同的元素相比,compare方法必须返回0,也就是compare(o1, o1) = 0;最近有客户自行升级了系统的JDK版本,原本是1.6的,升到了1.8。...原创 2022-08-12 11:18:19 · 1516 阅读 · 0 评论 -
com/jowto/agent/AgentBridge报错解决
最后还是坚持搜索有所发现,椒图公司写了篇攻略是怎么修复log4j漏洞的,里面提到了同样的包名com.jowto。又通过天眼查发现,椒图是做守护进程的,360给投资了8000W。那真相就显而易见了,客户最近装了这个椒图的安全软件,当我们的应用启动时它就开始注入搞事情。结果注入之后没多久,它们自己的类初始化失败,把我们的应用搞挂了。这个报错后面还跟随着数据库创建连接失败等报错,所以我们一开始分析方向错误了,搜这个包名和类名没什么资料,又一直在检查数据库连接池、泄露、超时释放等问题,但一无所获。...原创 2022-07-19 14:08:58 · 832 阅读 · 0 评论 -
Linux 导出java dump文件
有时候巡检要关注一下系统的运行情况,防止内存使用过多,随时会OOM,这时候需要导出dump文件查看。1、获取java应用的pid输入命令后,找到java应用的pid2、使用jdk的jmp命令导出dump文件如果环境已经配好java环境,可以直接如果没配java环境,那就复制一个jdk文件到linux服务器上,cd到bin目录,然后在命令前面加上./3、导出成功后,一般这个dump文件都挺大的,压缩好再传到windows。用eclipse memory analyzer工具分析,观察内存使用原创 2022-06-01 11:00:10 · 3986 阅读 · 0 评论 -
CSS失效 Resource interpreted as Stylesheet but transferred with MIME type text/html
前段时间系统从JDK1.6升到了1.8,tomcat也从6.0换到了8.5,但用着用着发现前端样式没了!浏览器点开F12看到控制台输出了Resource interpreted as Stylesheet but transferred with MIME type text/html的报错。奇怪,代码没动,怎么升级就不行。搜索了资料发现,后端如果使用servlet,编码格式是text/html的话,CSS文件会无法解析。猜测可能是tomcat升级的原因。解决办法:1、新增一个专门给css文原创 2022-05-20 14:53:06 · 363 阅读 · 0 评论 -
BouncyCastleProvider引起的内存泄露修复
最近项目上使用到了一种加密方式叫PGP,提供的工具类里面有使用BouncyCastleProvider类。JcePGPDataEncryptorBuilder c = new JcePGPDataEncryptorBuilder(PGPEncryptedData.DES) .setWithIntegrityPacket(withIntegrityCheck).setSecureRandom(new SecureRandom()).setProvider(new Bo原创 2022-04-24 09:49:30 · 1303 阅读 · 0 评论 -
HttpsURLConnectionOldImpl cannot be cast to javax.net.ssl.HttpsURLConnection
之前新建一个https连接是这样的:URL urlStr = new URL("https", ip, Integer.parseInt(port), uri);HttpsURLConnection conn = (HttpsURLConnection) (url).openConnection();但是会偶发出现一个转换异常:com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl cannot be cast原创 2021-12-15 13:57:23 · 2567 阅读 · 0 评论 -
eclipse设置行宽Maximum line width
1.Window->Preferences->搜索formatter注:如果不能保存,需要在3处修改名字。然后再保存->确定,应用即可。转载 2021-10-22 17:41:22 · 409 阅读 · 0 评论 -
Unsupported record version Unknown-0.0 问题解决
前几天要用https调用一个地址,jdk使用的是1.8,协议是tlsv1.2,但是一直调用的时候返回Unsupported record version Unknown-0.0,百思不得其解,网上的资料也很少。有一天奇怪的是,在别人的电脑是可以的!于是怀疑起本机internet选项的tlsv1.2、注册表等等,但还是不行。后来无意中发现,低版本的jdk1.8,会有握手时不会发送SNI的bug,于是升级了高一点版本的jdk,结果就解决了!原来是jdk1.8.0_101,升到了jdk1.8.0_原创 2021-09-18 17:37:59 · 5958 阅读 · 0 评论 -
No buffer space available问题解决
今天在公司服务器上部署的一套后台系统突然不能使用了,上服务器看了一下,控制台打印了如下错误信息:java.net.SocketException: No buffer space available (maximum connections reached?): JVM_Bind之前最快的方法是重启服务器,效果立杆见影(万能的重启大法!),但是治标不治本,过一段时间,这个问题又会再次出现。。是可忍孰不可忍,上网搜寻了一下相关的资料,在stack overflow中看到一条评论说这个是wind转载 2021-03-11 09:49:54 · 6454 阅读 · 1 评论 -
Java加密 Illegal key size 异常处理
Java进行AES或者DES加密时,如果密钥大于128bit, 会抛出java.security.InvalidKeyException: Illegal key size 异常. 因为密钥长度是受限制的, java运行时环境读到的是受限的policy文件. 文件位于${java_home}/jre/lib/security, 这种限制是因为美国对软件出口的控制.处理办法: 在官方网站下载JCE无限制权限策略文件JDK6的下载地址: http://www.oracle.com/technetwork转载 2020-09-08 10:34:43 · 362 阅读 · 0 评论 -
JDK1.6 解决Could not generate DH keypair
Java 早期版本是只支持 1024 位的 DH Parma,如果对方是2048位或以上的情况,会报Could not generate DH keypair的异常。JDK1.6的解决办法如下:1.下载bcprov-ext-jdk15on和bcprov-jdk15on的包到$JAVA_HOME/jre/lib/ext下,版本的话1.50-1.59应该都可以如:bcprov-ext-jdk15on-1.52.jar和bcprov-jdk15on-1.52.jar2.包替换之后,修改$JAVA.原创 2020-08-28 14:12:46 · 2895 阅读 · 3 评论 -
解决 Cannot create PoolableConnectionFactory (ORA-00923: 未找到要求的 FROM 关键字)
昨天测试查询的时候发现使用oracle时有这么一个错误:Cannot create PoolableConnectionFactory (ORA-00923: 未找到要求的 FROM 关键字)。我换成了sqlserver和mysql,发现又没有错误。百思不得其解,因为用ibatis的SqlMapClientBuilder.buildSqlMapClient方法是能成功创建对象的,难道是ibatis的sql语句不兼容oracle?不太可能啊!!于是我翻了下配置文件,破案了。SqlMapConfig原创 2020-05-09 09:30:49 · 1731 阅读 · 0 评论 -
Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg'的解决方案
JDK如果执行过安装程序后,会在 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_45\MSI\ 留下印记,里面有一项INSTALLDIR记录的还是当时安装的旧路径,如下图:为了清净,直接把HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\这个注册表分支给删除了,然后到c转载 2017-12-04 14:17:03 · 2040 阅读 · 0 评论 -
base64字符串和图片互相转换
java类想要实现base64字符串转成图片文件输出,或者图片文件转成base64字符串输出,可以参考以下代码:package com.ttt;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;imp原创 2017-12-25 10:13:58 · 8494 阅读 · 0 评论 -
Java实现文件复制
java实现文件复制,可以直接使用IO流。package com.ttt;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;原创 2017-12-27 09:47:10 · 271 阅读 · 0 评论 -
Java判断手机号格式
利用正则表达式,对手机号进行格式判断:String mobile = "13712345678";String regex = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}$";if (Pattern.matches(regex, mobile)) { System.out.println("校验成功");} e原创 2018-01-17 11:46:08 · 6177 阅读 · 0 评论 -
解决csv文件用excel打开乱码的问题
Java里面生成csv文件以后,用文本工具打开很正常,没有问题;但是用excel打开会乱码,经过搜索知道,需要在csv加入bom信息,让excel能识别,并且可以根据逗号自动填充单元格。代码如下:try { FileOutputStream fos = new FileOutputStream("E:\\test.csv", false); //在csv加上bom信息,防止excel打...原创 2018-03-14 20:20:40 · 3641 阅读 · 0 评论 -
Java获取两个时间内的全部时间
最近有个需求,需要使用定时器每天生成文件,文件以天为维度。例如过去一个月30天,需要生成30个文件。这样需要获取开始日期和结束日期之内的全部日期(包括开始日期和结束日期)。下面是代码实现:package cn.test;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Cal...原创 2018-03-09 10:59:57 · 3600 阅读 · 0 评论 -
Cookie设置HttpOnly,Secure,Expire属性
原文地址: https://blog.csdn.net/a19881029/article/details/27536917Tomcat版本为6.0.39,JDK版本为1.6update45在Web工程上增加一个Filter对Cookie进行处理public class CookieFilter implements Filter { public void doFilter(Se...转载 2018-07-20 17:03:04 · 5326 阅读 · 0 评论 -
Java中collection.toArray(new String[0])的语法解释
Collection的公有方法中,toArray()是比较重要的一个。但是使用无参数的toArray()有一个缺点,就是转换后的数组类型是Object[]。 虽然Object数组也不是不能用,但当你真的想用一个具体类型的数组,比如String[]时,问题就来了。而把Object[]给cast成String[]还是很麻烦的,需要用到这个:String[] stringArray = Array...转载 2019-04-02 09:57:51 · 6097 阅读 · 2 评论 -
JSCH连接sftp,Invalid private key和algorithm negotiation fail异常解决
这几天项目有个功能涉及sftp,甲方提供了一个xxx.ppk,这个ppk文件是通过PuTTYgen创建的,用来加密的。程序里面是java代码,用jsch插件来建立sftp连接。一顿操作之后连接测试,报异常:com.jcraft.jsch.JSchException:invalidprivatekey查询资料得知,使用jsch连接sftp的话,JSch期望私钥是OpenSSH格...原创 2019-05-15 11:27:25 · 7879 阅读 · 4 评论 -
Java zip解压缩
/** * zip解压 * @param srcFile zip源文件 * @param destDirPath 解压后的目标文件夹 * @throws RuntimeException 解压失败会抛出运行时异常 */ public static void unZip(File srcFile, String d...转载 2019-05-16 09:54:37 · 127 阅读 · 0 评论 -
java简单的压缩方法(zip压缩)
前几天有个功能需要上传文件到FTP,由于文件过大,想到了压缩,发现了一个简单的java压缩方法。ZipOutputSream等类都是java库自带的,下面上代码。public class yasuo { public File doZip(String sourceDir, String zipFilePath) throws IOException { File file = n原创 2015-12-04 15:07:20 · 520 阅读 · 0 评论