- 博客(19)
- 收藏
- 关注
原创 Redisson实现分布式延迟队列
使用原生的延迟线程池或者延迟队列,会导致服务宕机时数据丢失。考虑到持久化的话,使用mysql定时扫描表也是一个方法,但是时效性低,扫描间隔低的话性能开销又大。所以决定使用redission实现分布式延迟队列,可以完美解决持久化和多节点消费的问题。总结其实就是通过redission创建了一个延迟队列和一个堵塞队列,这个延迟队列与堵塞队列是绑定的,创建延迟任务时,现将任务放入延迟队列,任务到期时,会自动转入到堵塞队列。redission的take方法是线程安全的,所以也不用考虑多节点消费的线程安全问题。
2024-07-09 16:27:39
302
原创 mysql查询条件=会忽略字符末尾的空格
这个name的的类型为varchar,经过测试后发现 入参的name后面加空格不会影响查询的结果。经过查询资料得知,mysql 对 char,varchar,text类型会校验,会忽略字符末尾的空格。BINARY 会将字符强制转换为二进制进行校验。使用like来代替=,这样就逐字校验。这种情况下不符合需求。2.使用 BINARY。
2023-09-21 14:37:53
644
原创 springboot调用外部接口
getForObject方法可以理解为对getForEntity的进一步封装,它通过HttpMessageConverterExtractor对HTTP的请求响应体body内容进行对象转换,实现请求直接返回包装好的对象内容。Spring-Boot开发中,RestTemplate同样提供了对外访问的接口API,这里主要介绍Get和Post方法的使用。将token等信息放入Feign请求头中,主要通过重写RequestInterceptor的apply方法实现。三种方式,其中每种方式都有三种方法,下面介绍。
2023-08-03 11:05:15
131
原创 Java后端特殊格式字符处理
*Normalizer.isNormalized()**判断是否是正常格式的。这样的加粗黑体带格式的字符,这样的字符导致了后端接口出现了问题。在接收前端传过来的数据时,发现了带格式的特殊字符,例如。于是决定对改字段进行格式化处理。
2023-08-01 16:35:08
317
1
原创 MybatisPlus分页插件失效问题
今天重写控台,之前用的是github的pageHelper分页。准备换成mybatisPlus的分页插件。替换后发现分页并没有生效。查询报错找不到参数。mybatis映射出错。各种尝试后,判断应该是多数据源的原因。直接声明一个分页插件不行。于是修改多数据源配置,代码如下。生成多数据源的SqlSessionFactory时将分页插件注入进入就好了。然后就不报映射错误了,查询到了数据但是分页一直没有生效。
2023-06-06 18:27:33
1936
原创 线程池基础使用
由于该队列的近似无界性,当线程池中线程数量达到corePoolSize后,再有新任务进来,会一直存入该队列,而不会去创建新线程直到maxPoolSize,因此使用该工作队列时,参数maxPoolSize其实是不起作用的。一个任务被提交到线程池以后,首先会找有没有空闲并且存活线程,如果有则直接将任务交给这个空闲线程来执行,如果没有则会放到工作队列中,直到工作队列满了,才会创建一个新线程,然后从工作队列的头部取出一个任务交由新线程来处理,而将刚提交的任务放入工作队列尾部。
2023-05-04 15:18:21
71
原创 启动报错java.lang.NoClassDefFoundError: org/antlr/v4/runtime/CharStream
修改后启动报错,java.lang.NoClassDefFoundError: org/antlr/v4/runtime/CharStream。原因在于jar包的版本不对。分析依赖关系发现antlr包重复引入了,导致shardingjdbc没有使用到正确的版本号的antlr包,所以报了错。今天使用shardingjdbc进行分表时,导入shardingjdbc的依赖后,启动报错。原因在于使用配置自动生成datasource时,不能使用url而要用jdbc-url。建议学习一下maven的加载顺序的机制。
2023-04-24 16:35:22
772
原创 java比较两个json文件的差异
自己写的,欢迎补漏。其实是以第一个json文件为准,查看第二个对比第一个的差异。测试一下:效果如图:/代表子父级关系,如图上的数字代表数组的下标。
2022-07-08 16:23:18
3491
2
原创 springboot+vue jwt校验token 单点登录
CAS单点登录、OAuth2分布式,SSO(single sign on)模式:单点登录英文全称Single Sign On,简称就是SSO。它的解释是:在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。如图所示,图中有3个系统,分别是业务A、业务B、和SSO。业务A、业务B没有登录模块。而SSO只有登录模块,没有其他的业务模块。一般过程如下:当业务A、业务B需要登录时,将跳到SSO系统。SSO从用户信息数据库中获取用户信息并校验用户信息,SSO系统完成登录。然后将用户信
2022-06-10 14:17:42
1519
转载 springboot过滤器和拦截器
1、过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。2、拦截器可以获取IOC容器中的各个bean,而过滤器就不行,因为拦截器是spring提供并管理的,spring的功能可以被拦截器使用,在拦截器里注入一个service,可以调用业务逻辑。而过滤器是JavaEE标准,只需依赖servlet api ,不需要依赖spring。3、过滤器的实现基于回调函数。而拦截器(代理模式)的实现基于反射4、Fil
2022-06-10 10:01:05
6983
原创 Springboot +vue Aes加密
首先导入aes依赖编写aes工具类在需要使用的地方最直接调用即可。引入 crypto-jsnpm install -S crypto-js新建全局工具类前后端秘钥和key和加密方式,填充方式要一致。不然无法校验。
2022-06-10 09:45:28
1314
原创 docker学习笔记
(1)基本介绍Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业
2022-06-09 14:56:27
305
原创 @PostConstruct SpringBoot初始化钩子
SpringBoot在初始化的时候,是可以做预处理的。做预处理的方法有很多,今天学到了一个简单方法。直接一个@PostConstruct 注解就可以搞定。场景如下:在主程序启动的时候,我需要把一个在数据库中查出来的数据做预处理,放入服务器内存中,以便调用。首先mapper就不多说了。在方法上加上@PostConstruct 注解,然后通过spring去管理这个类。那么这个方法就会在主程序启动的时候,一起运行。...
2022-06-09 14:10:00
279
原创 linux后台任务细讲
nohup为什么要跟着&一起使用,不知道大家有没有思考过其中的小区别,另外很多人会推崇使用screen,但是实际生产环境应用场景有限我就不展开了。这次实际遇到的问题主要是因为使用crontab调用了多个不同的nohup后台执行任务,然而代码逻辑中出现对相同文件的占用导致任务进程产生冲突使得system load负载达到600之高,需要kill任务时也不能盲目操作,需要杀掉的进程多且进程名与其它正常的进程名字有交集,需要合理运用pstree找到问题的源头。使用 运行程序:使用 运行程序:一般两个一起组合使
2022-06-03 14:11:40
160
原创 SpringBoot本地磁盘映射
出于安全性考虑,SpringBoot无法直接访问本地磁盘的文件。在某些应用场景下,需要访问例如本地的图片等一些内容。这时候,我们可以通过创建一个虚拟路径来指向本地磁盘文件。重写WEB配置类,添加新的静态资源路径配置。代码如下:这种方法相当于增加静态资源路径。SpringBoot本身自带的静态资源路径并不会被替代。...
2022-06-03 14:08:47
1499
原创 SpringBoot中的装载预设属性@ConfigurationProperties
SpringBoot提供了@ConfigurationProperties注解用于装载预设属性,即在配置文件中的属性,通过设置配置文件的属性,该类对应的属性同时可以被赋予值。在使永该注解时需要先导入依赖:如下还需要在配置类上添加开启预装载注解:@EnableConfigurationProperties...
2022-06-03 14:06:10
142
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人