- 博客(53)
- 资源 (1)
- 收藏
- 关注
原创 缓存穿透、击穿、雪崩及应对策略
大量缓存数据在同一时间过期(失效)或者 Redis 故障宕机时,大量的用户请求直接访问数据库,导致数据库压力骤增甚至宕机,造成整个系统崩溃。
2023-02-06 22:41:31 866
原创 Redis持久化策略(RDB/AOF)及选型
Redis持久化的意义:防止服务或系统宕机导致数据丢失。Redis提供了两种持久化策略:RDB(Redis DataBase)、AOF(Append Only File)。注:RDB和AOF可以同时使用,也可以都不使用。在前者的情况下Reids会优先使用AOF恢复数据(完整度高),后者情况下Redis将变成纯内存数据库(断电即失)。
2023-02-06 21:23:47 773
原创 Java for和foreach区别及性能选型
3建议ArrayList使用普通for循环,降低上下文和参数的复杂度;LinkedList使用foreach循环更适配链表数据结构。
2022-12-07 16:34:11 721
原创 resttemplate无法接收[text/json;charset=UTF-8]
org.springframework.web.client.UnknownContentTypeException: Could not extract response: no suitable HttpMessageConverter found for response type [class java.lang.Object] and content type [text/json;charset=UTF-8]
2022-11-14 17:24:25 1807
原创 编译时报错:zip END header not found 解决方法
Java: 读取E:\apache-maven-3.8.2\repository\com\lowagie\itext\2.1.7\itext-2.1.7.jar时出错; zip END header not found
2022-11-03 16:10:49 22427 2
原创 MyBatis整合A.CTable自动建表
实测ACTable能试别到Mybatis-Plus的相关注解,所以如果原项目已经整合的Mybatis-Plus,是不需要在实体类上额外加注解就能自动建表的(如@TableName、@TableId、@TableField这些注解)。这里有的博主用的1.5.0版本,但是实测有的项目下会有bug,所以这里用的1.4.9。
2022-09-21 16:04:57 459
原创 List调用add方法报UnsupportedOperationException
这是因为Arrays.asList()方法返回的是Arrays类的一个内部嵌套类ArrayList,这里的ArrayList和直接new出来的不一样,是不支持任何修改操作的,一旦修改就会抛出UnsupportedOperationException这一异常。
2022-08-01 17:13:31 1081
原创 使用Arrays.sort方法对对象排序
Arrays.sort()方法对引用类型(对象)排序有两种方法:继承Comparable接口并实现compareTo方法import java.util.Arrays;public class Test { public static void main(String[] args) { Man[] msMans = { new Man(3, "a"), new Man(60, "b"), new Man(2, "c") }; Arrays.sort(msM.
2022-05-06 16:46:56 1936
原创 Java实现S3分段上传(解决大文件上传问题)
Amazon S3会限制单次上传的大小,上传过大的文件会导致上传失败(单次上传的最大数据元是5GB),官方建议的是大于100MB的文件就应该考虑分段上传。一般而言,如果您的对象大小达到了 100 MB,您应该考虑使用分段上传,而不是在单个操作中上传对象。官方文档地址网上的代码大部分要么是单线程执行很慢,要么就是本地的临时文件(File)没有删除,这里参考了网上现有的代码做了一些整合,具体代码如下:/** * 分段上传文件至S3 * @param file * @param s3Key.
2022-04-13 17:11:44 9943 18
原创 JPA读不到已提交事务的数据
最近开发碰到一个问题,事务B中的查询需要用到事务A中提交的数据,所以我就让事务B循环查询数据库,等待事务A提交后再继续执行。但是最后发现事务B怎么等也等不到事务A的数据=.= (这里有个前提,事务AB所在方法都是主方法执行完毕后开启的异步方法,事务A和事务B无法控制开启的先后顺序),所以浅看了一下事务是怎么个回事。这里首先要清楚事务的四种隔离级别:事务隔离级别:Read Uncommitted(未提交读);Read Committed(已提交读):解决脏读;Repeatable Read(可.
2022-03-30 22:29:30 1482
转载 SpringBoot项目启动后直接退出Process finished with exit code 1
启动SpringBoot项目时,往往会出现一些错误。这种错误没有明确的指向信息,但可以肯定的是springboot启动失败了。如何找到具体失败的原因呢。SpringBoot的启动简单来说就包括两个部分1.SpringApplication 的实例化。即:SpringApplication application = new SpringApplication(QurtzJdbcApplication.class)2.执行run()方法。application.run(args)所以问题就应该出
2021-11-11 15:18:39 1226
原创 JDK1.8 HashMap扩容源码(resize()方法)解读
扩容源码 final Node<K,V>[] resize() { Node<K,V>[] oldTab = table; //oldCap:旧数组长度,oldThr:旧扩容阈值,newCap:新数组长度,newThr:新扩容阈值 int oldCap = (oldTab == null) ? 0 : oldTab.length; int oldThr = threshold; int newCap, .
2021-09-17 22:12:59 245
原创 SpringCloud实现服务间调用
Eureka注册的服务之间调用不需要指定服务地址,而是通过服务名向注册中心咨询,并获取所有服务实例清单(缓存到本地),然后实现服务的请求访问。Ribbon//tencent是在Eureka中注册的服务名,"meetings/modify"是具体的接口地址ResponseEntity<ResponseResult> response = myRestTemplate.postForEntity("http://tencent/meetings/modify", req, ResponseRe
2021-08-30 15:00:33 292
原创 斐波那契数列java实现
斐波那契数列斐波那契数列定义:F(n)=F(n-1)+F(n-2)(n>=2,F(0)=0,F(1)=1)java实现: /** * 递归,当n较大时时间复杂度极高,且有很多重复计算 * * @param n * @return */ public static long getFibonacciByRecursion(int n) throws Exception { if (n == 1) return
2021-08-10 21:00:15 199
原创 同一个catch代码块捕获多个异常
写try/catch的时候可能有多个异常类型处理方式相同,如果用多个catch代码块的话代码会很冗余,可以用如下写法进行简化:try { //```} catch (ServiceRequestException | AutodiscoverLocalException e) { log.error("Error=============>" + e.getMessage());} catch (Exception e) { log.error("Error=======
2021-06-25 10:45:01 819
原创 SpringBoot异步执行方法
SpringBoot中使用@Async注解标记的方法,会在调用方法的当前线程之外的独立线程中执行。Spring使用@Async注解实现异步任务:application类上加@EnableAsync注解:@EnableAsyncpublic class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); }}.
2021-06-18 10:50:46 1348
转载 EWS(Exchange Service)基本使用(Java)
EWS(Exchange Service)基本使用(获取个人会议,会议室会议内容,会议室列表,发送会议,修改会议,删除会议)最近公司要求和exchange服务对接,所以稍微研究了一下官方文档,做出以下总结,欢迎大家补充。先放出exchange官方开发说明文档:https://docs.microsoft.com/zh-cn/exchange/client-developer/exchange-web-services/calendars-and-ews-in-exchange与exchange we
2021-06-08 10:10:08 2539 2
原创 RabbitMq消费者循环重复消费信息
RabbitMq消费者一直循环重复消费信息 消费者消息签收模式为自动时,如果消费端处理出现异常并且被抛出了,该条消息就会一直被重新消费。如果对生产者传递给消费者的实体数据结构进行了更改,而此时队列中还有消费者未使用的数据,那么消费者就无法接收这些数据,进而引发异常。且在未进行配置的情况下,消费者会重复接收这些数据,导致队列堵塞。解决方法:将requeue设为false:spring.rabbitmq.listener.simple.default-requeue-rejected=false
2021-05-17 10:39:13 1997
原创 RabbitMq传递的实体修改引发阻塞
项目有些地方需要用RabbitMq去实现队列,队列的相关代码如下:/****传入队列*****/rabbitTemplate.convertAndSend(CommonConstant.MEETING_STATUS_EXCHANGE, CommonConstant.MEETING_STATUS_ROUTING, new WSMessgeDTO(meeting, WSMessgeDTO.MeetingChangeType.CREATE));/*****接收************/@Rabbit.
2021-05-12 11:09:14 356
原创 SpringBoot返回文件给前端
主要代码如下:/** * 通过HttpServletResponse将文件流返回给前端 * * @param response HttpServletResponse在Controller层直接接收即可 * @param is 需要返回的文件流 * @param fileName 文件名 * @return */private static ResponseEntity<InputStreamResource> encapsulateResponseEntities(HttpS
2021-04-22 10:59:47 6899
原创 JPA原生sql接收自定义实体
JPA写原生sql的时候接收到的返回值可能是不同于定义的实体类的,比如接收到的返回值是从不同表中拿到的不同字段组成的实体,此时用HashMap或者自定义的DTO去接是会报错的。如果不想在某个实体中加大量的@Transient注解标注的字段去接这个返回值,则需要自定义一个接口去接,以下进行举例://比如我这里这段sql是获取某个设备当前在线和离线的数量@Query(value = "Select (Select COUNT(ws.id ) FROM table ws where last_updated
2021-04-09 14:46:57 1407
原创 Long类型数据传到前端精度丢失问题
Long类型数据传到前端精度丢失问题原因JS内置有32位整数,而number类型的安全整数是53位。如果超过53位,则精度会丢失。正如现在后台传来一个64位的Long型整数,因为超过了53位,所以后端返回的值和前端获取的值会不一样。出现场景网上有很多改序列化方式让Long类型数据变成String类型的方法,试了都没什么用,后来仔细看了下发现,即视不加这些序列化方法,常规的后端Long类型数据传到前端都会自动转成字符串(包括自己new出来的一些DTO、JPA直接查出来的实体等等)。但在一些自己重写的方
2021-03-25 11:18:02 521
原创 POI cell.setCellType()过时的替代方案
POI cell.setCellType()替代方案用poi读取excell单元格数据时需要指定格式,不然可能会报形如:Cannot get a STRING value from a NUMERIC cell这样的错,但是r.getCell(0).setCellType();这个方法显示已过时了(=.=#),点进去找找有没有替代方案,看到这么一行注释:/**If what you want to do is get a String value for your numeric cell,
2021-03-19 11:03:40 10001 10
原创 left join副表查询条件影响了主表查询结果
问题描述:left join副表查询条件影响了主表查询结果sql代码如下:SELECT count(r.id) as weight ,r.*,m.*FROM room r left join meeting m on m.room_id =r.id where r.tenant_id =1 and r.is_del = 0 and (m.organizer_id = 7 OR m.organizer_id IS NULL ) GROUP BY r.id,r.name如上,meeting表.
2021-03-07 17:27:07 1485 1
原创 Gateway一直访问本地
配置文件中配了远程nacos服务的地址,但是一启gateway项目就连本地:2021-03-07 10:06:58.431 INFO 8388 --- [ main] c.a.n.c.c.impl.LocalConfigInfoProcessor : LOCAL_SNAPSHOT_PATH:C:\Users\l22966\nacos\config2021-03-07 10:06:58.456 INFO 8388 --- [ main] c.a.nacos.c
2021-03-07 10:20:10 2113 2
原创 BaseModel(主键用雪花算法生成)
最近项目用的BaseModel,主键生成方案用的雪花算法,感觉通用性比较强,做个存档,有需要直接复制过来用就行了:import com.fasterxml.jackson.annotation.JsonIgnore;import com.fasterxml.jackson.databind.annotation.JsonDeserialize;import com.fasterxml.jackson.databind.annotation.JsonSerialize;import com.fas.
2021-01-22 10:54:30 340
原创 子类报错:No identifier specified for entity
新项目需要定义的实体类很多,每个类都需要定义主键、创建时间、最后修改时间,主键除了少数是自增其他都是雪花算法生成,为了防止代码冗余,为这些主键定义了一个公共父类BaseModel,父类域包含id、创建时间、最后修改时间这三个属性。但是继承父类后子类会报错:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class
2021-01-14 09:37:50 594 2
原创 SpringCloud依赖冲突
SpringCloud子项目引入一个依赖后子项目就起不起来了,idea提示内容如下:***************************APPLICATION FAILED TO START***************************Description:The bean 'jwtTokenEnhancer', defined in class path resource [org/springframework/boot/autoconfigure/security/oauth
2021-01-13 11:40:32 638 2
原创 JPA findById方法和getOne方法区别
JPA findById方法和getOne方法区别Jpa基础的CRUD方法继承自接口CrudRepository<T, ID>,包含以下方法:<S extends T> S save(S entity);<S extends T> Iterable<S> saveAll(Iterable<S> entities);Optional<T> findById(ID id);boolean existsById(ID id);It
2021-01-08 15:21:14 1311 2
原创 Calendar类常用方法,获取每月最大天数
Calendar类平时用到时间戳主要是用java.sql.Timestamp这个类,但是Timestamp获取年月日时分秒的方法现在都标注不推荐了,为了防止官方哪天突然给他删了,可以用Calendar类做一些替代操作。Calendar对象初始化Calendar cal = Calendar.getInstance(); // 返回一个基于当前时间和默认时区、区域设置的日历对象日历一般配合时间戳使用,所以还需要设置时间cal.setTime(timestamp); //这
2020-12-22 10:21:25 8326
原创 自动为类生成sql语句
工作原因要用到原生sql,但是类里的属性太多了,写起来简直要命,所以写了个insert、update的代码生成器,具体代码如下:package com.example.batis.Utils;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;/** * @Project: hello-wolrd * @Pa.
2020-12-18 14:26:01 670
原创 JPA写原生SQL
JPA原生sql代码示例@Repositorypublic interface ParticipantRepository extends JpaRepository<Participant,Long> { List<Participant> getByAppointmentId(Long appointmentId); int deleteByAppointmentId(Long appointmentId); Participant getB
2020-12-17 14:23:45 1124
原创 Could not determine type for: org.springframework.web.multipart.MultipartFile
SpringBoot启动时报错:Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not determine type for: org.springframework.web.multipart.Mul
2020-12-08 11:31:23 548
原创 Git常用命令
分支$ git branch -a #查看所有分支$ git branch -r #查看所有远程分支$ git branch #查看本地分支$ git branch abc #新建abc分支$ git branch -D master #删除master分支$ git branch -vv #查看本地分支和远程分支关联关系$ git checkout master .
2020-12-03 10:03:30 85
原创 RestTemplate摘要认证
ResTemplate摘要认证模拟Postman Authorization下Digest Auth(摘要认证)类型的认证方式引入依赖<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.12</version></dependency&g
2020-11-27 13:40:12 1577 3
原创 SpringBoot整合Mybatis(注解+xml)
SpringBoot整合Mybatis文章目录SpringBoot整合MybatisSpringBoot整合Mybatis引入maven依赖配置application.yml文件建实体类、Controller类、Service类官方文档:https://mybatis.org/mybatis-3/zh/getting-started.htmlSpringBoot整合Mybatis引入maven依赖(IDEA建项目的时候直接选就可以了)<dependency> <groupI
2020-11-25 10:06:49 498 1
原创 Lombok安装及常用注解
Lombok用处Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。(百度百科)IDEA安装lombokfile->Settings->plugins,在Marketplace搜索lombok然后安装即可(Eclipse)如果是maven项目,也可以在pom文件中添加依赖:<dependency>
2020-11-24 11:48:56 140
原创 equals()和==的区别(Java)
equals()和==的区别(Java)“==”用法基本数据类型:双等号比较的是值引用数据类型:双等号比较的是内存中的地址equals()用法没有重写equals()方法:比较内存中的地址重写了equals()方法:参照重写的方法重写了equals()方法的类:String:重写的equals()方法比较字符串内容;字符串判等全部使用equals()方法,双等号是根据内存地址进行判断。Integer:重写的equals()方法比较整形变量的值;注:当给Integer对
2020-11-17 15:44:39 116
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人