Java
Java
封闭火车
这个作者很懒,什么都没留下…
展开
-
spring缓存的使用
CacheEvict是用来标注在需要清除缓存元素的方法或类上的。beforeInvocation 清除操作默认是在对应方法成功执行之后触发的,即方法如果因为抛出异常而未能成功返回时也不会触发清除操作。默认为false,表示不需要。sync 如果多个请求同时来访问同一个key的数据,则sync表示加锁同步,等第一个请求返回数据后,其他请求直接获取缓存里的数据。每次都会执行目标方法,并将执行结果以键值对的形式存入指定的缓存中。对于Spring,缓存组件例如EhCache是可拔插的,而缓存注解是通用的。原创 2024-02-21 22:29:02 · 1277 阅读 · 1 评论 -
通过Redis增减库存避坑
不论这个key是否存在都先加一,然后判断其过期时间是否为永不过期,如果是永不过期则说明是新生成的key,给它设置过期时间即可,如果非永不过期则无需操作。原因是: 因为redis的incr操作,当key不存在时, 会生成这个key并将值初始化为0, 并且默认设置key的有效时间为永久。场景1:我们缓存了一个商品的库存,过期时间为5分钟,根据用户的购买和取消执行 incr、decr 操作。两种场景编码看似都没有问题,但实际运行中却发现redis中有一些key变成了永不过期的key,而且值不正确。原创 2024-02-21 22:12:09 · 959 阅读 · 0 评论 -
Java操作ZIp文件
目录Java操作文件打包下载Java操作文件打包上传注意事项Java操作文件打包下载 public void downloadEcsZip(String fileName,List<Map<String,String>> filesMap,HttpServletResponse response) throws AppException { // 设置浏览器显示的内容类型为Zip response.setContentType("appli原创 2022-03-07 16:35:44 · 3951 阅读 · 0 评论 -
Springboot问题总结学习
1.在springboot启动完成之后紧跟着启动一个线程。(不影响springboot初始化bean,以及主线程)答:1.实现ApplicationRunner中的run方法。2.启动类加上@EnableAsync。3.然后通过异步的方式执行新线程。import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.原创 2021-08-30 15:52:51 · 213 阅读 · 0 评论 -
Ehcache缓存的使用
Ehcache缓存的使用pom坐标 <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.8.3</version> </dependency>ehcache.xml 配置文件<?xml version="1.0" encoding="UTF-8"原创 2021-08-10 20:31:33 · 589 阅读 · 0 评论 -
java多线程-countDownLatch介绍
java多线程countDownLatch介绍概念countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。它是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。源码countDownLatch类中只提供了一个构造器://参数count为计数值public CountDownLatch(int count) { }; 三个重要方法://原创 2021-08-05 09:52:56 · 285 阅读 · 0 评论 -
springboot多数据源
dynamic-datasource-spring-boot-starter做多数据源pom.xml <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.1.0</version>原创 2021-07-29 16:21:20 · 480 阅读 · 0 评论 -
MongoDB使用总结
MongoDB使用总结常用语句查询command db.getCollection('data').find({"id":"233"})java Query query = new Query(); query.addCriteria(Criteria.where("id").is("233")); return mongoTemplate.find(query, Data.class);插入command db.info.insert({id: '1原创 2021-07-12 19:23:17 · 272 阅读 · 0 评论 -
绿色版Aspose生成方法
绿色版Aspose生成方法项目中加入我们的java工具包javassist<dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.27.0-GA</version></dependency>收集信息,分析源码License.class中无论是setLi原创 2021-06-30 09:44:56 · 1198 阅读 · 0 评论 -
word转html并用jsoup解析
word转html并用jsoup解析背景描述项目上需要将word格式导入并展示到前端,且后台不使用本地临时文件夹。解析word转html使用aspose组件,解析html使用jsoup。aspose解析doc文档1 pom文档 <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <ver原创 2021-06-30 09:34:14 · 510 阅读 · 1 评论 -
slf4j原理学习
Slf4j是什么 SLF4J 是 Simple Logging Facade for Java 的缩写(for≈4),也就是简易的日志门面,以外观模式(Facade pattern,一种设计模式,为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用)实现。slf4j桥接到具体日志框架 可以看到slf4j与具体日志框架结合的方案有很多种。当然,每种方案的最上层(绿色的应用层)都是统一的,它们向下都是直接调用slf4j提供的API(浅蓝色的抽象API层),依...原创 2021-03-30 08:58:12 · 521 阅读 · 0 评论 -
全局异常处理
全局异常处理@ControllerAdvice,可用作全局异常处理,然后返回处理结果给前端统一异常处理需要配合@ExceptionHandler使用。当将异常抛到controller时,可以对异常进行统一处理,规定返回的json格式或是跳转到一个错误页面//全局异常捕捉处理@ControllerAdvicepublic class CustomExceptionHandler { @ResponseBody @ExceptionHandler(value = Excepti原创 2021-02-20 14:31:32 · 260 阅读 · 0 评论 -
Druid线程池配置
Druid线程池配置配置基本线程池pom文件依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.14</version></dependency>yml配置spring: datasource: nam原创 2021-02-20 14:27:33 · 2070 阅读 · 1 评论 -
springboot-多线程实战
ThreadPoolTaskExecutor多线程配置java代码import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.EnableAsync;import org.springframework.scheduling.concurre原创 2021-01-22 14:44:23 · 339 阅读 · 0 评论 -
Memory Analyzer分析内存泄漏
Memory Analyzer分析内存泄漏模拟一次内存溢出程序不断地向ArrayList添加对象,直至溢出public class User { String userName; String passWord; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName原创 2020-12-31 09:22:38 · 2225 阅读 · 0 评论 -
应用Redis实现积分排名
应用Redis实现积分排名1.首先我们需要一个RankDo对象存储id和分数import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.io.Serializable;@Data@NoArgsConstructor@AllArgsConstructorpublic class RankDo implements Serializable { pri原创 2020-12-28 17:09:41 · 363 阅读 · 0 评论 -
SpringBoot注解的使用
文章目录定义一个注解注解的处理业务方法引入注解定义一个注解import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIM原创 2020-12-25 11:03:47 · 91 阅读 · 0 评论 -
生成fpx证书
step1:生成keystore文件keytool -genkey -alias lyocr -keypass waddrr -keyalg RSA -keysize 1024 -validity 3650 -keystore D:/keys/lyocr.keystore -storepass waddrstep2:将keystore 转crt key pfx文件JKS2PFX D:/keys/lyocr.keystore waddrr lyocr lyocr...原创 2020-07-30 18:15:09 · 1409 阅读 · 0 评论 -
easyExcel的读写
读Excel的两种方式:方法一:同步读创建文件流,并读取文件到dataListInputStream fileStream = new FileInputStream(localFilePath);//文件流List<Object> dataList = EasyExcelFactory.read(fileStream,new Sheet(1,1,Table.class));//读取文件流System.out.println(dataList);//读取结果Table.cla原创 2020-06-04 09:41:07 · 1464 阅读 · 0 评论 -
mapStruct——VO-DO工具
注解@Mapper(componentModel = "spring")-自动生成VO-DO的模型映射场景: 插件可以自动生成实现类,实现DTO-DO各种模型之间的字段映射(不仅仅限制于DTO-DO)第一步: 引入pom文件 <!--mapStruct依赖--> <dependency> <groupId>org.mapstruct</groupId> .转载 2020-05-29 09:00:11 · 346 阅读 · 0 评论 -
in方式的参数传递
发现问题对于预编译的SQL语句,in(?)该如何传参呢,?中是一个列表,如'1','2','3'.直接替换后应该是 in ('1','2','3'),但是把'1','2','3'传进却不能正确的执行取得结果,跟踪发现参数转义了,变成in (''1','2','3'') ,导致结果不对。正确参考思路1:PreparedStatement statement = connection.p...原创 2020-03-10 11:05:18 · 2852 阅读 · 3 评论 -
AES/GCM/NoPadding 方式加密
1.采用GCM方式加密高级加密标准(AES)加密算法可以在各种模式下使用。某些组合不安全:电子密码本(ECB)模式:在给定密钥下,任何给定的明文块始终被加密为相同的密文块。因此,它不能很好地隐藏数据模式。从某种意义上说,它不提供严重的消息机密性,并且完全不建议在加密协议中使用它。 具有PKCS#5填充(或PKCS#7)的密码块链接(CBC)易受填充oracle攻击。在这两种情况下,都应...原创 2020-03-02 10:36:36 · 18780 阅读 · 3 评论 -
java多播
java 的多播通讯转载 2016-12-22 10:43:40 · 713 阅读 · 0 评论