随笔分类 -  Java

摘要:背景 项目中有些分支暂时不需要用到kafka的消费监听,但以后可能会用到。于是需要一个方法可以动态开关kafka相关功能。 解决方案 通过注解@ConditionalOnProperty或注解@ConditionalOnBean实现,推荐使用@ConditionalOnProperty。 @Cond 阅读全文
posted @ 2022-06-17 17:02 zjcfrancis 阅读(317) 评论(0) 推荐(0) 编辑
摘要:背景 LoadingCache是GuavaCache构建缓存实体的方法,是一个支持多线程并发读写、高性能、通用的in-heap(堆)本地缓存。 支持key不存在时按照给定的CacheLoader 的loader方法进行loading。如果有多个线程同时get一个不存在的key,那么会有一个线程负责l 阅读全文
posted @ 2022-03-11 16:13 zjcfrancis 阅读(3786) 评论(0) 推荐(0) 编辑
摘要:背景 刷新缓存时会有线程被阻塞。为避免阻塞用户线程,把刷新线程放到后台执行。 当key过期,有新用户读取cache时,开启一个新线程去load数据库数据,用户线程返回老的值。 因此需要添加一个线程池来刷新cache。 线程池的学习与使用 ThreadPoolExecutor类 ThreadPoolE 阅读全文
posted @ 2022-03-11 14:45 zjcfrancis 阅读(215) 评论(0) 推荐(0) 编辑
摘要:背景 与前端交互时id通常为字符串,需要转成Long类型存入数据库 方法 转成数组 Long[] nums = (Long[]) ConvertUtils.convert(ids.spilt(","), Long.class); 转成列表 List<Long> nums = Arrays.strea 阅读全文
posted @ 2022-03-11 10:30 zjcfrancis 阅读(3014) 评论(1) 推荐(0) 编辑
摘要:说明 InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法。 凡是继承该接口的类,在初始化bean的时候会执行该方法。 与配置文件中init-method的区别 在初始化bean时,先调用afterPropertiesSet方法,然后 阅读全文
posted @ 2022-03-10 14:39 zjcfrancis 阅读(188) 评论(0) 推荐(0) 编辑
摘要:说明 @PostConstruct被用来修饰一个非静态的void()方法。 被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。 PostConstruct在构造函数之后执行,init()方法之前执行。 执行顺序 该注解的方法在整个Bean初始化 阅读全文
posted @ 2022-03-10 14:23 zjcfrancis 阅读(23) 评论(0) 推荐(0) 编辑
摘要:Stack类 public class stack<E> extends Vector<E> Stack类继承Vector类,Vector类线程安全但性能差。 Vector扩容一倍空间,ArrayList扩容一半空间。 Vector分配内存需要连续的存储空间。 Deque接口 Deque是一个双端队 阅读全文
posted @ 2022-03-04 17:12 zjcfrancis 阅读(200) 评论(0) 推荐(0) 编辑
摘要:背景 Java的stream除了有常见的泛型Stream,还有IntStream、LongStream、DoubleStream等。后者可以在stream中使用原始的数据类型 map和mapToObj可以将流中的对象转换为其他对象 区别 对于IntStream map IntStream map(I 阅读全文
posted @ 2022-03-04 11:05 zjcfrancis 阅读(1178) 评论(1) 推荐(0) 编辑
摘要:背景 Guava Cache 是google guava中的一个内存缓存模块,用于将数据缓存到JVM内存中,解决了常规缓存方法以下几个问题: 很好的封装了get、put操作,能够集成数据源 线程安全的缓存 提供了三种基本的缓存回收方式:基于容量回收、定时回收和基于引用回收 监控缓存加载/命中情况 使 阅读全文
posted @ 2022-02-25 16:30 zjcfrancis 阅读(168) 评论(0) 推荐(0) 编辑
摘要:背景 登录生成token 每个接口请求头需要带token knife4j的增强模式提供AfterScript可以通过脚本实现将登录时token设成“环境变量”,在各个接口请求头中加入token 实现 //ke = knife4jenvironment var code=ke.response.dat 阅读全文
posted @ 2022-02-23 10:58 zjcfrancis 阅读(1588) 评论(0) 推荐(0) 编辑
摘要:出现场景 使用list容器时,在循环遍历中add或remove元素 使用set容器时,在循环遍历中add或remove元素 使用map容器时,在循环遍历中remove元素 错误原因 remove操作时,只有modCount++,而expectedCount值未变,迭代器在取下一个元素的时候,发现该二 阅读全文
posted @ 2022-02-18 15:02 zjcfrancis 阅读(24) 评论(0) 推荐(0) 编辑
摘要:背景 全局接口异常处理,与@ExceptionHandler(value = Exception.class)一起使用可以全局捕获指定异常。 使用举例 @RestControllerAdvice public class GlobalExceptionHandler { private static 阅读全文
posted @ 2022-02-17 11:35 zjcfrancis 阅读(120) 评论(0) 推荐(0) 编辑
摘要:“上下文”原意 原为“context”,中文翻译为“上下文”,大致可以分三类 业务“上下文” 业务操作所对应的基础单位(实体)。 业务上下文变更举例 后台系统登录实体为个人,每个功能都是以个人为基准编写的。如果要让集体账号也可以登录,该账号登录后要获取到集体所有个人的信息。那原先以个人为基准编写的功 阅读全文
posted @ 2022-02-14 14:16 zjcfrancis 阅读(334) 评论(0) 推荐(0) 编辑
摘要:转为对应对象列表 //Json数据: [ { "id": 1, "email": "test", "userId": "1233", "employeeName": "xx", "gender": "MALE", "phone": "12341234123", "deptName": "外包" } 阅读全文
posted @ 2022-02-10 16:21 zjcfrancis 阅读(19) 评论(0) 推荐(0) 编辑
摘要:Pattern实现 //完全匹配 Pattern pattern = Pattern.compile("^" + "张" + "$"); //右匹配 Pattern pattern = Pattern.compile("^.*" + "张" + "$"); //左匹配 Pattern pattern 阅读全文
posted @ 2022-02-10 15:32 zjcfrancis 阅读(2823) 评论(0) 推荐(0) 编辑
摘要:简介 MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。 db.collection.aggregate()方法是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经 阅读全文
posted @ 2022-02-07 16:16 zjcfrancis 阅读(946) 评论(0) 推荐(0) 编辑
摘要:实例变量/方法,类变量/方法的区别 实例变量/方法 实例变量 或叫成员变量(member variable)。实例的变量。 实例方法 或叫成员方法(member method)。供实例用的方法,必须要先有实例,才能通过此实例调用实例方法。 类变量/方法 类变量 或叫静态变量(static varia 阅读全文
posted @ 2022-01-11 14:40 zjcfrancis 阅读(269) 评论(1) 推荐(0) 编辑
摘要:组件注解 @Component 泛指组件,实现bean的注入 衍生:@Service,@Repository,@Controller Autowired和Resource Autowired 默认byType注入(bean的class属性) 使用@Qualifier()注解实现byName注入(be 阅读全文
posted @ 2022-01-10 09:29 zjcfrancis 阅读(42) 评论(0) 推荐(0) 编辑
摘要:Java8中的stream 为什么需要stream Stream API借助于同样新出现的Lambda表达式,极大的提高编程效率和程序可读性。 提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用fork/join并行方式来拆分任务和加速处理过程。 概述 不保存数据。 操作 阅读全文
posted @ 2021-12-27 17:21 zjcfrancis 阅读(197) 评论(0) 推荐(0) 编辑
摘要:Optional 类 定义与声明 定义 Optional 类是一个可以为null的容器对象。它可以保存类型T的值,或者仅仅保存null。 Optional 类的引入可以不用显式进行空值检测。 类声明 点击查看代码 public final class Optional<T> extends Obje 阅读全文
posted @ 2021-12-24 16:48 zjcfrancis 阅读(130) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示