- 博客(47)
- 收藏
- 关注
原创 数据库实现分布式锁总结
互斥性:同一时刻只能有一个服务(或应用)访问资源。原子性:一致性要求保证加锁和解锁的行为是原子性的。安全性:锁只能被持有该锁的服务(或应用)释放。容错性:在持有锁的服务崩溃时,锁仍能得到释放,避免死锁。高可用:获取锁和释放锁 要高可用。高性能:获取锁和释放锁的性能要好。持久性:锁按业务需要自动续约/自动延期。
2023-10-10 16:21:28 266
原创 @Async用哪个线程池
spring boot 会默认添加一个coreSize=8的 无界线程池,名称为applicationTaskExecutor (源码:org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration)这时使用@Async注解,如果不指定使用哪个线程池,默认使用的就是SimpleAsyncTaskExecutor。这时使用@Async注解使用的就是applicationTaskExecutor线程池。
2023-08-18 15:19:44 946 1
原创 Spring的ApplicationEvent简单使用
以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设计初衷也是为了系统业务逻辑之间的解耦,提高可扩展性以及可维护性。事件发布者并不需要考虑谁去监听,监听具体的实现内容是什么,发布者的工作只是为了发布事件而已。
2023-08-18 14:28:44 506
原创 @Valid和@Validated在service层的应用及问题汇总
实际开发中,很多时候要对参数校验,比如为空等,除了要在接口的入口处使用,很多普通方法也需要检查,比如service方法,那么如何在service上使用这个参数校验呢?
2023-07-18 16:28:01 3755 1
原创 从Spring 应用上下文获取 Bean
提供了获取所有已经成功注入容器的名称的方法。然后我们可以借助于其方法使用名称获取特定的。我们使用之前中介绍的接口来打印一下结果。
2023-07-14 11:05:54 673
原创 CompletableFuture使用详解
qquad实现了接口和Future接口,前者是对后者的一个扩展,增加了异步回调、流式处理、多个Future组合处理的能力,使Java在处理多任务的协同工作时更加顺畅便利。接口定义了任务编排的方法,执行某一阶段,可以向下执行后续阶段。异步执行的,默认线程池是,但为了业务之间互不影响,且便于定位问题,强烈推荐使用自定义线程池。
2022-10-08 14:56:56 1023
原创 Apache Velocity简介
它的目的是将设计和静态内容与代码分开.以一个网站为例.你不想在你的java代码中创建HTML,对吗?每次更改设计时都需要重新编译应用程序,并且会使用不必要的设计混乱来修改代码.您宁愿想要获取您的变量,无论是计算的还是来自数据库或其他任何变量,并让设计人员创建一个使用变量的HTML模板。.这意味着您可以向上下文添加变量,加载引用这些变量的模板,并从此模板呈现文本,其中变量的引用将替换为变量的实际值。)可以让设计师完成设计师的工作,程序员可以完成程序员的工作,同时对彼此的干扰最小.
2022-09-19 17:55:24 2478
原创 maven-compiler-plugin插件详解
maven-compiler-plugin 插件是一个 Maven 插件,用来编译项目代码;maven 是个管理工具,如果我们不告诉它我们的代码要使用什么样的 jdk 版本编译的话,它就会用 maven-compiler-plugin 默认的 jdk 版本来进行处理,这样就容易出现版本不匹配,以至于可能导致编译不通过的问题。maven 的默认编译使用的 jdk 版本有时候不通用,使用 maven-compiler-plugin 插件可以指定项目源码的 jdk 版本,编译后的 jdk 版本,以及编码。
2022-09-19 15:10:37 3379
原创 maven打包时附上源码
jar,在执行goal之前,执行generate-sources阶段,也就是说,如果,jar绑定的目标在generate-sources之后(比如verify)的话,generate-sources会执行两遍。我们只要在pom文件中,加入一个maven-source-plugin插件,设置jdk版本,重新mvn clean install就行了。一般来说,对于一个项目,直接打jar包,只能打出class文件,二无法打包出源代码,例如我们想看代码中的注释等相关信息,是看不到的。
2022-09-16 17:09:10 1230
原创 lombok中@Builder注解使用和需要注意的坑
使用@Builder的时候,最好和@AllArgsConstructor,@NoArgsConstructor一起用。
2022-09-09 15:51:54 1169
原创 java.lang.IllegalStateException: getInputStream() has already been called for this request
ExcelptionHandler中可以传入ServerletRequest作为入参,但是ServerletRequest的inputStream只能被读取一次,发生异常的时候再想去读取body只能悲催的得到一个已经Closed的Stream。当某些时候, tomcat已经读取过一次了,导致抛异常!使用ContentCachingRequestWrapper1. 通过过滤器将ServerletRequest封装成Cont...
2022-06-27 11:19:20 3264
原创 使用stream的Collectors.toMap()方法常见的两个问题
使用stream的Collectors.toMap()方法常见的两个问题
2022-05-12 17:07:13 1548
原创 Stream中的skip()和limit()方法
1 简介本文将讲解Java 8 Stream中的两个方法:skip()和limit()。这两个方法是Stream很常用的,不仅各自会被高频使用,还可以组合出现,并能实现一些小功能,如subList和分页等。2 skip()方法见名知义,skip()方法用于跳过前面n个元素,然后再返回新的流List<Integer> result = Stream.of(1, 2, 3, 4, 5, 6) .skip(4) .collect(Collectors.toList());L
2022-04-28 10:49:34 8013
原创 @JSONField注解的使用
FastJson中的注解@JSONField,一般作用在get/set方法上面,常用的使用场景有下面三个:修改和json字符串的字段映射【name】 格式化数据【format】 过滤掉不需要序列化的字段【serialize】一、修改字段映射使用方法: private Integer aid; // 实体类序列化为json字符串的时候,此类的aid字段,序列化为json中的testid字段 @JSONField(name="testid") public Integer.
2022-04-28 10:32:44 581
原创 gitlab配置SSH Key
Git配置Git安装完之后,需做最后一步配置。打开git bash,分别执行以下两句命令git config --global user.name “用户名”git config --global user.email “邮箱”开始配置SSH Key$ ssh-keygen -t rsa -C "你的电子邮箱"这里可以设置密码,也可以不设置密码。那个ssh key默认会保存在/users/user/.ssh上。这里默认就好了。使用记事本打开公钥文件 【id_rsa.pub.
2022-04-27 17:58:27 1179
原创 git配置commit检验
1、如果只需要配置单独项目git hooks,可按如下配置:在.git/hooks目录下有很多钩子,我们可以根据需要自定义不同的内容,这里我们只需要修改commit-msg即可。首先将commit-msg.sample 改为 commit-msg,也就是去掉后缀,然后配置commit-msg。当我们提交不规范的commit信息时就会提醒用户,并终止此提交2、如果需要配置全局git hooks,可按如下配置:全局hook1.在用户根目录下创建git_template目录mkdir -p
2022-04-27 17:46:39 1585
原创 Linux 日志查看常用命令
tail参数:tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]参数说明:-f 该参数用于监视File文件增长。 -c Number 从 Number 字节位置读取指定文件 -n Number 从 Number 行位置读取指定文件。 -m Number 从 Number 多字节字符位置读取指定文件,比方你的文件假设包括中文字,假设指定-c参数,可能导致截断,但使用-......
2022-04-12 15:32:54 17999
原创 @Autowired注解与@Resource注解的区别
一、注解的出处@Autowired是Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired@Resource是由J2EE提供的注解,需要导入包javax.annotation.Resource也就是说@Autowired是外部包导入的,而@Resource是J2EE自己的二、自动注入规则@Autowired默认按照byType自动注入@Autowired采取的是按照类型进行自动注入的,Autowi
2022-04-12 11:55:51 11623
原创 为什么说String是线程安全的
String是final修饰的类,是不可变的,所以是线程安全的。一、Java String类为什么是final的? 1.为了实现字符串池 2.为了线程安全 3.为了实现String可以创建HashCode不可变性二、Javafinal的用途? 1、final可以修饰类,方法和变量, 2、final修饰的类,不能被继承,即它不能拥有自己的子类, 3、final修饰的方法,不能被重写, 4、final修饰的变量,无论是类属性、对象属性...
2022-04-12 11:23:34 4173
原创 mapstruct中使用lombok@Builder的坑
在POJO类上使用了lombok@Builder注解,所以导致mapstruct编译代码使用build模式丢失父类属性OrderRateBillDO父类具有gmtCreate等属性但是在编译的代码中没有进行赋值@Override public OrderRateBillDTO toDTO(OrderRateBillDO orderRateBillDO) { if ( orderRateBillDO == null ) { return null;.
2022-04-02 10:29:07 3156 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人