java
文章平均质量分 63
愤怒的苹果ext
本人擅长Ai、Fw、Fl、Br、Ae、Pr、Id、Ps等软件的安装与卸载,精通CSS、JavaScript、PHP、ASP、C、C++、C#、Java、Ruby、Perl、Lisp、python、Objective-C、ActionScript、Pascal等单词的拼写,熟悉Windows、Linux、Mac、Android、IOS、WP8等系统的开关机.
展开
-
阿里云效制品仓库踩坑日记
【代码】阿里云效制品仓库踩坑日记。distributionManagement Access denied 阿里云效 私服 制品仓库原创 2024-08-02 19:00:00 · 122 阅读 · 0 评论 -
对象转为Map
与Jackson的结果不同是因为我属性用了 @JsonIgnore 注解。原创 2024-05-30 18:45:00 · 390 阅读 · 0 评论 -
@DateTimeFormat与@JsonFormat不完全解析
一直以来对与比较模糊,容易搞忘,今天就做个笔记,由于不设计原理,源码所以是不完全解析,有时间再看下源码。如果时间急的,可以不看验证过程,直接看结论。原创 2023-06-21 21:30:00 · 1575 阅读 · 0 评论 -
Spring MVC(Boot) Servlet 3.0异步处理,DeferredResult和Callable(续篇)
我直接在我创建线程池的地方增加了一个BeanName。只要有对于的配置,就可以初始化线程池了,可以看出。这块是Spring Boot自动装配的代码。,还真的有自动配置异步的方法。的对象,那就能自动配置异步处理的线程池了。框架自动配置了,那异步可以自动配置吗?是自动配置线程池的配置类。只要有Bean的名称是。在约定配置这块很智能。原创 2023-04-17 20:00:00 · 763 阅读 · 1 评论 -
Jackson 转为List对象
JSON数据和实体的字段结构不一致导致的。我是因为city字段是数组,而实体写成了对象才报这个错。出现在内部类中,类上要加。原创 2023-03-13 08:30:00 · 1914 阅读 · 0 评论 -
javacv 切割视频
增加int imageWidth, int imageHeight,参数。原创 2023-03-05 14:41:11 · 1462 阅读 · 2 评论 -
CompletableFuture的基本用法
是Java8新增的一个功能十分强大的工具类,它一方面实现了Future接口,另一方面也实现了接口,接口多达40中方法,为我们函数式编程流式调用提供支持。相较于FutureTask来做多任务更简洁了。原创 2022-11-28 12:39:52 · 280 阅读 · 0 评论 -
手写精简版动态线程池
项目启动后,我们可能需要增加线程数或缩小线程数。一般情况下,需要重启服务才会生效。本篇文章介绍一种修改线程池后不用重启服务的办法。当然这也归功于JUC工具包自身的强大。原创 2022-10-10 09:25:01 · 735 阅读 · 0 评论 -
重启服务后Redisson队列一直阻塞 不消费过期数据
用做了个延迟队列,但是我重启之后居然不消费到期的数据了,非要我再往队列新增一条才开始消费。一直阻塞状态。原创 2022-08-30 09:08:47 · 2606 阅读 · 13 评论 -
Spring Security loadUserByUsername传递多个参数
我们使用Spring Security做登录,一般来说都要实现接口,代码如下。}是的,方法仅有一个username参数,如果我们是做SaaS平台,多渠道登录,名称允许重复的话,这可怎么玩儿。下面提供2种方法。新建,其实是把代码抄下来,修改了和。把的details属性作为扩展参数传入新的方法。...原创 2022-08-16 13:24:36 · 4489 阅读 · 0 评论 -
网站使用谷歌登录 oauth java nuxt auth
最近做谷歌快捷登录,走了比较多弯路,这里做个记录,希望对后面的人有所帮助。原创 2022-08-11 13:40:28 · 937 阅读 · 0 评论 -
ma.glasnost.orika.MappingException:No converter registered for conversion from Date to LocalDateTime
ma.glasnost.orika.MappingException: No converter registered for conversion from Date to LocalDateTimeDate 转 LocalDateTime原创 2022-06-27 16:42:47 · 1988 阅读 · 0 评论 -
class file has wrong version 55.0, should be 52.0
目录前言分析确认Jar的主版本解决方案前言今早更新代码,准备编译启动启动时,项目报class file has wrong version 55.0, should be 52.0异常,如下图所示。分析错误提示:类文件有错误的版本 55.0,应该是 52.0。这里的55和52是主版本(Major Version),主版本(Major Version)和JDK版本的对应关系如下表所示。主版本(Major Version)对应JDK版本52JDK 853JDK原创 2022-05-23 14:12:20 · 10687 阅读 · 5 评论 -
kubernetes(k8s) ConfigMap实战
目录前言实战从本地文件创建ConfigMap程序镜像Deployment配置文件运行程序查看配置文件修改配置小结前言ConfigMap将配置和容器分离,容器外挂配置,当有变更时,改动ConfigMap,便可以全局生效。相当于一个配置中心的角色。下面我将以一个简单的Java应用为例,部署运行。利用ConfigMap把配置外挂进来。看下会有什么效果。实战从本地文件创建ConfigMap创建ConfigMap的方式,推荐从本地文件创建而不是直接命令,这样好维护些。我们先建立applic原创 2022-05-17 17:44:31 · 1711 阅读 · 0 评论 -
Spring自定义注解驱动开发使用及源码分析
目录前言注解驱动开发使用前言在我们实际开发中,你是不是也经常使用各种@Enablexxx(如@EnableAspectJAutoProxy、@EnableTransactionManagement)之类的注解呢?只要使用了它,某个功能(组件)就应用上了。为我们提供了很多便利。下面我们就从自己写一个Enable注解开始,一步步揭开注解驱动开发背后真相。注解驱动开发使用...原创 2022-04-21 16:23:00 · 518 阅读 · 0 评论 -
Spring AOP源码解析(二)
目录前言初始化对象执行postProcessBeforeInitialization 回调,有可能返回代理对象寻找合适的Advisor创建代理执行方法得到执行链chain执行增强proceed执行ExposeInvocationInterceptor增强执行MethodBeforeAdviceInterceptor增强执行被代理类的业务逻辑小结前言接上文Spring AOP源码解析(一),本文我们来看Spring是如何创建代理和执行增强功能的。初始化对象无论是创建普通对象还是代理类Abstra原创 2022-04-18 16:24:24 · 1405 阅读 · 0 评论 -
eclipse代码没有提示
eclipse没有代码提示原创 2022-04-13 14:50:06 · 5399 阅读 · 2 评论 -
ForkJoin的使用
目录前言前言ForkJoin是JDK1.7加入的多线程并行处理框架。ForkJoin使用`分而治之`的思想,把一个大任务拆分成一个个小任务,然后再聚合,得到最终结果。这有点像Hadoop中的MapReduce。还支持工作窃取。原创 2022-04-12 16:07:56 · 2611 阅读 · 0 评论 -
高并发场景下请求合并(批量)
目录前言技术手段代码实现查询用户的代码合并请求的实现控制层调用模拟高并发查询的代码测试效果要注意的问题使用队列的超时解决Java 8 的 CompletableFuture 并没有 timeout 机制核心代码小结代码地址参考前言请求合并到底有什么意义呢?我们来看下图。假设我们3个用户(用户id分别是1、2、3),现在他们都有查询自己的基本信息,请求到服务器,服务器端请求数据库,发出3次请求。我们都知道数据库连接资源是相当宝贵的,那么我们怎么尽可能节省连接资源呢?这里把数据库换成被调用的远程原创 2022-04-11 10:53:21 · 3395 阅读 · 0 评论 -
Spring MVC(Boot) Servlet 3.0异步处理,DeferredResult和Callable
目录简介使用DeferredResultCallable小结参考简介自Servlet 3.0支持异步处理,有什么妙用呢?以Tomcat为例,我们可以使用更少的Tomcat线程处理更多的任务。当有一个请求到达时,我们用另一个用户线程去处理任务,使Tomcat容器线程得以空闲,可以去为其他请求服务。Spring几乎作为Java EE开发的必备框架,在这块也是有支持的。我们看下官方文档:https://docs.spring.io/spring-framework/docs/5.2.19.RELEAS原创 2022-03-20 11:04:10 · 2042 阅读 · 0 评论 -
Transaction rolled back because it has been marked as rollback-only
目录背景问题分析解决方案背景业务要求即使内层代码有报错,也要执行外层代码,保存数据,代码案例如下所示。// TestServiceImpl: @Override @Transactional(rollbackFor = Exception.class) public void testInsert() { Users entity = new Users(); entity.setName("张三啊"); usersMappe原创 2022-03-17 21:48:13 · 919 阅读 · 0 评论 -
java 8支持同一个属性多次使用相同注解
背景一般情况下同一个注解在一个属性上使用,编译都过不了,如下图所示。解决方案新建一个注解import java.lang.annotation.*;@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Annotations { ConditionalValidateField[] value();}引用刚才的注解@Repeatabl原创 2022-03-16 22:06:10 · 1551 阅读 · 0 评论 -
使用Redis zset做消息队列
目录背景实现思路结语和代码背景按理来说,Redis做消息队列应该使用Stream。没错,但那是5.0及以上的功能,奈何公司用的是3.2.9的,没法用Stream。PubSub的消息又不持久化,所以选择了zset,这个利用score特性还能做到延迟队列的效果。实现思路1、有一个线程不断轮询到时间的队列。要注意空轮询的问题。... 省略... while (!Thread.interrupted() && !destroyFlag) {... 省略...}…省略…原创 2022-03-13 22:43:04 · 2282 阅读 · 0 评论 -
多字段关联校验
目录背景代码实现最终效果结语背景我们用了Spring框架后,在校验前端参数的时候,一般会使用@NotNull、@NotBlank等注解,这样就不用写业务代码,判断这个字段了,省力,又简洁优雅,对真实业务处理的代码无侵入。但是多个字段关联的业务就比较麻烦,比如下列场景。public class TestValidate { /** * 姓名 **/ @NotBlank(message = "姓名必填") private String name;原创 2022-03-13 14:45:57 · 1212 阅读 · 0 评论 -
java.lang.NoSuchMethodError: org.springframework.core.CollectionFactory.createLinkedMapIfPossible(I)
java.lang.NoSuchMethodError: org.springframework.core.CollectionFactory.createLinkedMapIfPossible(I)Ljava/util/Map;原创 2022-03-09 10:19:52 · 2527 阅读 · 0 评论 -
deploy上传到私服配置注意事项(踩坑经验)
<!-- 要将源码放上去,需要加入这个插件 --> <plugin> <artifactId>maven-source-plugin</artifactId> <version>3.0.0</version> <configuration> <attach&g.原创 2022-02-17 09:47:27 · 2542 阅读 · 0 评论 -
cglib获取不到接口注解
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface HbServerName { /** * 服务名称 * **/ String value() default ""; /*** * 地址前缀 * */ String serverUrlPrefix() default "";}...原创 2022-02-15 10:22:58 · 457 阅读 · 0 评论 -
deploy发布的jar包中文乱码
背景使用mvn clean package deploy -DskipTests发布的jar包。源码显示正常打包时出现Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!返回异常解决方案pom.xml加入<encoding>utf-8</encoding> <plugin>原创 2022-02-14 18:24:32 · 502 阅读 · 0 评论 -
Spring Boot 事务回滚不成功可能原因
是否使用EnableTransactionManagement注解被调用的方法是否直接(注解方式间接的方法不行哦)使用注解(Transactional,注意Transactional注解默认只能拦截RuntimeException和Error,源码在DefaultTransactionAttribute#DefaultTransactionAttribute)事务或者方法内部编程式事务使用Transactional注解方法内不要捕获异常,即使需要捕获,也必须再抛出。检查数据库是否是支持事务的引擎(今天原创 2022-02-13 18:26:39 · 1668 阅读 · 2 评论 -
解决Redis java.lang.IllegalStateException: Cannot connect, Event executor group is terminated
目录问题产生背景问题分析解决方案问题产生背景写了个zset的队列(因为公司redis还是3.2.9的,没法用stream),然后有个线程一直轮询取数。然后我关闭应用时可能会报Cannot connect, Event executor group is terminated,如下所示。 Exception in thread "loop-redis-queue" java.lang.IllegalStateException: Cannot connect, Event execut原创 2022-02-13 14:29:21 · 11215 阅读 · 0 评论 -
The request was rejected because the URL contained a potentially malicious String “//“
报错详情org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentially malicious String “//”at org.springframework.security.web.firewall.StrictHttpFirewall.rejectedBlacklistedUrls(StrictH原创 2022-02-07 19:19:15 · 4553 阅读 · 5 评论 -
Lock wait timeout exceeded; try restarting transaction 更新数据量范围太大,导致锁表惨案
目录背景反思背景应产品需求,每日统计数据要重新刷一遍,于是用代码写了个接口,代码如下所示。谁知在执行这段代码时,刚好其他地方来了个修改的操作,我模拟了一下,如下图所示。因为我代码是加过事务的,此时还没执行完,没有提交事务,如果上面SQL和我的代码操作是同一条数据(因为有加索引,严格意义来说还不算表锁,所以操作同一条数据有问题),极有可能发生锁超时Lock wait timeout exceeded; try restarting transaction,如下图所示。反思尽量避免长事务原创 2021-12-10 11:09:24 · 658 阅读 · 0 评论 -
使用Arthas实现热更新
目录背景实操启动自己的程序下载和启动Arthasjad反编译文件修改java文件重新进入Arthas命令行拿到classLoader的Hash值mc命令编译java文件加载字节码到内存查看效果参考背景早些时候听说Arthas能实现热更新,便想尝试一下,以后正式环境需要热更新也能轻车熟路,丝毫不慌,这里做个记录。系统我用的是Ubuntu。实操启动自己的程序这个程序就一个接口,请求后如下所示。下载和启动Arthas下载 curl -O https://arthas.aliyun原创 2021-11-25 15:52:06 · 1169 阅读 · 1 评论 -
使用Kubernetes(k8s)+ Docker运行Java服务
目录前言单个Jar的应用复杂目录结构的应用总结前言前面写下了几乎最简搭建本地kubernetes(k8s)环境,环境是搭建好了,但并不算真正应用上。本篇以运行Java服务为例把k8s真正用起来。首先,要让k8s运行我们的java服务,java服务必须要做成一个镜像(image)。面对只有一个jar包的应用,写个Dockerfile就搞定了;不过,面对复杂的目录结构应用,我用Dockerfile始终有问题,索性用centos作为基础镜像自己自定义一个镜像。下面就会讲到这两种方式。单个Jar的应用原创 2021-10-31 13:57:49 · 3509 阅读 · 0 评论 -
mybatis pagehelper自定义count语句
背景数据库里有120W的操作日志数据,已经查询不出来了。在count语句的时候就卡住了。最开始语句如下所示。SELECT count(0) FROM xxx_log后面我想着加个索引会快些,所以加了order by oper_id desc 。也增加了/*keep orderby*/ (为啥要加这个,请看mybatis pagehelper count order by 不生效),sql如下所示。select count(0) from ( /*keep orderby*/ select原创 2021-10-12 15:42:32 · 5185 阅读 · 0 评论 -
Set iterator.remove(); 无效
问题背景使用的是HashSet,对象用了lombok的@Data注解,这里面重写过hashCode和equals。来看现象,首先看我这里有2条数据。然后经历删除方法。最后结果还是有2条数据。问题分析注意我这里有个骚操作,中途有修改对象的属性。大概跟hashCode和equals有关,iterator.remove()没有定位到对象。我注释掉修改那2段代码,结果就可以了,如下图所示。另外测试了下同样的骚操作,用List(ArrayList)是没问题的。...原创 2021-09-14 20:24:24 · 330 阅读 · 0 评论 -
found for response type [class [B] and content type [image/jpeg]
RestTemplate报错found for response type [class [B] and content type [image/jpeg]。解决方案:增加消息转换器。// 常用的2个StringHttpMessageConverter、MappingJackson2HttpMessageConverterStringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));.原创 2021-09-02 06:35:32 · 790 阅读 · 0 评论 -
UnrecognizedPropertyException: Unrecognized field “@type“ not marked as ignorable
问题背景:Redis里的数据取出来反序列成对象,报错 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "@type" (class com.xx.common.xx.xxx.xxx.LoginUser)有可能的原因1、@type类型与本地对象类型不同。2、数据字段和本地对象不匹配。解决方案,代码如下所示 String str = "{\"..原创 2021-09-01 15:51:42 · 2088 阅读 · 0 评论 -
RestTemplate乱码和No HttpMessageConverter for java.util.HashMap and content type “application/json
乱码问题如下所示解决方案,设置转换器private StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));private RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build();如果要传递json数据可能遇到No HttpMessageCon.原创 2021-08-31 19:30:22 · 6027 阅读 · 0 评论 -
《Spring Cloud Alibaba微服务实战》 之 Jenkins + Gitlab + Docker部署运行
目录前面已经分别使用过Docker、Jenkins + GitLab 了,本小节就将它们整合起来使用。在Java项目中直接使用Dockerfile构建镜像还是有些不方便,最直观的有一些路径问题要解决,好在可以使用Maven插件构建镜像。1.在服务消费者和2个服务提供者项目的pom.xml文件plugins标签下增加docker-maven-plugin插件,新增的代码如下所示。<!--maven构建docker镜像 --><plugin> <groupId>原创 2021-08-14 09:24:34 · 491 阅读 · 0 评论