- 博客(75)
- 资源 (2)
- 收藏
- 关注
原创 go语言设计模式-适配器模式
现实中我们经常见到的适配器便是充电器,是因为我们已有的电源接口一般是220V,而我们手机充电一般需要5V电压,所以需要一个适配器让已有的接口适配新的需求。类比到代码中来,我们已有的功能(Adaptee)可能不完全适配新的需求(Target),但是我们只要加一个适配器(Adapter)做一个转换或者组装,就能复用已有的逻辑,这就是适配器的思想,具体的代码设计如下:适配者(Adaptee):已有的、原始的类(不兼容当前接口,需要适配)。适配器(Adapter)
2025-03-06 14:59:57
625
原创 Golang轻松实现消息模板变量替换:text/template
是 Go 语言标准库中的一个包,用于生成文本输出。它通过解析模板并根据给定的数据执行模板来生成最终的文本。提供了强大的模板引擎,支持条件判断、循环、变量替换等功能。
2025-02-13 11:28:11
612
原创 Docker常用命令与实战示例
Docker是一个开源的容器化平台,它为开发人员和运维团队提供了一种更加高效、灵活的方式来构建、打包、部署和运行应用程序
2024-06-22 21:25:39
631
原创 详解优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器
Spring中的ThreadPoolTaskExecutor是借助于JDK并发包中的java.util.concurrent.ThreadPoolExecutor来实现的
2024-03-16 20:49:49
2620
原创 解决:InheritableThreadLocal与线程池共用的问题
InheritableThreadLocal 是 ThreadLocal 的一个子类,它不但继承了ThreadLocal的所有特性,父线程中的 InheritableThreadLocal 变量的值可以被子线程继承。
2024-03-16 18:40:28
2073
原创 InheritableThreadLocal和ThreadLocal的区别和使用场景
快人快语,先说结论,InheritableThreadLocal 是 ThreadLocal 的一个子类,它包含ThreadLocal 的所有功能并且扩展了 ThreadLocal 的功能,允许父线程中的 InheritableThreadLocal 变量的值被子线程继承。这意味着,当创建一个新的线程时,这个新线程可以访问其父线程中 InheritableThreadLocal 变量的值。
2024-03-15 20:40:46
1359
原创 【redission分布式锁】到底要用lock还是tryLock
如果想实现分布式锁请看上一篇文章【上一篇文章留了一个小尾巴,redission的lock方法是会阻塞的,具有一定的风险,意思就是说,这是一个获取锁的方法,但是如果锁已经存在会进行等待。这个等待是没有时间限制的,有兴趣可以看一下源码,利用的是while(true)循环。注解意思是,获取锁,获取不到就等待,但是waitTime耗尽的时候就不再等待,并返回false。跟lock的区别有两个,一是不会无限等待,甚至可以不等待(waitTime设置为0);二是有返回值,代表是否占用锁成功。
2024-03-09 15:50:34
1593
原创 【解决】org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose(Ljava/lang/String……
本质上是jar包冲突,nacosnacos依赖的ribbon和springcloud的ribbon存在同个方法的不同实现,导致了不兼容。主要原因是还是jar包冲突,nacos依赖的ribbon和springcloud的ribbon存在同个方法的不同实现,不兼容。开发环境:本地SpringCloud项目升级SpringCloud版本,调用Feign接口,通过ribbon配置负载均衡。mvn重新编译,项目再次启动,问题解决。
2023-12-23 17:48:16
1848
1
原创 文心一言代码能力测试:文心一言能否取代程序员?
文心一言代码协助能力使用体验,这篇博客基本上就是文心一言帮忙写的,素材是我和文心一言的对话,国产大语言模型确实取得了巨大的成就,在和文心一言对话的过程中感到未来已来,确实和之前的自动问答机器人不一样。我连续指正两次问题,但是文心一言还是没有get到点,文心一言的知识储备是没有问题,代码本身也是可以运行,对于方法的封装、代码风格都是可圈可点,只是没有解决问题。问:上面生成的代码,仅仅更新了redis中的库存变量,但是库存的更改也应该同时修改数据库中的数据,并且保证redis和数据库的一致性。
2023-09-16 17:34:22
1572
转载 SQL开窗函数over()的用法实例
最近用到了开窗函数,但我在本地想要学习用法时,本地的MySql服务器版本太低不支持该函数,故转载其他人的博客记录一下,待以后再详细还原。
2022-08-07 15:32:48
3475
原创 SpringBoot+HibernateValidator优雅的接口入参校验(代码实例)
SpringBoot+HibernateValidator优雅的接口入参校验(代码实例)
2022-03-28 20:56:51
474
原创 Spring/SpringBoot统一异常处理@RestControllerAdvice(ExceptionHandleAdvice)
Spring/SpringBoot统一异常处理@RestControllerAdvice(ExceptionHandleAdvice)异常的友好化处理
2021-11-30 22:57:15
989
原创 使用Spring AOP实现方法入参日志打印/请求响应日志打印
在实际的项目中对外暴露的接口通常需要打印请求日志,以下就是使用切面做一个请求日志打印的功能:首先先导入AOP相关的包,SpringBoot的项目启动类需要添加@EnableAspectJAutoProxy 注解<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></de
2021-11-28 18:43:46
1096
原创 解决:同一个类中方法调用,导致@Transactional失效(AopContext.currentProxy())
我前面有一个文章讲了当调用本类方法时,被调用方法的@Transactional注解会失效,所以建议大家用编程式事务。Spring/SpringBoot实现编程式事务然而今天,自己推翻我自己,分享一个怎么在调用当前类带有事务注解的方法时,还能强制使事务生效的方式。((YourClass) AopContext.currentProxy()).withTransactionMethod(keyword);这种写法相当于用AOP的方式调用同类的方法,使得@Transactional注解生效。spring
2021-11-28 18:05:16
4544
1
原创 SpringBatch-Mysql建表和初始化语句
SpringBatch-Mysql建表和初始化语句CREATE TABLE `batch_job_instance` ( `JOB_INSTANCE_ID` bigint(20) NOT NULL COMMENT '主键。作业实例ID编号,根据BATCH_JOB_SEQ自动生成', `VERSION` bigint(20) DEFAULT NULL COMMENT '版本号', `JOB_NAME` varchar(100) NOT NULL COMMENT '作业名称。即在配置文件中定义的
2021-10-05 23:07:21
984
1
原创 Spring/SpringBoot实现编程式事务
首先需要了解的是为什么需要编程式事务?声明式事务(@Transactional)明明更简洁好用。声明式事务的缺陷声明式事务表面上简洁好用,但是实际上是牺牲了一些灵活性的,@Transactional注解并不是用在哪里都能生效,@Transactional生效的条件:@Transactional注释的方法,不能是private修饰@Transactional注释的方法,必须是有接口的方法实现(通用的Spring面向接口编程的套路)@Transactional注释的方法,必须要通过接口的方式调用,才
2021-10-05 16:14:48
1697
原创 详解:被人误解的ScheduledThreadPoolExecutor定时器
总所周知,ScheduledThreadPoolExecutor是更优于Timer的JDK定时任务,该类支持多线程执行定时任务,能够保证更加准确的时间间隔。该类有三个核心方法,他们分别是:schedule 创建并执行在给定延迟后启用的单次操作。public ScheduledFuture<?> schedule(Runnable command,long delay,TimeUnit unit)scheduleAtFixedRate 创建并执行在给定的初始延迟之后,随后以给定的时间段
2020-12-29 22:21:51
777
原创 Java定时器之JDK自带的定时器实现方式
既然要详细说说定时器,就由浅入深,先从最简单的说起。我首先接触到的定时器就是根据线程的Thread.sleep()方法实现的,最开始学习java的时候,会用这个方法实现一些简单的动画效果,今天就来回顾一下当初的小动画!1. 利用Thread.sleep();方法实现定时任务首先 Thread.sleep(times)方法是干嘛的呢,它是用来阻塞当前线程运行的一个方法,按字面意思就是让当前线程睡一会,把CPU资源让给其他线程……你给它传入一个long参数,就是你希望她睡多久的时间值。随便一提,我旁边的
2020-12-25 00:21:36
947
原创 详解Redis集群配置哨兵模式(redis-sentinel)
哨兵模式详解背景在哨兵模式出现之前,如果redis主从复制集群的主服务器宕机,那么运维人员需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,哨兵模式出现之后,这种方式基本已经被替代。什么是哨兵模式哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。这里的哨兵有两个作用:通过发送命令,让R
2020-11-16 17:59:20
798
原创 搭建Redis简易集群实现主从复制和读写分离
redis不禁支持去中心化的集群模式,也可以实现主从复制集群。下面我将一步步搭建一套简易的主从复制集群,帮助大家理解主从复制和哨兵模式。1. Redis的下载安装请参考:Linux(centos7)安装配置并启动Redis全过程及make报错问题解决2. 主从复制模型我画了个草图,这是一个一主二从的简易集群模型,master用来写入,slave用来读数据,实现读写分离。我们接下来就是要实现这样一个集群系统。3. 集群环境搭建我这里使用了一台centos7的虚拟机来搭建这个demo,所需环境.
2020-11-11 19:32:54
837
2
原创 解密Redis事务(redis事务有没有原子性)
事务是什么意思事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元);事务的四大特性:原子性事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做一致性事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事
2020-11-11 11:52:54
2874
原创 解决:连接远程redis服务失败(在linux部署)
问题描述:我在远程linux上部署了redis服务并在linux本地连接成功,但是在远程windows上用Jedis(或redis客户端)连接失败。代码如下: public static void main(String[] args) { Jedis jedis = new Jedis("192.168.31.150", 6379); System.out.println(jedis.ping()); }错误日志如下(*是为了隐藏真实信息)Excepti
2020-11-05 11:28:37
1948
原创 Redis常用命令及用法大全
最近面试了很多java开发,简历上清一色的写着熟练使用redis,但是只能回答redis是什么,缓存雪崩、缓存穿透是什么意思等常见面试问题,就连redis常用命令都说不上来。现在很多框架或者工具都已经封装的很完美,用起来也只是傻瓜式操作,但是作为一个开发者,不能仅仅当一个傻瓜。PS: redis所有命令不区分大小写1. 联通测试启动服务端和客户端之后,首先要进行客户端是否连通服务端,命令如下命令描述ping收到‘pong’说明联通成功2. KEY命.
2020-11-04 18:49:47
438
原创 Linux(centos7)安装配置并启动Redis全过程及make报错问题解决
下载并将压缩包传到虚拟机,下载地址:https://redis.io/然后通过xftp将压缩包传到虚拟机/opt 目录下解压官网压缩包cd /opt 到压缩包所在目录下执行解压缩命令tar -zxvf redis-6.0.5.tar.gz安装gcc(redis6版本及以上请往下看)yum -y install gcc-c++进入解压文件夹,执行make因为make命令执行的,其实是一个名为baimakefile,或者是名du为Makefile(Linux是大小写敏感的)的文件里的
2020-10-30 14:58:16
2539
1
原创 Linux安装JDK8并配置环境变量
1.下载jdk去Oracle官网下载最新jdk8https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html我这里选择下载 jdk-8u271-linux-x64.rpm注意:i586是32位的,x64是64位的,根据Linux系统位数来选择。2.登录Linux系统,切换root用户在终端输入“su root”命令,回车,再输入root用户密码。(获取最大权限)3.安装JDK不管你用啥子方式,在这一步之
2020-10-29 15:48:58
868
原创 将Idea中的项目上传到github报错:refusing to merge unrelated histories
问题描述:问题出现于我将本地写的项目上传到github时。本地git仓库已经初始化,并进行了add和commit到本地仓库的操作。当我直接执行push到origin/master(main)操作时会报错:Push rejected: Push to xxx/master was rejected具体错误日志如下:Pushing to xxx.gitTo xxx.git ! [rejected] master -> master (non-fast-forward)er
2020-10-10 16:52:12
799
SpringCloud全家桶+Springboot+Mybatis+MySql项目pom.xml文件开箱即用开箱即用
2023-12-24
飞机大战/雷霆战机 全部Java源代码,可运行
2019-03-05
高可靠性的Apache负载均衡服务器组的搭建 Apache集群
2018-09-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人