
SpringBoot2启示录
大狼狗启示录,与SpringBoot2、SpringCloud2相关的,例如eureka/zuul/jpa/mybatis plus/feign/websocket/jms/poi/redis/udp等等。
Moshow郑锴
Powered by Core iMoshow
-
原创 spring:Failed to convert property value of type ‘java.lang.String‘ to required type ‘java.util.Date‘
springboot有接口日期转换的经典问题,给Entity加`@JsonFormat`解决了输出`json日期格式的输入输出`问题,但是解决不了非@RequestBody/也就是`普通表单`提交的日期格式问题,这个时候就需要加`@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)`2021-01-03 23:50:09269
0
-
原创 JAVA计算两个日期相差多少天
前言有时候我们在JAVA中会比较两个日期相差多少天,这里有几个实现方法供大家参考,偶尔会用到,也当做自己收藏。btw,同时也要鄙视一下我的好基友从百度搜到的一个答案的作者,写了毒代码,计算个日期而已,竟然要遍历两个日期的time。解决方案有使用Calendar的,也有使用Date的,都ok。但是基本都是去获取Time进行计算。Calendar也可以换成LocalCalendar等等的。 /** * JAVA计算两个日期相差多少天(by date) * @author zhengk2020-12-31 01:02:02255
2
-
原创 SpingBoot/JAVA实现给图片加水印功能(通过thumbnailator库)
前言最近某项目有个加水印的需求,JAVA实现给已上传的图片增加水印并输出的功能,图片A+水印B=合成带水印缓存图片C(就是不需要保存到硬盘,不占用空间),目前网上的解决方案挺多但是挺乱,于是趁机整理了一份简洁版供大家使用。这里借助了一个很强大的Thumbnails库 。图片A水印B效果图CMAVEN<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator --><!-- https://githu2020-12-29 01:08:12207
0
-
原创 JAVA压缩/解压ZIP/7Z文件(by Apache Commons Compress)
前言目前手中有个项目,需要做到用户打包图片上传处理的逻辑,这个时候,就需要用到一个JAVA的压缩/解压库Apache Commons Compress 。从压缩文件中逐个读取文件(废话,肯定从里面读啦)。读取文件的文件名进行业务逻辑判断(文件名跟业务编号有关)。上传之后返回一个信息说哪些成功、哪些失败、哪些异常或没有权限。WHats Apache Commons Compress?Apache Commons Compress,Compress是ApacheCommons提供压缩、解压缩文件2020-12-19 22:53:087194
13
-
原创 比BeanCopy好用的BeanMerge(java合并对象属性,把非空属性合成到目标对象上)
前言之前有个解决方案是关于beanUtil.Copy之后,还需要处理才能使两个对象合并,今天偶尔发现还有更好用的分发,所以特此share一下。这是一个BeanUtil.Merge方法,JAVA合并对象属性,把对象的非空属性合成到目标对象上。作为对之前文章《BeanUtils.copyProperties忽略null值/只拷贝非null属性》的完善和提升解决方案BeanUtil源码,。if(defaultValue!=null && !"".equals(defaultValue))可2020-12-19 18:41:51356
1
-
原创 mybatisplus解除分页限制
前言如果你的mybatisplus的分页受到限制,例如每次只能查询500条或者1000条,不用担心,马上解除限制吧。解决方案在MybatisPlusConfig中配置paginationInterceptor.setLimit(-1); 代表分页不受任何限制,当然如果对系统性能有限制,建议选择一个合理值,例如1w等。package com.softdev.system.config;import com.baomidou.mybatisplus.extension.plugins.Paginat2020-11-25 23:34:16826
0
-
原创 springboot2集成ehcache缓存(纯Java的进程内缓存框架)
springboot2+ehcache集成攻略与教程,,,先来看看ehcache缓存与redis缓存的区别----- ehcache直接在`jvm虚拟机`/`java进程`中缓存,可以理解为缓存在内存中,速度快,效率高;但是缓存`共享麻烦`,集群分布式应用不方便。可以直接`单独使用`,集成于项目内或者第三方库,多用于`内部缓存` ,或者一般没有微服务的单实例小项目。 - redis是通过`socket`访问到缓存服务,效率比ecache低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。。。2020-10-24 08:48:291867
0
-
原创 SpringBoot集成EasyPOI实现excel导入导出功能
SpringBoot可以快速使用EasyPOI进行便捷的导入导出,这里是一份简单的教程,包含导入和导出部分。一段controller代码+一个@Excel实体类注解,轻松实现excel导入导入。2020-10-12 17:36:511888
0
-
原创 maven报错:不再支持源选项 5。请使用 6 或更高版本。
在构建某个maven项目的时候发生了异常,遇到以下错误,理论上是由于没有指定JAVA版本导致的。- [ERROR] 不再支持源选项 5。请使用 6 或更高版本。。。- [ERROR] 不再支持目标选项 1.5。请使用 1.6 或更高版本。。。解决方案如下:2018-08-02 23:09:5641209
29
-
原创 ehcache:Null key returned for cache operation问题解决方法
前言今天一个上线许久的系统突然无法新增证书,但是不是所有都不允许新增,只是编号重复的无法新增。从逻辑上想,我是设置了编号重复判断,但是该业务判断逻辑未生效,从缓存上将,会不会是id=null导致的问题。报错详情:java.lang.IllegalArgumentException: Null key returned for cache operation (maybe you are using named params on classes without debug info?) Builder2020-09-26 00:16:09620
0
-
原创 Java获取小程序带参二维码并保存到本地
Java/SpringBoot下载并保存带参数的小程序二维码,用户直接扫描带参二维码就进入小程序,自动根据参数完成部分业务。这个时候就需要用到微信小程序提供的二维码接口 `wxacode.getUnlimited` 。网上介绍的很多方法有些过时了,有些不科学,调用起来不方便,所以自己也总结了一份出来。虽然很久之前直接用`jfinal+jfinal-wx`写的,几句代码就搞定了,但是最近需要迁移项目到`SpringBoot2`,所以就踩了个坑顺便总结一下,确实找了大半天。2020-07-25 23:06:50666
2
-
原创 Only no-arg methods may be annotated with @Scheduled报错
问题背景今天在弄一个手工爬虫框架的时候,由于有个功能如下:在列表界面点击抓取,进行手工抓取后台根据application.yml设置的定时任务自动触发抓取任务 /** * 广东省政府采购中心 */ @PostMapping("/fetchCGZX") @Scheduled(cron="${scheduler.fetch}") public ReturnT fetchCGZX(boolean manual){ if(!manual2020-07-04 11:00:461158
0
-
原创 springboot+layui集成jwt改造知识要点
前言最近有个项目用到jwt,jwt相比session的好处就是无状态stateless化,简单的讲,掉线或者网络波动不会导致重新登录,只要JWT有效即可继续请求。#后端框架:SpringBoot+Freemarker+LayUI#开源项目:SpringBootCMS(https://github.com/moshowgame/SpringBootCMS)#SpringBoot+SpringSecurity+JWT搭建手册:SpringBoot2+SpringSecurity整合JWT,前后端分离的2020-06-03 22:15:513232
2
-
原创 maven设置阿里云镜像加速
在国内用mvn的中央仓库太慢了,如果想加速的话,可以切换到阿里云maven镜像库在POM.xml里面定义阿里云maven&amp;lt;repositories&amp;gt; &amp;lt;repository&amp;gt; &amp;lt;id&amp;gt;alimaven&amp;lt;/id&amp;gt;2018-04-12 13:54:121786
0
-
原创 freemarker数字显示问题(超过1000会加逗号分隔)
前言freemarker在数字回显时,如果数字超过999,会自动用 , 分割开,例如 2020 变成了 2,020,然而,此时传递到后台的时候,并不会按照int/long处理,而是当作String字符串处理,所有会报类型不匹配的异常。<input type="hidden" name="userId" value="${(user.userId)!number}" class="layu...2020-03-16 00:39:581432
0
-
原创 springcloud之Hystrix熔断器
雪崩效应在分布式系统中,各个服务相互调用相互依赖,如果某个服务挂了,很可能导致其他调用它的一连串服务也挂掉或者在不断等待中耗尽服务器资源,这种现象称之为服务器雪崩效应;熔断机制未来防止系统雪崩,熔断机制必不可少,就是当一个服务挂掉后,调用它的服务能快速熔断,不再耗费资源,快速失败并提供回退方案;HystrixHystrix是spring cloud全家桶的Circuit Breaker熔...2020-01-14 11:15:55876
0
-
原创 动态获取tomcat启动端口,控制台打印项目访问地址
前言正常我们输出项目的访问地址,都是通过在@SpringBootApplication的启动类中增加一个log.info来输出项目地址.感谢网友@Gao Hang Hang 则为我们带来一个动态获取tomcat端口的改造.非常有意思,所以share一下.原始方法package com.softdev.system.generator;import lombok.extern.slf4j....2019-12-30 10:26:29912
0
-
原创 Spring Boot2+JPA之悲观锁和乐观锁实战
什么时候用悲观锁或者乐观锁: 1. `悲观锁`适合`写多读少`的场景。因为在使用的时候该线程会独占这个资源,就适合用悲观锁,否则用户只是浏览文章的话,用悲观锁就会经常加锁,增加了加锁解锁的资源消耗。2.`乐观锁`适合`写少读多`的场景。由于乐观锁在发生冲突的时候会回滚或者重试,如果写的请求量很大的话,就经常发生冲突,结合事务会有经常的回滚和重试,这样对系统资源消耗也是非常大。2019-11-15 16:13:151962
3
-
原创 探索StringUtils3之StringUtils.isEmpty()和StringUtils.isBlank()的区别
StringUtils中有很多方法,常用的也许你除了isEmpty/isNotEmpty/isNotBlank/isBlank外,并不知道还有`isAnyEmpty/isNoneEmpty/isAnyBlank/isNoneBlank`的存在, come on ,让我们一起来探索`org.apache.commons.lang3.StringUtils;`这个工具类.#isEmpty系列#isBank系列#其他方法2019-11-05 15:02:02716
0
-
原创 springboot junit Unit-Testing(via spring-boot-starter-test)
Spring Boot默认提供了一系列`实用工具`和`Annotation注释`来帮助您测试应用,可以用来做`单元测试Unit Testing`。大多数开发人员使用`spring-boot-starter-test`的 Starter 模块,它导入Spring Boot测试模块以及JUnit,AssertJ,Hamcrest和许多其他有用的库。2019-08-14 18:36:101290
3
-
原创 SpringBootApplication是如何启动Tomcat的? | 破解SpringBoot Tomcat启动之谜 !
我们都知道,SpringBoot内置了容器Tomcat,可以直接启动WebServletServer,那么SpringBoot是如何启动Tomcat的?本文从Main方法入手,从SpringApplication.run跟到ServletWebServerApplicationContext 再到TomcatServletWebServerFactory,破解SpringBoot Tomcat启动之谜 !!!2019-08-14 11:58:331730
2
-
原创 ElasticSearch Sharing | ES入门分享(spring-boot-starter-ElasticSearch+ElasticStack/ELK)
本周Regular Meeting上Sharing的一个ElasticSearch入门教程,PPT版本,包含es入门基础+通过springboot-stater使用es+ElasticStack/ELK日志收集分析系统。。。走过路过不错过。2019-08-14 09:58:25544
1
-
原创 基于ELK打造强大的日志收集分析系统(springboot2+logback+logstash+elasticsearch+kibana)
上一代的日志分析系统springboot+log4j+flume+kafka仿佛还是昨天,现在已经流行起了新一代的springboot2+logback+logstash+elasticsearch的日志分析系统,借助es强大的生态圈以及全文搜索能力,实现日志收集/分析/检索不再是难事。日志收集分为两种情况:logback直接输出到logstash,通过Tcp/Socket等传输(网络...2019-08-10 19:14:554462
2
-
原创 Docker Sharing | Docker入门分享
团队内部的一次Docker sharing,适合新手入门,包括Docker介绍,Kubernetes介绍,三剑客之Docker-Compose使用+Maven build插件+微服务集成配置,DevOps等内容,如有缺漏欢迎补充。...2019-08-06 16:47:45468
0
-
原创 springboot2整合drools规则引擎(kie-spring+drools-core)
Drools是一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,特点就是速度快、效率高。 如果你还在使用复杂的`JAVA代码`校验复杂的`优惠券/超市打折/计价规则/商品定价/阶梯定价/游戏规则/业务规则`?试试用Drools来解救代码吧,适用但不仅仅包含以上场景。2019-08-01 15:52:304714
1
-
原创 springboot2 webfux 响应式编程(Mono/Flux/Backpressure)
搞懂webflux和reactive,首先要搞懂以下问题:1. 关于Reactive Streams、Srping Reactor 和 Spring WebFlux之间的关系?2. 反应式编程思想是什么?Backpressure背压又是什么?3. 既然Webflux不是基于Servlet,那么Spring Security等基于Servlet的组件可以用吗?4. 如何更好的理解Mono和Flux?5. spring官方如何reactive化?6. 如何控制Backpressure?2019-07-29 11:55:553255
0
-
原创 SpringBoot2FileUpload(SpringBoot2官方文件上传下载DEMO)
前言FileUpload文件上传是开发中经常遇到的事,通常都是网上copy一段代码来上传,可是你的代码足够完善吗,可以应对日益增长的文件需求吗,可以同时当上传和下载服务器吗,今天让我们来跟着Spring官方的Uploading Files教程进行优化和改造文件上传服务器(适应于少量文件上传,量大请使用DFS)。项目结构核心代码如下:StorageControllerStorageSer...2019-07-24 17:55:382099
2
-
原创 SpringBoot2整合ElasticSearch(包含ElasticSearch入门+spring-boot-starter-data-elasticsearch)
作为互联网热点知识的ElasticSearch,怎能不学。如果你有空余时间,欢迎入门;如果你没空余时间,也欢迎走马观花看一眼。走过如果不要错过,这是一篇自我感觉相对对入门者来说比较全面的文章了,希望对大家有帮助,有什么疑问或者建议欢迎留言讨论。2019-07-22 18:19:304643
8
-
原创 SpringBoot2+SpringSecurity整合JWT,前后端分离的API权限认证框架搭建手册
前言之前又用到JWT,但是基本都是别人搭建,直接使用,有什么可以优化的,也不知道,所以还是要自己实践一遍,实践才能出真理。也看到很多整合的文章,有些说的细致但是版本太旧了,有些说的不够详细,而且细节也挺多的,纸上得来终觉浅,绝知此事要躬行,所以自己动手实践了一下。本文应该有很多中叫法的,可以叫:springboot + spring security + jwt 实现api权限控制基于S...2019-07-19 15:00:3317403
22
-
原创 SpringSecurity之SecurityContext和Authentication对象
下面开始讨论几个 Spring Security 里面的核心对象。org.springframework.security.core.context.SecurityContext接口表示的是当前应用的安全上下文。通过此接口可以获取和设置当前的认证对象。org.springframework.security.core.Authentication接口用来表示此认证对象。通过认证对象的方法可...2019-07-17 11:57:162383
0
-
原创 SpringSecurity之自定义认证
Why SpringSecurity?在 Web 应用开发中,安全一直是非常重要的一个方面。安全虽然属于应用的非功能性需求,但是应该在应用开发的初期就考虑进来。如果在应用开发的后期才考虑安全的问题,就可能陷入一个两难的境地:一方面,应用存在严重的安全漏洞,无法满足用户的要求,并可能造成用户的隐私数据被攻击者窃取;另一方面,应用的基本架构已经确定,要修复安全漏洞,可能需要对系统的架构做出比较重大的...2019-07-17 11:45:54432
0
-
原创 SpringBoot2+Netty+WebSocket(netty实现websocket,支持URL参数)
关于NettyNetty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。MAVEN依赖 <dependencies> <!-- https://mvnrepository.com/artifact/io.netty/netty-all --> <dependency> <g...2019-06-12 16:20:1146347
59
-
原创 MyBatis之DynamicSQL(动态SQL,if,choose,when,otherwise,trim,where,set,foreach,bind)
中文翻译1.if通常在where语句后面需要做一些单一的判断,如果要判断传进来的值是否为空,只需要判断object!=null,如果是判断一个对象的某个值是否为空,需要判断object!=null and object.attribute!=null<!-- by zhengkai.blog.csdn.net !--><select id="findActiveBlogL...2019-06-06 10:24:24332
0
-
原创 MyBatis中的#{}和${}的区别(参数替换和字符串替换)
中文翻译Parameters部分:Parameters参数是MyBatis中非常强大的元素,正常来说90%以上的情况你要用的,都应该是#{}。1.parameter mapping,命名参数映射。如果你传入的参数是一个对象(指复杂对象,非Integer或者String这些简单的),用paramterType="object"的情况,可以直接用#{attribute}取值。<!--by...2019-06-05 09:53:083237
0
-
原创 mybatis-plus配置控制台打印完整带参数SQL语句
问题背景通常我们开发的时候,需要联合控制台和Navicat/PLSQL等工具进行语句的拼接检查,如果只是输出了一堆???,那么将极大降低我们的效率。因此我们需要输出完整的SQL语句以便调试。解决方案如果是application.yml#mybatis-plus配置控制台打印完整带参数SQL语句mybatis-plus: configuration: log-impl: org...2019-05-28 16:18:5352124
28
-
原创 HttpClient4.3请求超时设置
问题背景最近调平安好医生的接口,发现E3系统超时,导致整个导入任务出于卡死状态,所以需要进行超时改造,这里发现了一个版本的大坑。HttpClient 4.3版本的API变化很大,我们不能去评论说合不合理,只能说改为Closeable也是一件好事,适应一下就可以了。3.X版本(<4.3)的超时设置HttpClient httpClient=newDefaultHttpClient();...2019-04-02 10:16:511004
0
-
原创 SpringBoot之文件上传与下载
前言利用springboot2,我们可以很方便的弄上传和下载,今天刚刚好有个功能模块用到,所以share一下这个功能。Controller控制器控制器方面,只需要一个封装返回类(例如我用的ApiReturnUtil.success()/Reselt.ok()等,自行封装即可)、配置类(配置一下上传的路径以及映射出去的文件路径)、控制器主类(包含上传和下载的方法)即可。@RestContr...2019-03-19 23:04:502509
0
-
原创 MyBatisPlus设置忽略映射字段/非数据库字段@TableField(exist = false)
问题背景最近用MyBatisPlus的时候遇到一个问题,MyBatisPlus怎么忽略映射字段,就是怎么设置一个字段不为数据库字段但又是映射必须的。不忽略映射字段吧,又会报错。Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ‘*...2019-03-17 12:03:1710470
0
-
原创 JPA中id前面有空格导致的"Column 'id' not found"问题
问题背景昨晚有个同事发生了一个神奇的问题,一如既往的问题,一如既然的用我写的BEJSON-JAVA代码生成器生成,却发现一直提示Column ‘id’ not found。这就很TM神奇了2018-12-29 11:06:19.574 WARN 332172 --- [nio-7778-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : SQ...2018-12-29 11:27:173549
0
-
原创 springcloud之Feign超时问题(Read timed out executing POST http://***)
问题背景最近公司项目有个功能需进行三层Feign调用,且还要调外部接口,延迟挺大,造成Feign一直提示Read timed out executing POST。feign.RetryableException: Read timed out executing POST http://****** at feign.FeignException.errorExecuting...2019-03-13 11:56:2734298
8