水波纹按钮动画
生活是种律动,须有光有影,有左有右,有晴有雨。——老舍 代码: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> .login { display: flex; align-items: center; justify-content: center; margin-top: 200px; } ...
TTL的CRR操作
要有最朴素的梦想,即使明天天寒地冻,路远马亡。——海子 前段时间遇到的TTL(TransmittableThreadLocal)在异步编程中的上下文丢失问题,我是采用了直接更换线程池的方式 但今天抽空看了下官方文档,发现了: 所有TTL值的抓取、回放和恢复方法(即CRR操作) CRR:capture(快照)、replay(回放)、restore(备份) 自己简单写了个测试用例,用于在CompletableFuture和并行流场景下解决ThreadLocal的上下文丢失问题 大伙一定要复制到本地跑一下,需要的GAV是这个: 12345<dependency> <groupId>com.alibaba</groupId> <artifactId>transmittable-thread-local</artifactId> <version>2.12.4</version></dependency> 代码: 12345678910111213141516171819...
微信群聊头像组件
直起腰来,我看见蓝色的大海和帆影。——切·米沃什《礼物》 分享一个群聊头像组件 组件地址:https://ext.dcloud.net.cn/plugin?id=5456 效果: 示例代码: 123456789101112131415161718192021222324252627282930313233343536373839<template> <view> <button type="primary" @tap="cerate">创建群组头像</button> <canvas :canvas-id="canvasId" style="width: 120px; height: 120px; margin: 36px auto;"></canvas> </view></template><script> import createAvata...
Collectors.toMap的对null友好实现
令她反感的,远不是世界的丑陋,而是这个世界所戴的漂亮面具。——《不能承受的生命之轻》 我们在使用toMap时如果遇到null元素,经常会导致我们发生npe 很不方便 于是我给hutool提交了一个PR 完美解决了这个问题 使用方式: 升级到hutool-5.7.20 然后使用CollectorUtil 12Map<String, Integer> collect = Arrays.asList("ruben", "a chao", "vampire", "RUBEN", "VAMPIRE", null).stream().collect(CollectorUtil.toMap(Function.identity(), String::length, (l, r) -> l));System.out.println(collect); 即可
thymeleaf动态渲染html
君子忍人所不能忍,容人所不能容,处人所不能处。——邓拓 我们可以使用thymeleaf进行动态渲染html内容 假设我的整个页面都是字符串,例如如下格式: 123456789"<!DOCTYPE html>\n" + "<html>\n" + " <head>\n" + " <meta charset=\"utf-8\">\n" + " <title></title>\n" + " </head>\n" + " <body>\n" + " </body>\n" + "</html>" 那我们渲染的话,其实可以直接新建一个页面,用[(${page})]语法,例如 1[($...
设置并行流最大线程数
做你自己,因为别人都有人做了。——王尔德 我们可以使用如下方式获取并行流线程数 并行流线程数获取 如果我们需要更改,则可以设置系统属性: 1System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "8"); 例如此处设置为8 则再次获取 可以看到是8个子线程+1个主线程,也就是9个线程 还可以使用ForkJoinPool.getCommonPoolParallelism()直接获取ForkJoinPool中允许设置的最大线程数
hutool-bom
一个能思想的人,才真是一个力量无边的人。——巴尔扎克 官方文档 我们在使用hutool时可以像如下方式引入单独引入所需模块: 123456789101112131415161718192021222324252627282930313233343536373839<?xml version="1.0" encoding="UTF-8"?><project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <properties> <hutool.versi...
子线程中获取request
在这个世界上,一切都预先被谅解了,一切也就被卑鄙地许可了。——《不能承受的生命之轻》 写一个接口,用于测试: 123456789101112131415161718192021222324252627import cn.hutool.core.thread.AsyncUtil;import javax.annotation.Resource;import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;import java.util.concurrent.CompletableFuture;@RestController@RequestMapping("test")public class TestController { @Resource private HttpServletRequest request; @GetMapping("request") public String ...
小程序v-for中slot警告
她把左手的命运交给了右手,右手犹豫了一下,还是接住了。——宫白云 今天用了这样一个组件: 1234567891011121314151617181920212223<template> <div> <div v-for="(item, index) in list"> <slot :item="item" /> </div> </div></template><script>export default { data() { return {}; }, props: { list: { type: Array, default: [] } }};</script><style></style> 这里在v-for中放了slot 所以我在另一个页面使用的时候,小程序警告 1VM1103 W...
SqlSession
被温柔对待以后,自己也想变得温柔。——《夏目友人帐》。 参照我这个PR 在Mybatis中SqlSession类比于我们在使用原生jdbc时的Connection对象,用完需要释放。。。 我之前写的忘记释放了,导致druid监控到大量连接未释放,连接池经常占满 所以改成这种方式了 我们使用后一定要调用SqlSession#close释放连接。。。 血的教训啊,因为忘记释放导致连接池泄露,愈发让我明白自己写代码还有很多要学
