Java
文章平均质量分 62
半斤米粉闯天下
这个作者很懒,什么都没留下…
展开
-
SpringSecurity自定义多Provider时提示No AuthenticationProvider found for问题的解决方案与原理(四)
SpringSecurity 5.6.X 自定义多Provider时No AuthenticationProvider found for问题的排查与修复原创 2022-08-29 17:40:28 · 4637 阅读 · 45 评论 -
SpringSecurity自定义多Provider时提示No AuthenticationProvider found for问题的解决方案与原理(三)
SpringSecurity 5.6.X 自定义多Provider时No AuthenticationProvider found for问题的排查与修复原创 2022-08-29 16:42:20 · 5620 阅读 · 5 评论 -
SpringSecurity自定义多Provider时提示No AuthenticationProvider found for问题的解决方案与原理(二)
SpringSecurity 5.6.X 自定义多Provider时No AuthenticationProvider found for问题的排查与修复原创 2022-08-29 11:04:44 · 5474 阅读 · 0 评论 -
SpringBoot 异步线程池配置
SpringBoot 异步线程池配置原创 2022-06-30 17:26:32 · 946 阅读 · 0 评论 -
双重检查单例模式的的HttpClient线程池实现
单例模式(双重检查)的HttpClient线程池实现原创 2022-05-19 10:59:27 · 1467 阅读 · 3 评论 -
SpringCloud 2021 与 Nacos 配置中心集成排雷记录:bootstrap.yml
解决springcloud2021 2020无法识别bootstrap.yml的问题原创 2022-05-07 18:06:25 · 4298 阅读 · 7 评论 -
关于UUID的重复性
UUID会重复吗有的人说一定不会重复,也有的人说很小几率会重复,其实都有可能,取决于代码中使用的是哪种UUID生成方式,或者说,使用的是哪种UUID算法。UUID Version 1:基于时间的UUID基于时间的UUID通过计算当前时间戳、随机数和机器MAC地址得到。由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。但与此同时,使用MAC地址会带来安全性问题,这就是这个版本UUID受到批评的地方。如果应用只是在局域网中使用,也可以使用退化的算法,以IP地址来代替MAC地址(原创 2022-01-04 15:53:59 · 55364 阅读 · 5 评论 -
JVM学习记录(三) 双亲委派机制
其实这个翻译就很容易引起歧义,英文原名叫Parents Delegation Model,个人感觉叫官僚模型或啃老模型更合适一些,因为整个流程里面并没有体现到“双亲”在哪里。概述JVM采用按需加载类的模式,当需要加载某一类时,会将请求交由父类加载器处理,直至最顶层引导类加载器结束。类加载器收到加载请求,将请求转发给父级类加载器如果父类加载器还存在父加载器,那么继续向上转发,直至最顶层若引导类加载器可以完成类加载,那么成功并返回;如果无法完成则反向交由下级加载器进行加载,直至加载成功例子原创 2021-05-06 17:26:47 · 152 阅读 · 0 评论 -
JVM学习记录(二) 类加载器
引导类加载器(启动类加载器)C/C++编写的用于加载核心类库,例如jdk1.8.0_281\jre\lib\rt.jar等,String类即在此时加载加载自定义类加载器,包括扩展类加载器和系统类加载器出于安全考虑此阶段只加载包名为java,javax,sun等开头的类没有父加载器自定义类加载器用java编写的JVM规范中,除了引导类加载器,剩下统称为自定义类加载器均派生于java.lang.ClassLoader,可以通过getClassLoader()方法获取父加载器扩展类加载原创 2021-05-06 15:02:27 · 117 阅读 · 0 评论 -
JVM学习记录(一) 类加载子系统
加载(Loading)读取class文件获取二进制流将类的静态存储结构转换为方法区的运行时数据结构(1.7及之前叫永久代,之后叫元空间)在内存中生成一个该类的java.lang.Class对象链接(Linking)验证(Verification)文件格式验证、元数据验证、字节码验证、符号引用验证十六进制文件头一定是 CA FE BA BE准备(Preparation)为类的成员变量在堆空间中分配内存并设置零值(boolen为false,int为0等等)被final修饰的sta.原创 2021-04-30 14:47:43 · 128 阅读 · 1 评论 -
使用Jsch通过SFTP下载ZIP文件并解压
ZIP模块用的并不是java.util下的,而是apache的commons-compress,用apache的库可以避免很多因为操作系统问题造成的编码异常。大概流程是这样的:本地通过sftp访问服务器上的某个目录,然后获取到其中的zip文件并分别提取文件流。package com.ludan.rddatamid.qilubankguarproject.service;import com.central.common.feign.FileService;import com.central.co原创 2021-04-14 17:30:16 · 2036 阅读 · 0 评论 -
自己实现的一个redis锁注解
@Slf4j@Aspect@Componentpublic class SynchronizeLockAspect { private static final String KEY = "thread_lock"; private final ThreadLocal<String> threadLocal = new ThreadLocal<>(); private final StringRedisTemplate stringRedisTemp原创 2020-09-14 09:41:03 · 270 阅读 · 0 评论 -
springboot切面不生效踩坑纪录
今天想写个同步锁的功能,第一反应自然是切面,但写出来之后怎么调试切面都不执行,折腾一下午最后无意中发现了问题所在。在new文件的时候,注意这个Aspect的选项,当时我想都没想就选了他通过他建立的文件是不一样的,后缀名是.aj而不是.java,但坑爹的是语法和java完全一样,编译运行也都没有任何异常,就是不执行!!手动把文件后缀改成.java之后一切正常。这个小问题折腾了整整一下午,要不是打算临时提交git根本注意不到这个小后缀名的区别,太坑了。另外多查了一下AspectJ的文件需要单独的编译原创 2020-09-09 17:54:22 · 8613 阅读 · 6 评论 -
gradle 5.0以后与lombok的兼容问题
一直用的是gradle 4.x版本,与lombok一直相安无事。今天新拉一个工程把gradle更新到5.6.2之后就出问题了,现象是这样的:如果代码中使用到了bulider或toString等由lombok注解提供的功能,比如这样:在编译的时候gradle就会报错,而且报错信息是乱码:中间绕了多少弯路就不说了,又是改编码又是调IDE的,全都是无用功。gradle 5.0以后lombok的...原创 2019-09-18 15:45:49 · 2357 阅读 · 5 评论 -
ElasticSearch初步使用
spring来管理 RestHighLevelClient@Configurationpublic class ElasticRestClientConf { @Value("${elasticsearch.ip}") private String ip; @Value("${elasticsearch.port}") private Integer port...原创 2019-07-31 09:14:04 · 179 阅读 · 0 评论 -
JavaCV入门示例及UnsatisfiedLinkError异常踩坑记录
JavaCV可以认为是OpenCV的Java版,其本质上是一个Java Interface,是一个联结Java与OpenCV的桥梁,所以它本质上是依赖OpenCV的。关于这东西能查到的文档和资料实在是太少了,这个过程中着实踩了不少坑,记录一下以便帮助以后的人。先说第一个坑,从JavaCV 0.8版本开始,OpenCV被完整地集成进了JavaCV的依赖中,也就是说从这个版本以后不需要在环境中配置...原创 2019-07-10 12:23:55 · 5900 阅读 · 9 评论 -
java exec linux环境带空格传参问题
近期在使用phantomjs做图片导出功能时发现一个奇怪的问题,java端使用Runtime.getRuntime().exec(cmd)调用一条语句,windows下执行正常,linux下报错。样例语句如下:/home test.sh "2018-06-06 11:00"java调用代码如下:String cmd = "/home test.sh \"2018-06-06 11:...原创 2018-06-06 12:37:23 · 2759 阅读 · 3 评论 -
static变量使用@Value注入小纪
Spring 不允许(or 不支持?)把值注入到静态变量中,需要通过setter方法进行注入,如下private static String MESSAGEURL;@Value("${verification.message}")public void setMESSAGEURL(String messageUrl) { VerificationCode.MESSAGEURL =...原创 2018-09-13 10:21:36 · 877 阅读 · 0 评论 -
Spring的单例与线程安全
Q:spring默认是单例模式,也就是说在MVC中,一个请求传递过来内存中只会有一个controller对象,使用注入的话service和dao也都是单例模式的,为什么没有出现线程安全问题呢?A:service是单例的没有错,但是在数据传递过程中使用的pojo并不是,而是每次使用时new出来的(也叫有状态对象),所以不会存在线程安全问题。Q:那什么情况下才会出现线程安全问题?A:**线程安全...原创 2019-04-03 09:35:03 · 1354 阅读 · 1 评论 -
有状态对象与无状态对象
最近在整理线程安全知识的时候发现了无状态对象这个名词,与之相关的叫有状态对象。百度搜索出来95%的内容都是一样的,而且代码残缺不全根本无从理解,想都不用想就知道是ctrl+c过来的。自己查阅各种资料大概理解了,现在整理一下备忘。网上关于状态的解释还是很明白的。有状态对象(Stateful Bean)即有对应实例的对象,可以用来保存数据。EE开发中最常见的pojo就是有状态对象。无状态对象即不能...原创 2019-04-03 10:38:58 · 1398 阅读 · 3 评论 -
关于float浮点数计算精度问题的深入分析
在Java中,或者说在任何一门语言中,float和double两种类型浮点数计算的精度问题都是老生常谈了。在进行跟钱相关的计算时(毕竟是白花花的银子)的时候如果不注意这两种浮点类型往往会出现许多莫名其妙的bug且难以排查,所以我们不管见到什么一股脑全用BigDecimal算了,也是一种你好我好大家好的万金油方案。但是为什么会有浮点数误差?Java中float有效位数为7位为什么却连0.1都存不了?...原创 2019-04-09 10:36:11 · 8590 阅读 · 3 评论 -
详解Java的main函数
自接触java第一天起,老师就在教:第一行写public static void main(String[] args)“为什么要这么写等你们以后就知道了”曾经好奇问过别人,得到的答复基本都是“规定”。最近手头闲下来了,翻看了一下单例与多例的内容,发现我对static这个关键字认知仅仅停留在常量两个字上,继续翻看jvm中关于类加载机制的相关内容才终于理解为什么java程序的第一行一定要这...原创 2019-04-03 19:32:40 · 24171 阅读 · 11 评论 -
解决单元测试Mockito模拟方法内new对象的问题
对于正常通过构造或者注入方式依赖的对象,Mockito还是很好解决依赖关系的,但是如果遇到被测方法内出现 new 依赖的对象,就变得麻烦一些了。这里举一个比较特殊的例子,new了一个线程对象,实际上该解决方案针对所有通过 new 得到的对象均适用(如 RestTemplate ):public class A { public String someMethod() { //some c...原创 2019-05-30 19:35:22 · 33156 阅读 · 10 评论 -
Mockito快速上手
关于单元测试与集成测试单元测试:针对代码中最小可测试单元进行测试,通常就是一个方法块。单元测试只关注方法本身的业务逻辑,不关心其余任何与外部交互的方法或接口。集成测试:在单元测试的基础上将所有模块按照系统设计或业务规则组装为子系统或系统。集成测试主要目的是验证各个模块之间能否顺利交互,比如第三方API能否调通。Mockito单元测试的基本流程:模拟并替换测试代码中所有的外部依赖...原创 2019-05-30 20:33:30 · 538 阅读 · 0 评论 -
Mockito编写Controller层单元测试
测试团队要求写单元测试,但是Mockito网上相关的文档不是很多,基本都是入门性质的没有更深层次的使用案例,而且Mockito本身功能也在不断的完善,导致写起来比较费劲,好多地方完全靠猜。摸索之下算是完成了,把踩过的坑记录一下,万一有人需要呢。Controller层的单元测试比较简单,主要思路是mock业务层返回值,然后模拟调用接口,看两个例子就明白了。Controller.java@Re...原创 2019-05-28 15:19:54 · 13671 阅读 · 15 评论 -
关于Mockito处理 List (? extends A) 的解决方案
最近在写单元测试的时候遇到一个问题,把解决过程记录下来。业务代码如下:volume.getAttachments().get(0).getServerId()其中getAttachments()方法定义如下:List<? extends VolumeAttachment> getAttachments();VolumeAttachment定义如下:package org...原创 2019-06-05 15:16:13 · 6288 阅读 · 0 评论 -
Mockito编写Service层单元测试
上一篇记录了针对Controller层的单元测试,这一篇看一下针对Service层的测试,以及踩过的坑。由于业务层代码跟公司实际业务紧密相关,不方便贴代码,如有需要的地方会简短的写几行帮助理解,总的来说有以下几个要点:Mockito框架不支持static以及非public的方法或成员变量的mock,如有需要可使用PowerMockito框架注意大多数工具类也是static的推荐使用Bas...原创 2019-05-28 17:40:28 · 10069 阅读 · 0 评论 -
使用PowerMockito对私有private方法及异常进行测试
注意不是mock私有方法假如对下面的代码进行测试:public class Service { private int getBackupSize(String backupId, String keycloakToken) { //some code...... try { backup = os.blockStorage().backups()...原创 2019-06-10 17:30:59 · 14589 阅读 · 0 评论 -
JPA字段为null时不保存/更新
实体类中某些字段为null时,默认状态下执行save操作也会将null值存入,如果数据表中字段的类型不是char一类的字符类型就会出现各种稀奇古怪的报错,解决很简单,在对应的实体类加上@DynamicInsert注解就可以了。同理,对于更新操作也有@DynamicUpdate注解。...原创 2019-06-25 10:26:53 · 9880 阅读 · 10 评论 -
Java实现计算当前月天数
百度搜到的几乎全是复制来的,在此记录,备忘。Calendar calendar = Calendar.getInstance();//getInstance获取实例alendar.set(Calendar.MONTH, 2);//月份从0开始。set方法可设置任意时间,包括年月日时分秒System.out.println(calendar.getActualMaximum(Calendar.原创 2017-08-17 19:19:18 · 852 阅读 · 0 评论