fix error: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
统一代理日志中出现以下错误消息1PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 原因这是Java虚拟机报告的常见错误消息。当Java环境没有适当的CA证书路径来验证HTTPS服务器是否为有效网站时,就会发生这种情况。这是一个特定于Java的错误,其他技术不会报告此类错误。 解决方案创建证书首先,你需要创建一个证书。要执行此操作,请按照以下步骤操作: 在浏览器中打开URL(即https://www.example.com/、https://saas.whitesourcesoftware.com/) 按F12访问浏览器的开发人员工具 转到“security”选项卡 单击“view certificate” 在“详细信息”窗口中,转到“详细信息”选项卡 单击“导出” 确保文件格式为:Base64编码ASCII、单个证书...
java项目加载so/dll文件库
参考: https://stackoverflow.com/questions/1403788/java-lang-unsatisfiedlinkerror-no-dll-in-java-library-path https://www.cnblogs.com/eason-d/p/12401371.html 首先需要保证使用带有传统libc库的系统system.loadxxx的用法System.loadLibrary(“HelloWorld”);这句话是在执行java代码之前加载动态库System.load 参数必须为库文件的绝对全路径,可以是任意路径System.loadLibrary 参数为库文件名,不需要写库文件的扩展名, 注意:如果是linux系统库文件名需要以lib开头, 然后作为参数需要去掉lib例子(一般放在static代码块做加载,确保仅执行一次):1234567System.load("/user/src/app/lib/hello.dll"); // Load native library at runtimeSystem.loadLib...
Java BigDecimal的RoundingMode舍入模式
Java大数类的RoundingMode(舍入模式) java.math.RoundingMode:这是一种枚举类型,它定义了8种数据的舍入模式。它与java.math.BigDecimal类中定义的8个同名静态常量的作用相同,可用BigDecimal.setScale(int newScale, RoundingMode roundingMode)来设置数据的精度和舍入模式。 1、ROUND_UP:向远离零的方向舍入。 若舍入位为非零,则对舍入部分的前一位数字加1;若舍入位为零,则直接舍弃。即为向外取整模式。 2、ROUND_DOWN:向接近零的方向舍入。 不论舍入位是否为零,都直接舍弃。即为向内取整模式。 3、ROUND_CEILING:向正无穷大的方向舍入。 若 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;若为负,则舍入行为与 ROUND_DOWN 相同。即为向上取整模式。 4、ROUND_FLOOR:向负无穷大的方向舍入。 若 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;若为负,则舍入行...
记录雪花算法ID到前端之后丢失精度
问题描述 12345后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况。例如:201511200001725439这样一个Long类型的整数,传给前端后会变成201511200001725440js中的number类型是16位的,而雪花id是19位 下图可以看出,输入的值超出安全值,可能会被js自动转化 3种jackason解决方式(前端再把String类型的19位数字传回服务端的时候,服务端还是接收long类型即可,这是Spring反序列化参数接收默认支持的行为) 重新注册ObjectMapper的Long类型序列化方式 123456789101112131415161718192021222324@Configurationpublic class LongClassMessageConverter implements InitializingBean { @Resource ObjectMapper objectMapper; private SimpleModule getSimpleModule() { ...
利用KeyTool生成自签名证书
任何机构或者个人都可以申请数字证书,并使用由CA机构颁发的数字证书为自己的应用保驾护航。常用的两个证书管理工具:KeyTool,OpenSSL--->构建CSR(Certificate Signing Request,数字证书签发申请),交由CA机构签发,形成最终的数字证书。 最近用到p12文件,就记录一下如何使用jdk自带的keytool来创建p12文件 打开cmd,切换到jdk的bin目录下 输入命令 1keytool -genkeypair -alias serverkey -keyalg RSA -keysize 2048 -validity 3650 -keystore D:\rabbitmq\tls-gen-master\p12test.keystore 参数解释: 12345678storepass: keystore文件存储密码,不加这个参数会在后面要求你输入密码keypass 私钥加解密密码alias 实体别名(包括证书私钥)dname 证书个人信息keyalg 采用公钥算法,默认是DSA,这里采用RSAkeysize 密钥长度(DSA算...
一个jdbc批量处理的工具类
12345678910111213141516171819202122232425262728293031323334353637383940414243// batchUtils.batchUpdateOrInsert(数据集合, xxxxx.class, (item, mapper实例对象) -> mapper实例对象.insert方法(item));public class MybatisBatchUtils { /** * 每次处理1000条 */ private static final int BATCH_SIZE = 1000; @Resource private SqlSessionFactory sqlSessionFactory; /** * 批量处理修改或者插入 * * @param data 需要被处理的数据 * @param mapperClass Mybatis的Mapper类 * @param function 自定义处理逻辑 * @return ...
关于Serializable的认识
首先,如果对象需要网络传输或者持久化(我的理解是dto和entity/model),那么就需要实现Serializable接口。为了防止反序列失败,该对象需提供一个默认的serialVersionUID(该值在反序列化的时候会进行校验,如果校验失败会抛异常-InvalidClassException)。 但如果只是转换为json字符串的形式与网络打交道(比如MVC中前后端分离情况下,返回json-response给前端),那么这个response对象就不需要实现Serializable接口。 关于 UID serialVersionUID有两种显式的生成方式: 12一个是默认的1L一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段, 如果没有显式地定义一个名为serialVersionUID的long型的变量,编译器在编译的时候也会根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,这就决定了这个类在序列化上一定不是向前兼容的 使用默认计算的serialVersionUID就会有一个明显的劣势 1234使用默认计算的seri...
各层对象含义
PO(Persistant Object) 持久对象用于表示数据库中的一条记录映射成的 java 对象。PO 仅仅用于表示数据,没有任何数据操作。通常遵守 Java Bean 的规范,拥有 getter/setter 方法。 可以理解是一个PO就是数据库中的一条记录;可以理解某个事务依赖的原始数据;好处是可以将一条记录最为一个对象处理,可以方便转化为其他对象 POJO (Plain Old Java Object)POJO是“Plain Ordinary Java Object”的缩写,意为“简单的Java对象”。POJO通常指的是一个没有任何限制、继承或实现特定接口的普通Java对象。POJO对象通常是一种轻量级的Java对象,没有任何框架或者注解的依赖。在Java开发中,POJO对象通常用于表示简单的数据模型或者数据传输对象。最基本的 Java Bean 只有属性加上属性的 get 和 set 方法。可以转化为 PO、DTO、VO;比如 POJO 在传输过程中就是 DTO。 BO(Business Object) 业务对象封装对象、复杂对象,里面可能包含多个类主要作...
(Address already in use xxx) or (No buffer space available (maximum connections reached) connect)
No buffer space available (maximum connections reached?): connect Address already in use xxx 123一般可以先查看代码中是否有一些连接未关闭1. 比如es的restclient,或者其他的httpclient2. 再或者可以检查下是否有长时间占用未被释放的jdbc connection
MAT的使用
MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。 软件地址使用说明1、环境安装好jdk,配置好环境变量JAVA_HOME 运行内存分析器的最低Java版本是 1.8.0 最新版本MAT已经要求17以上 注: 确保你的hprof文件没放在c盘或是桌面,因为mat软件默认会在解析的同时生成一堆文件再hprof文件的相对路径下 2、使用 Memory Analyzer Tools 获取堆存储1、启动进程仅需单击两次。在菜单中,选择“file --> Acquire Heap Dump...” 或者有直接生成好的dump文件,则直接Open Heap Dump ,打开即可; 2、选择Acquire Heap Dump后。您可以看到正在运行的Java进程;选择你所需...
