![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 78
代码大师麦克劳瑞
代码小学生,记录平时点滴,欢迎大家指正
展开
-
MapStruct使用教程(内含代码实战)
有时候,可能需要自定义映射行为,例如处理特定字段的转换或执行复杂逻辑。MapStruct 允许使用@Mapping注解来自定义映射。@Mapper在上面的示例中,我们使用@Mapping注解来指定目标属性和源属性之间的映射关系。这允许在不同属性名的情况下进行映射。MapStruct是一个Java注解处理器库,用于生成对象之间的映射代码。它的主要目的是简化对象之间的转换,特别是在DTO(Data Transfer Object)和领域对象之间进行映射的情况下非常有用。原创 2023-10-24 01:00:00 · 1251 阅读 · 0 评论 -
为什么大厂都不推荐使用@Autowired注解
是什么原因导致大厂不推荐这种做法呢?这种依赖注入方式有什么弊端呢?原创 2023-10-16 15:43:44 · 999 阅读 · 0 评论 -
求求你们别学了,已经追不上了,JDK21已经发布了
2023/06/08 Rampdown Phase One (fork from main line)2023/07/20 Rampdown Phase Two2023/08/10 Initial Release Candidate2023/08/24 Final Release Candidate2023/09/19 General Availability原创 2023-09-27 12:32:10 · 485 阅读 · 0 评论 -
Java解析cron表达式实战
在我们实际开发中多数会在一些定时任务中试用表达式来控制任务的执行时间、频率等。有时候在围绕任务调度进行开发的时候,是需要通过解析表达式来获取一些信息,例如需要获取表达式得下一次执行时间,或者让用户在界面上设置时间,我们来生成cron表达式。那么如何来实现这些需求,这里我推荐cron-utils.原创 2023-03-28 16:45:34 · 1207 阅读 · 1 评论 -
Semaphore实战场景分析(附源码)
简单来说: 1.Semaphore通过初始化维护了一组凭证,通过acquire()获取凭证否则会阻塞,执行完动作后,通过release()释放手中的凭证供下一个工作线程使用。 2.Semaphore通常用于限制可以访问某些资源的线程数。 3.Semaphore是一个计数器,并且计数可以重复使用,获取凭证释放凭证。原创 2023-02-08 16:11:28 · 1265 阅读 · 1 评论 -
Java8~19新特性(附官网传送门)
文章末尾附Java各版本官方汇总传送门原创 2022-10-05 13:34:29 · 2464 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier实战场景分析(附代码)
CountDownLatch、CyclicBarrier并发工具,实战理解,单一实战示例,混合实战示例,带你一次搞懂原创 2022-09-21 19:05:10 · 890 阅读 · 2 评论 -
Springboot之邮件发送(内附源码)
springboot邮件服务,内附源码及实战步骤。原创 2022-09-03 22:30:04 · 3815 阅读 · 8 评论 -
ThreadLocal源码解析及使用场景
ThreadLocal类用来提供线程内部的副本变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文。...原创 2022-08-02 17:38:32 · 892 阅读 · 0 评论 -
shiro.crypto.CryptoException: Unable to correctly extract the Initialization Vector or ciphertext
org.apache.shiro.crypto.CryptoException: Unable to correctly extract the Initialization Vector or ciphertext.原创 2022-07-28 10:26:58 · 7139 阅读 · 0 评论 -
Springboot接收请求参数的几种常用方式
@PathVariable、@RequestParam、@RequestBody、@RequestHeader、HttpServletRequest原创 2022-06-30 13:38:13 · 4888 阅读 · 0 评论 -
Java8之函数式接口及常用函数式接口
函数式接口、Supplier、Consumer、Predicate、Function等原创 2022-05-21 11:50:56 · 5951 阅读 · 0 评论 -
BigDecimal常用运算详解
比较BigDecimal提供了compareTo方法进行比较值的大小,返回值是int。这是方法注释上面定义的返回值 :-1, 0, or 1 as this {@code BigDecimal} is numerically less than, equal to, or greater than {@code val}.直接上代码吧,看看怎么做比较。 public static void main(String[] args) { BigDecimal a = new B原创 2022-05-18 12:56:34 · 2014 阅读 · 2 评论 -
Java8之Lambda表达式
目录一、初识Lambda1.Lambda栗子2.Lambda表达式的组成3.举个栗子二、Lambda更进一步1.类型推断2.方法引用一、初识LambdaLambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。 这是来自万能的百度百科对于lamb原创 2022-05-16 12:55:03 · 1816 阅读 · 0 评论 -
Flowable数据库表分类及数据字典
一、Flowable数据库表命名规则 ACT_RE_* : ’RE’表示repository(存储)。RepositoryService接口操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。 ACT_RU_* : ...原创 2022-05-11 18:24:56 · 1902 阅读 · 0 评论 -
自定义spring-boot-starter实战教程(保姆级教程)
目录背景一、starter二、自定义starter的注意事项1.Naming2.Configuration keys3.The “autoconfigure” Module4.Starter Module5.Creating Your Own Auto-configuration6.Condition Annotations三、开始定义自己的starter1.创建maven工程2.定义配置类3.定义工具类4.定义自动装配类5.测试a.执行maven编译打包命令b.将jar包上传至本地maven仓库c.然后我原创 2022-04-26 18:32:18 · 3137 阅读 · 11 评论 -
官方spring-boot-starter查阅方式
背景很多小伙伴想看一下官方提供的spring-boot-starter有哪些,去官网一顿翻,发现也没找到,在这里说明一下其实是有介绍的,只不过嘛…入口实在是藏的比较深,我也经常忘记,因此记录一下。这里将给大家详细的介绍一下探秘spring-boot-starter的步骤。步骤step1 打开官网点击传送门跳转至官网step2 找到spring-boot并跳转选中并跳转至该页面step3 选择springboot版本并点击查看文档选择learn标签,这里我们任意选择一个版本的文档进行原创 2022-04-26 16:05:31 · 3055 阅读 · 2 评论 -
SpringBoot之@ConditionalOnXX注解
SpringBoot @ConditionalOn条件注解功能详解原创 2022-03-01 11:40:51 · 2397 阅读 · 4 评论 -
Macos下通过Jenv管理不同版本Jdk
前言随着jdk更新速度越来越快,目前更新到了17版本,实际开发中,我们有可能会用到不同版本的jdk,那么如何在你的mac中管理多个版本jdk进行切换呢,我想到了jenv。一、安装jenv由于笔者使用的是Macos,所以直接通过homebrew进行安装。安装homebrew和切换国内镜像源可以参考之前的文章Homebrew切换国内镜像源brew install jenv1.添加环境配置#根据自身使用的shell添加echo 'export PATH="$HOME/.jenv/bin:$PATH原创 2022-01-11 17:21:35 · 1635 阅读 · 4 评论 -
Java泛型详解(内附代码示例)
目录概念泛型的擦除泛型的类型1.泛型类2.泛型接口3.泛型通配符4.泛型方法1.泛型方法的基本用法2.类中的泛型方法3.泛型方法与可变参数4.静态方法与泛型5.泛型方法总结5.泛型上下边界概念概念移步百度百科:java泛型我只说一下我的理解,使用数据类型约束主要是为了安全性,这样可以在编译期发现更多的风险,并且减少代码强转。在使用的时候定义好数据类型,也算是一种约束,对内部的代码调用等都非常的友好。java中可以定义指定的数据类型,也可以定义泛型,当定义了指定的数据类型时,它就仅能接收这一种数据类型原创 2021-08-30 12:37:00 · 6556 阅读 · 0 评论 -
彻底学会maven中依赖冲突解决办法(内附实战项目)
背景关于maven这个自动构建工具,大多数程序员已经用了很久了,最近在编码过程中需要引入其他jar包时不止一次遇到过jar包冲突所带来的问题。所以在此记录一下排查方法。排查过程首先根据报错查看源码,你需要断定出来是不是jar包冲突,这个时候比较明显的一些报错是比如明明源码中有这个方法,但是提示确找不到、或者干脆找不到这个类,还有你发现抛出的异常和源码中对应的行数所对应的内容也不一样等等。那么当你通过任何途径大概心理有个底了,就可以上才艺了,方法很多,能够解决问题就是好方法。常见但不仅限于以下异原创 2021-08-17 18:37:23 · 12531 阅读 · 8 评论 -
Mybaits整合达梦数据库
达梦数据库整合,内含实战代码原创 2021-08-09 17:42:55 · 3214 阅读 · 2 评论 -
Java实现对称加密
Cipher,内含实战代码原创 2021-08-04 13:22:14 · 3536 阅读 · 3 评论 -
Java调用Zabbix api
Zabbix已经搭建完毕,搭建方法见通过docker搭建zabbix5.0查阅文档:https://www.zabbix.com/documentation/5.0/manual ,发现zabbix对外提供了很多api接口。于是从某开源网站上面找到了一个jar包见下图于是开始使用springboot工程去调用api。直接上代码,先是pom文件<parent> <groupId>org.springframework.boot</groupId>原创 2021-07-13 18:49:51 · 2624 阅读 · 5 评论 -
springboot整合Kettle同步mysql数据跳坑指南
需求背景背景是想通过java调度kettle自带工具spoon生成的转化(ktr)或者作业(kjb)文件,从而实现数据同步,目前使用的是mysql数据源,没有做其他数据源的处理。后续有空会更新其他数据源的填坑过程。先卖个关子,mysql驱动在这里有个巨大的坑。项目构建及依赖构建了一个maven工程,引入springboot相关的包 <parent> <groupId>org.springframework.boot</groupId>原创 2021-06-18 23:36:07 · 3470 阅读 · 19 评论 -
SpringBoot Kafka动态指定消费组实现发布订阅
场景分析有一个websocket服务,消费来自kafka的消息,并且推送给指定的ws客户端。原本kafka配置是从配置文件中直接读取,当需要多实例启动时,并且想通过消费分组去让不同实例都消费topic中的数据时,配置文件显然就捉襟见肘了。解决方案考虑多实例部署时候生成不用的消费分组,每个实例启动后被分配在不通消费分组中。利用不通消费分组均能消费topic中消息的原理,实现kafka的订阅发布。talk is cheap,show you the codekafka配置@Slf4j@Compon原创 2021-04-14 18:42:40 · 4584 阅读 · 2 评论 -
Jps、Jstack、Jstat、Jmap详解以及内存溢出排查
1.Jpsjps 命令参数解析The jps command supports a number of options that modify the output of the command. These options aresubject to change or removal in the future.-q # 仅输出java进程的pid Suppresses the output of the class name, JAR file name, and arg原创 2021-01-19 13:55:28 · 1682 阅读 · 0 评论 -
ClassLoader.loadClass()与Class.forName()的区别
1.Class.forName先直接上源码 @CallerSensitive public static Class<?> forName(String className) throws ClassNotFoundException { Class<?> caller = Reflection.getCallerClass(); return forName0(className, true, ClassLoader.getClassLo原创 2020-12-28 13:45:04 · 790 阅读 · 0 评论 -
Java项目启动参数设置(持续更新)
# 使用指定路径下的配置文件启动java -jar payment-server-1.0.0.jar --spring.config.location=/Users/scott/jw_project/application.yml# 启动时设置jvm参数java -jar -Xms256m -Xmx256m -XX:PermSize=256M -XX:MaxPermSize=256M target/order-server-1.0.0.jar...原创 2020-12-22 18:58:21 · 2257 阅读 · 0 评论 -
JAVA类加载过程
1. JVM类加载过程1.概述从类的生命周期而言,一个类包括如下阶段:加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序进行,而解析阶段则不一定,它在某些情况下可能在初始化阶段后在开始,因为java支持运行时绑定。2. 类加载时机加载(loading)阶段,java虚拟机规范中没有进行约束,但初始化阶段,java虚拟机严格规定了 有且只有如下5种情况必须立即进行初始化(初始化前,必须经过加载、验证、准备阶段): (1)使用new实例化对象时,读取和设置类原创 2020-12-12 16:46:40 · 1691 阅读 · 2 评论 -
String类为什么需要用final修饰
1.了解 finalfinal 可以修饰类、方法、变量。final修饰类:被final修饰的类不能被继承。final修饰方法:final修饰的方法不能被重写。final修饰变量:final修饰的变量必须初始化。2.安全性字符串在编码中是非常常用的,比如说一些用户名密码都是以字符串的形式存在于内存当中,如果字符串是可变的,那么就有引用漏洞可以利用,用于攻陷我们的系统。字符串不可变,在线程之间共享才是安全的,否则也会引起程序错乱。3.效率只有当String被设计成为不可变时,才能实现字符串原创 2020-09-24 15:05:21 · 1413 阅读 · 1 评论 -
Volatile之内存可见性及禁止指令重排序
volatile的两重语义1.多线程环境下保证内存可见性。2.多线程环境下禁止指令重排序。说起保证内存可见性,不得不从java内存模型开始讲起,但是我们先说一下缓存一致性,来帮助我们混淆java内存模型。缓存一致性之前的文章...原创 2020-07-09 15:31:38 · 1400 阅读 · 2 评论 -
伪共享(False Sharing)和缓存行(Cache Line)
缓存行(Cache Line)https://blog.csdn.net/qq_27680317/article/details/78486220直接说重点,概念什么的请自行百度,用最通俗的话来讲就是多核计算机的一个处理器会有多个核,每个核中会存在L1、L2缓存,多个核之间共享L3缓存,画个简单的图来表示一下:变量位置与访问效率对比:位置执行效率寄存器中1个周期CPU CACHE中1~30个周期主存中50~200个周期磁盘中...原创 2020-06-28 14:18:02 · 1068 阅读 · 0 评论 -
Spring Cloud Gateway 通过过滤器动态改变路由规则
Spring Cloud Gateway 通过过滤器动态改变路由规则背景公司需要做版本控制,但是又没有时间做服务改造,同时部署两个版本服务,但是对外提供一套域名,需要前面加一层网关来负载。用图表示的话大概是下面这样子:关于网关,看了一下基于java语言实现的大概有Zuul还有Spring Cloud Gateway,最后感觉后者网上帖子多,所以果断开始抄gateway的代码。(简单看了下gateway是zuul的升级版,并且gateway支持长连接,我们项目中使用了websocket,考虑到原创 2020-06-24 10:24:34 · 5529 阅读 · 7 评论