- 博客(103)
- 收藏
- 关注
原创 @ConditionalOnProperty注解
简单来讲,总结一下,在类上添加此注解基本配置为app.name = tom配置类为@ConditionalOnProperty(prefix = "app",name="name",matchIfMissing = false)@Configurationpublic class ConfigureOne { public ConfigureOne() { System.out.println("--------构造ConfigureOne---------");
2021-06-28 19:10:18
31483
10
原创 简单聊一聊HttpMessageConverter
简单聊一聊HttpMessageConverterorg.springframework.http.converter.HttpMessageConverter技术背景问题点项目重构,表结构重构,主键从自增id换成了 雪花算法生成的id。雪花算法生成的id是19位的,但是js超过16位就会出现精度损失,导致拿到的id不准确。简单解决后端将Long类型转成String传给前端,简单粗暴,十分有效,但是不优雅,而且要伴随着多次类型转化。统一处理Spring Framework里有个类,叫Http
2021-06-12 09:20:33
311
原创 java.util.ConcurrentModificationException
相关文章:https://www.cnblogs.com/bluestorm/p/6347227.html相关文章:https://www.cnblogs.com/dolphin0520/p/3933551.html首先来看下面四段代码,平平无奇,看起来像是我们经常写的代码,但是有些就是报错了List<String> list = new ArrayList<>();list.add("aa");list.add("bb");list.add("cc");list.fo
2021-06-02 21:01:57
370
原创 重学CMS
重学CMSCMS,并发标记清除。他的垃圾回收分为4个过程初试标记(可能发生STW)并发标记重新标记(可能发生STW)并发清除CMS设计的初衷是为了达到低停顿,适用于互联网应用。但是他还远远达不到完美的程度,他还有三个缺点:1.CPU资源敏感,4核以下不建议CMS,因为他的垃圾回收线程=(核数+3)/4,如果是4核的话,会使用25%的CPU资源,如果是2核的话,要使用一半的CPU资源,这个对应用程序的影响还是比较大的。2.浮动垃圾。CMS并发清除的时候,用户线程还在运行,由于已经过了标记的阶段
2021-05-31 23:52:46
121
原创 SpringBoot优雅停机
通用做法public class GracefulShutdownListener implements TomcatConnectorCustomizer,ApplicationListener<ContextClosedEvent> { private final Logger logger = LoggerFactory.getLogger(GracefulShutdownListener.class); private volatile Connector connect
2021-05-01 08:34:03
345
1
原创 第三方接口如何设计
1.接口功能职责清晰2.接口安全,加密方式(临时凭证的方式,appid与appsecret的加密,验签)3.接口幂等(高并发时的幂等,redis分布式锁,业务上的幂等字段。)比如防止客户端重试4.接口限流,防刷(对外)5.接口约定,良好的代码规范,接口文档与请求示例与返回示例,错误码定义,版本迭代说明6.如果有可能,做接口统计分析,做应用监控与报警...
2021-04-30 14:40:02
858
原创 List对象如何判断重复数据
List对象如何判断重复数据开发中常见的场景就是前端传过List<VO>数据,我们需要根据VO对象的某个或者某几个参数特征来判断VO对象是否重复。这里给出一种个人觉得比较简介的方法,工作中我通常是这么处理的// 使用stream表达式进行分组,自定义分组的keyMap<String, List<ProductVO>> groupedProductVoMap = productVOs.stream().collect(Collectors.groupingBy(th
2021-04-16 16:39:44
6849
2
原创 ArrayList转String[],或者其他数组
String[] strings = list.toArray(new String[list.size()]);
2020-12-31 16:59:51
1405
1
原创 如何保证接口幂等性
幂等性:即多次操作,返回的结果是一致的,保持接口幂等性,才能保证数据安全,不重复,不混乱;总所周知,GET请求是天然幂等的,多次GET操作,结果是一致的。POST请求在生产型项目中也要保持幂等,比如支付时的POST请求,如果不幂等,可能会出现重新支付的情况;注册用户时的POST请求,如果不是幂等的,可能会产生重复用户。做到接口幂等,不仅仅是为了防止单个用户重复点击,在高并发的时候它的作用显得更加重要。如何做到接口幂等?0.基本要求:业务逻辑层数据状态的校验。比如支付前校验..
2020-10-14 10:32:48
1503
原创 spring-webmvc和spring-web模块的联系与区别
两者都是属于web处理框架,都是spring的spring-webmvc只依赖乐一些spring的模块,包括spring-web模块spring-web的主要依赖序列化技术protobuf,gson,hession,http工具,httpclient,okhttpnetty依赖spring框架依赖,spring-aop,spring-beans,spring-context,spring-core,spring-oxm,还有servlet依赖javax.servlet-api.
2020-09-27 11:46:11
1751
原创 SpringBoot常用拦截器(HandlerInterceptor,ClientHttpRequestInterceptor,RequestInterceptor)
SpringBoot常用拦截器(HandlerInterceptor,ClientHttpRequestInterceptor,RequestInterceptor)上面3种拦截器,都是http拦截器,在处理业务逻辑之前对http请求信息进行处理,比如获取请求头,请求参数,设置请求头,请求参数等等思路清晰,先说jar包:HandlerInterceptor—>spring-webmvc项目,org.springframework.web.servlet.HandlerInterceptor
2020-09-27 11:10:02
9757
原创 web客户端http拦截器-HandlerInterceptor基本用法
拦截器Interceptor的常用玩法是用来拦截请求,进行特殊逻辑处理基本玩法1.实现WebMvcConfigurer接口要添加@Configuration注解,然后实现其addInterceptors方法,addInterceptors的入参是InterceptorRegistry2.实现一个HandlerInterceptor接口,实现其prehandler方法3.将步骤2中实现的HandlerInterceptor接口到步骤1中的实现类中,即调用InterceptorRegistry的.
2020-09-25 17:52:02
458
转载 SpringBoot无需重启,自动加载加载class文件[热部署]
首先声明,不同的IDEA版本,不同的SpringBoot版本,热部署生效的方式不一致。(家里的IDEA最新版不用加devtools依赖,不用设置Build project automatically,不用设置Registry,只要修改完类之后,Ctrl+Shift+F9重新编译一下,修改就可以生效了。公司的IDEA,只要重新编译,就会自动重启整个模块,非常浪费时间)这里所说的热部署或者说是热启动,不是自动重启项目,而是不重启项目,修改也能生效的一种效果。这里直接奉上链接:具体步骤这里再说明一
2020-08-31 09:43:29
1507
原创 Unlink of file ‘......‘ failed. Should I try again?
在网上查了很多资料,大多的解释都是进程占用文件资源,需要关闭进程,释放资源,或者执行什么命令。但是我本地的所有java应用进程都被我关了,执行命令并没有什么卵用。当天时间紧急,于是我只能重新在另一个文件夹git clone项目,重新配置项目,其实也不简单。第二天的时候还是觉得不爽,凭什么一个git我都玩不转了。于是我想到了一个最简单粗暴的做法,删报错文件!我报错unlink 的文件只有两个,于是在IDEA里,我右键点击文件,点击delete,取消勾选safe delete,然后 报了一个
2020-08-22 10:01:20
1138
1
翻译 Failed to convert from type [java.lang.String] to type [@io.swagger.annotations.ApiParam @org.sprin
完整错误:Failed to convert from type [java.lang.String] to type [@io.swagger.annotations.ApiParam @org.springframework.web.bind.annotation.RequestParam java.util.Date如果是请求参数,请加注解:@GetMapping(value = SUMMARY_URL, produces = "application/json")public Dail.
2020-07-27 20:22:42
7565
原创 IDEA查看jar包里的内容(注释,日志等等)
有时候看日志的时候,想查一些源码信息,以便更好的理解代码的执行流程,以及debug等等。但是windows电脑直接ctrl+shift+F是不能直接搜索到源码级别的日志信息,比如,SpringBoot启动的时候,我想直接搜索:Tomcat initialized with这个日志在具体什么位置,来查看tomcat是怎么获取到端口号的,这个时候直接ctrl+shift+F是搜不到的因为ctrl+shift+F是不搜索jar包,也就是.class文件里面的内容的,解决办法其实也比较简.
2020-07-02 11:48:01
3415
原创 RSA加密、解密、签名、验签介绍
参考链接:https://www.cnblogs.com/pcheng/p/9629621.htmlRAS简介RSA加密是非对称加密,由一对秘钥进行完成加密解密,分别称为公钥和私钥,公钥加密,私钥解密,RSA可以完成加密和签名;加密与签名的区别加密是为了防止信息被泄露,签名是为了防止信息被篡改;RSA加密过程:假如B要发消息给A,首先A在本地生产一对秘钥,公钥和私钥,并将公钥发送给B,B使用公钥对消息进行加密,然后传输给A,A接收到消息后在本地使用私钥解密;...
2020-06-15 16:49:45
656
原创 MySQL查询数据库中的表数量
SELECT COUNT(*) FROM information_schema.TABLES WHERE table_schema = '数据库';
2020-06-11 09:02:25
473
1
原创 IntStream.iterate的简单使用
IntStream.iterate的简单使用注意:IntStream是jdk1.8新增的一个接口,iterate是他的一个静态实现方法(注意jdk1.8开始,接口中的default方法或者static方法可以定义方法体,而不是只能定义抽象方法了,上面的IntStream接口就是。)看他的方法介绍:Returns an infinite sequential ordered IntStream...
2020-03-18 10:53:04
4309
原创 IDEA maven环境变量失效(mac系统)
IDEA maven环境变量失效(mac系统)一、问题描述之前在~/.bash_profile里面配置了maven的环境变量之后,即使关闭电脑,关闭终端,关闭IDEA,都是可以在IDEA的终端里面使用maven命令的,但是自从去年年底前更新了操作系统,只要关闭了,maven命令就失效了,需要重新source ~/.bash_profile,才能使maven命令生效。二、原因今天终于解决了,...
2020-03-16 11:50:02
1861
2
原创 缓存一致性协议
缓存一致性协议CPU缓存的意义CPU缓存的存在是为了解决CPU和主内存之间的速度差问题,现在的一般多核CPU存在多级缓存。CPU缓存的基本单位是Cache 行,是与主内存交换的基本单位,一个Cache 行的单位是2的次幂比特,所以CPU缓存一个变量的时候会缓存这个变量周围的区域。MySQL也有这样的特性。CPU缓存示意图如下图所示:CPU缓存带来的问题设想一个场景,当2个CPU的一级缓存...
2020-03-14 08:50:16
332
原创 如何剔除eureka无效和down状态的实例
如何剔除eureka无效和down状态的实例1.在eureka server的web界面上,我们经常看见有的实例明明被我们关掉了,但是仍然展示在服务实例的列表里面,而且状态还是UP?这种情况是eureka的自我保护机制导致的。由于eureka和实例之间要进行心跳检测,但是当网络故障时,eureka server不能准确判断这个实例时存活还是死亡,于是采取的默认策略是认为其任然存活。这是e...
2020-03-05 11:39:59
3624
原创 静态内部类(Static Inner Class)和嵌套类(Static Nested Class)之间的区别?
近期看到一个po主强调静态内部类与嵌套类的区别,才开始关注起来。究竟哪种叫法更准确?在《Java编程思想》第四版这本书里,单独有一章叫:内部类。里面关于内部类的定义如下:可以将一个类的定义放在另一个类的定义内部,这就是内部类。按照这本书的章节,可以将内部类分为:成员内部类,局部内部类,匿名内部类,嵌套类。具体定义不再阐述,不是本文的细节。这篇文章的描述的比较详细:Java的几种内部类...
2019-10-21 15:16:09
569
原创 ConcurrentHashMap源码解析 java8
源码的学习是有趣的,受益颇多的,你一定能够获得惊喜。前一阶段出去面试的时候被问到ConcurrentHashMap,当时回答的时候只是泛泛而谈,谈了其特点,与jdk 1.7相比的优点等等。但是隐约感觉到面试官不太满意,后来反思了一下,是没有深入到源码层面进行功能实现的解析,导致说出来的话都没有说服力,因此研究一下,用作记录和学习。ConcurrentHashMap主要方法是put与扩容,先...
2019-10-18 13:27:56
207
原创 【马云退休】2019-9-10日记
今天是个比较特殊的日子——教师节,还有一点更特别的是:今天马云要退休了。这可能是史开先河的退休宣布,从一年前的今天就开始宣布,各大媒体甚至各个诸多人心里都时不时的惦记这件事。大家比较关心两个问题:一是什么马云退休之后干什么?二是没有了马云的阿里巴巴会怎样?其实第一点马云已经强调了很多次,退休之后想要做教育和慈善,重回老师的身份,但其实我们一直都在期待,集中注意力做教育的马云,能为中国的教育...
2019-09-10 15:48:42
470
原创 面试:Java的线程状态有哪几种?
ps:java线程状态,很基础的问题,但是却很少人能回答正确。昨天面试,被问到这个问题,按照网上的资料巴拉巴拉的讲了一遍,面试官让我回去的时候再看看源码。今天一看,果然网上70%的文章都是错的。首先说明,这里说的java线程的状态,指的是JVM的线程状态,不能反映操作系统的线程状态。所以jvm线程状态与操作系统线程状态不是一致的。Thread的内部枚举类Thread.State定义了jav...
2019-08-29 15:29:45
1071
原创 IDEA远程调试Spring Boot应用
首先说明,远程调试传统项目和Spring Boot项目是完全不同的。传统项目部署在tomcat中,远程调试时需要将tomcat设置为debug模式;Spring Boot应用是打成jar包,只需要在启动jar包的时候配置jvm参数为debug模式就行,本文只讨论Spring Boot项目。这里的debug模式是调试模式,而不是日志级别调整为debug。远程调试需要本地代码和远程服务...
2019-08-01 17:23:37
1103
原创 Spring Boot如何创建自定义starter
背景:(1)有时在公司内部有时候自研中间件,需要被其他项目依赖,这个时候直接引入starter,可以实现自动化配置,可以做到对其他项目代码无污染入侵。(2)Spring Boot大量使用了starter模式,比如spring-boot-starter-redis,spring-boot-starter-jdbc,spring-boot-starter-data-jpa,spring-boot...
2019-07-19 11:29:49
2772
2
原创 SpringBoot热部署配置(IDEA)
尽管说SpringBoot的启动速度已经很快了,但是有时候不断修改配置或者参数的时候还是需要使用到热部署(多学一招,不吃亏),这里记录一下设置三个的步骤。ps:IDEA的热部署插件不太好用。1.设置自动构建项目,选中Build project automatically,打上对勾;2.设置自动编译,快捷键:ctrl+alt+shift+/,选择Registry,然后按下面选择,最后重启ID...
2019-07-18 10:51:44
181
原创 如何获取String类型的ObjectName及其属性
问题背景:最近在做应用监控系统,使用jolokia+prometheus+grafana,其中jolokia负载直接获取JMX端点信息。一、通过java.lang.management.ManagementFactory类获取java.lang.management.ManagementFactory的成员变量是各种MXBean,我们可以直接获取起ObjectName,如下图:/** ...
2019-06-18 13:47:48
1474
原创 Grafana使用QQ邮箱报警
在grafana.ini的相关配置如下:enabled = truehost = smtp.qq.com:25user = 863163738@qq.compassword = pikbxxxxxxxxxxxfrom_address = 863163738@qq.comfrom_name = Grafana注意:.ini文件 ; 表示注释QQ邮箱的host是:smtp....
2019-06-10 22:40:43
3005
原创 Load balancer does not have available server for client
背景:使用Feign配置Hystrix模拟服务降级,fallback已配置好,服务提供方已关闭,但是调用时报了这个错解决办法,添加如下配置:feign.hystrix.enabled=true重启服务,ok,降级验证成功。原因:Feign默认是未配置hystrix的,即feign.hystrix.enabled默认为false,所以就直接返回标题中的错误信息,我们需要配置h...
2019-06-05 16:47:30
2555
原创 application.properties配置失效
解决办法:将pom文件中的<packaging>pom</packaging>换成<packaging>jar</packaging>原因是不小心在子模块中加入了一个module,虽然后来将module移除掉了,但是由于加入module的时候会自动将此项目打包方式由jar变成pom,然后添加modules标签,导致以po...
2019-06-04 14:02:06
4104
1
原创 logback配置Druid Filter
现在大多数Druid配置都是log4j作为logger,但是logback作为新一代的日志框架,我们有理由使用logback配置Druid Filter,之前的配置是:dataSourceA.filters=stat,wall,log4jDruid支持配置多种Filter,配置信息保存在druid-xxx.jar!/META-INF/druid-filter.properties下面,具体如...
2019-05-30 20:09:37
7813
2
原创 No appenders could be found for logger (com.alibaba.druid.filter.FilterManager).
背景:SpringBoot项目整合Druid,日志框架准备从log4j换到logback,项目启动过程中出现如下报错:`log4j:WARN No appenders could be found for logger (com.alibaba.druid.pool.DruidDataSource).log4j:WARN Please initialize the log4j system...
2019-05-30 20:02:32
13072
2
原创 Class path contains multiple SLF4J bindings.
在把项目的log4j框架更换logback的过程后,运行项目出现了如下提示:SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:.../repository/ch/qos/logback/logback-classic/1.1.7/logback-classic-1.1.7...
2019-05-30 19:27:08
13351
原创 logback.xml模版文件,配置文件
logback.xml模版文件,配置文件在SpringBoot以及SpringCloud项目中,更推荐使用logback-spring.xml这种命名方式,因为使用logback.xml可能会导致一些application.properties配置一些logging.file等配置失效出现LOG_FILE_IS_UNDEFINED的错误,而且使用logback-spring.xml不能使用log...
2019-05-30 17:36:33
646
原创 SpringBoot项目部署相关普及
SpringBoot项目部署相关普及现在的SpringBoot项目多采用maven复合工程的结构进行搭建,当我们需要在本地打包的时候执行mvn clean package就可以在各个子模块的target目录生成jar包(不管此子模块有无main方法,都会生成jar包);执行mvn clean install的时候就可以将jar包部署到本地的maven仓库;执行mvn clean deploy就可...
2019-05-28 16:24:49
168
原创 SpringBoot程序,jar包后台运行
SpringBoot程序,jar包后台运行通常让jar后台运行有以下几种方式,本文主要通过IDEA实现,后续再补充:制作jar包通常通过mvn clean package命令实现,在target目录下会有jar包。使用命令行工具让其后台运行nohup java -jar xxx.jar &使用docker运行新建Dockerfile文件,制作自己的镜...
2019-05-21 11:09:43
4168
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅