POI使用--循环word模版填入对应数据、图片(包含嵌套循环) 1.目录结构2.引入依赖 <!--poi-tl word支持--> <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.10.2</version> <.
lambda表达式完成aop切面功能 背景:最近项目中涉及到自定义线程池中子线程获取父线程的traceId,这个数据的传递过程可以用lamdba表达式进行封装实现的。这让我想到spring容器的三级缓存。其中的一个缓存singletonFactories就是存放的lambda表达式的。// 缓存的声明private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);// lambda作为参数调用a
Spring Boot中调用@Async注解的异步方法并获取返回值 该方法无需创建任何实体,只需要通过传参即可获取返回结果需求背景 最近正在研发的系统有接口需要从多个表中获取数据进行处理,所以打算使用多线程异步获取到这几个表处理后的数据结果。由于Spring Boot提供多线程ThreadPoolTaskExecutor类,使用代码如下代码配置类@Configurationpublic class ThreadPoolConfig { @Value("${threadpool.core-pool-size}") private ...
shell语句结构 比较语法字符串比较是否为空 [ -z 字符串 ] 等于 [ 字符串1 = 字符串2 ] 不等于 [ 字符串1 != 字符串2 ]方括号、字符和等式之间必须要有一个空格# 判断变量TT是否为空liangjiabao@liangjiabaodeMacBook-Air mongodb-macos-x86_64-5.0.3 % [ -z "$TT"]liangjiabao@liangjiabaodeMacBook-Air mongodb-macos-x86_64-5.0.3 % echo
shell语法基础 解释器查看所有的解释器cat /etc/shells查看正在使用的解释器类型grep root /etc/passwd输出>代表正确输出指定位置2>代表错误输出指定位置&>表示所有(正确和错误都包括)输出指定位置>>表示追加定义变量定义变量的格式:变量名 = 变量值取消变量的格式:unset 变量名注意事项变量名可以字母/数字/下划线组成,不能以数字开始变量名的语
ThreadLocal源码分析理解弱引用和内存泄漏 目录一、说明三个API二、源码分析setThreadLocalMap底层结构结构图map.setgetremoveexpungeStaleEntryresize扩容三、思考与总结想共享线程的ThreadLocal数据怎么办?为什么ThreadLocalMap的key要设计成弱引用?示例代码代码中对象所在堆栈的对应图释放线程中引用后堆栈对应图使用弱引用将key为null,对应的Entry如何清除?内存泄露问题解决一、说明T
redis乐观锁和悲观锁在spring boot的使用 目录乐观锁:使用乐观锁任务类悲观锁使用setnx分布式锁redission引入pom配置类任务类总结乐观锁:认为什么时候都不会出问题,所以不会上锁!更新数据的时候去判断一下,在此期间是否有人修改过这个数据 获取version 更新时候比较version使用监听操作和事务操作实现乐观锁测试多线程修改值,使用watch可以当作redis的乐观锁操作在事务执行之前先watch key,当事务前后key改变了事务失败,那就先取消监视,再重新监视进行事务操
Mysql索引 1.定义索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。Mysql官方:索引是一种优化查询的数据结构2.索引类型哈希表哈希表这种结构适用于只有等值查询的场景。范围查询不好使全文索引(FullText Key)全文索引主要是为了检索大文本数据中的关键字的信息,是目前搜索引擎数据库使用的一种技术。Mysql5.6 之前只有 MYISAM 引擎支持全文索引,在5.6版本中,InnoDB加入了对全文索引的支持,但是不支持中文全文索引.在5.7.6版本,MySQL内
HashMap红黑树原理及源码分析---图形、注释一应俱全 一、红黑树定义红黑树是一种结点带有颜色属性的二叉查找树,除此还有以下5大性质: 节点是红色或黑色。 根是黑色。 所有叶子都是黑色(叶子是NIL节点,这类节点不可以忽视,否则代码会看不懂)。 每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。) 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点(黑色平衡)。NIL节点:为了红黑树平衡而添加的空节点二、节点新增原理:如果插入的是第一个节点(根节点),红色变黑色。-----基
阅读Spring官网总结Aop用法 前置通知使用切入点表达式 @Before("execution(* com.xyz.myapp.dao.*.*(..))") public void doAccessCheck() { // ... }返回后通知 @AfterReturning( pointcut="com.xyz.myapp.CommonPointcuts.dataAccessOperation()", returning="retVal.
Spring的IoC容器Bean创建过程从理论到源码分析 文章目录系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言我们都知道Spring有以下很多优点:方便解耦,简化开发。降低了业务对象替换的复杂性,可以让开发人员更关注业务逻辑 方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付 数据库事务问题 ......1.那IOC起到了什么作用?IOC容器的主要作用其实就是第一点说的,方便解耦,简化开发。(1).那它是如何解耦的?这就.
Map排序和遍历 computeIfAbsent最常见的用法是构造一个用作初始映射值或记忆结果的新对象,如:map.computeIfAbsent(key, k -> new Value(f(k)));或者实现一个多值地图, Map<K,Collection<V>> ,每个键支持多个值:map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);getOrDefault(Object key, V .
SpringBoot七大传播机制 事务传播行为类型 说明 PROPAGATION_REQUIRED required(必修的) 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 PROPAGATION_SUPPORTS supports(支持的) 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY ...
aop中Pointcut切入点指示符 execution:用于匹配方法执行的连接点。这是在使用Spring AOP时要使用的主要切入点指示符。 within:将匹配限制为某些类型内的连接点(使用Spring AOP时,在匹配类型内声明的方法的执行)。 this:在bean引用(Spring AOP代理)是给定类型的实例的情况下,将匹配限制为连接点(使用Spring AOP时方法的执行)。 target:在目标对象(代理的应用程序对象)是给定类型的实例的情况下,将匹配限制为连接点(使用Spring AOP时方法的执行)。 args:将匹配
java分别发送post请求application/x-www-form-urlencoded和application/json类型数据 有时候我们在postman上调用接口它可以正常返回结果,但是自己写后端代码时报400错误时,这可能就是对请求头的Content-Type没有设置的结果。post提交数据有多种方式,而application/x-www-form-urlencoded和application/json都是比较常见的方式。x-www-form-urlencoded是表单提交的一种,表单提交还包括multipart/form-data。以 application/x-www-form-urlencoded 方式提交数据,会
compare()和compareTo()区别 compareToa.compareTo(b):将此对象与指定的对象进行比较以进行排序。Comparable接口:比较值并返回一个int,它告诉值是否比较小于,等于或大于。如果您的类对象具有自然顺序,请实现该Comparable<T>接口并定义此方法。所有具有自然排序实现的Java类Comparable<T>- 示例:String,包装类,BigIntegercomparecompare(a, b):比较其两个参数的顺序。比较器接口:比较两个对象的值。..
多层嵌套break跳出指定循环 平常break最常出现的就是在for循环或者while循环中跳出到当前循环,但是在多层循环嵌套下break还能跳出指定的循环语法结构如下"自己定义的名称" : { for|while(){ break "自己定义的名称"; }}实例:定义两个数组 int[] nums1 = new int[6]; nums1[4] = 4; int[] nums2 = new int[6]; ..
xxlJob与Spring Boot原生定时器的区别 xxljob我接触是在做钉钉考勤项目的时候,自己的接口模块是一个job,每天早上固定时间去调钉钉的接口获取当天的排班信息。而@Scheduled是在学习视频时接触到,敲了一个demo。说起来xxljob和@Scheduled定时器的区别,之前只是知道这两个都是用来定时执行的。并且之前的理解就是这两个应该差不多可以等价,后来得到了一些启发。进行深究这两个区别。先来简单介绍下xxljob,xxl-job是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。@Schedule