- 博客(68)
- 资源 (2)
- 收藏
- 关注
原创 Docker常用命令与实战示例
Docker是一个开源的容器化平台,它为开发人员和运维团队提供了一种更加高效、灵活的方式来构建、打包、部署和运行应用程序
2024-06-22 21:25:39 566
原创 详解优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器
Spring中的ThreadPoolTaskExecutor是借助于JDK并发包中的java.util.concurrent.ThreadPoolExecutor来实现的
2024-03-16 20:49:49 1922
原创 解决:InheritableThreadLocal与线程池共用的问题
InheritableThreadLocal 是 ThreadLocal 的一个子类,它不但继承了ThreadLocal的所有特性,父线程中的 InheritableThreadLocal 变量的值可以被子线程继承。
2024-03-16 18:40:28 1638
原创 InheritableThreadLocal和ThreadLocal的区别和使用场景
快人快语,先说结论,InheritableThreadLocal 是 ThreadLocal 的一个子类,它包含ThreadLocal 的所有功能并且扩展了 ThreadLocal 的功能,允许父线程中的 InheritableThreadLocal 变量的值被子线程继承。这意味着,当创建一个新的线程时,这个新线程可以访问其父线程中 InheritableThreadLocal 变量的值。
2024-03-15 20:40:46 1169
原创 【redission分布式锁】到底要用lock还是tryLock
如果想实现分布式锁请看上一篇文章【上一篇文章留了一个小尾巴,redission的lock方法是会阻塞的,具有一定的风险,意思就是说,这是一个获取锁的方法,但是如果锁已经存在会进行等待。这个等待是没有时间限制的,有兴趣可以看一下源码,利用的是while(true)循环。注解意思是,获取锁,获取不到就等待,但是waitTime耗尽的时候就不再等待,并返回false。跟lock的区别有两个,一是不会无限等待,甚至可以不等待(waitTime设置为0);二是有返回值,代表是否占用锁成功。
2024-03-09 15:50:34 1102
原创 【解决】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 1385 1
原创 文心一言代码能力测试:文心一言能否取代程序员?
文心一言代码协助能力使用体验,这篇博客基本上就是文心一言帮忙写的,素材是我和文心一言的对话,国产大语言模型确实取得了巨大的成就,在和文心一言对话的过程中感到未来已来,确实和之前的自动问答机器人不一样。我连续指正两次问题,但是文心一言还是没有get到点,文心一言的知识储备是没有问题,代码本身也是可以运行,对于方法的封装、代码风格都是可圈可点,只是没有解决问题。问:上面生成的代码,仅仅更新了redis中的库存变量,但是库存的更改也应该同时修改数据库中的数据,并且保证redis和数据库的一致性。
2023-09-16 17:34:22 1307
转载 SQL开窗函数over()的用法实例
最近用到了开窗函数,但我在本地想要学习用法时,本地的MySql服务器版本太低不支持该函数,故转载其他人的博客记录一下,待以后再详细还原。
2022-08-07 15:32:48 3271
原创 SpringBoot+HibernateValidator优雅的接口入参校验(代码实例)
SpringBoot+HibernateValidator优雅的接口入参校验(代码实例)
2022-03-28 20:56:51 447
原创 Spring/SpringBoot统一异常处理@RestControllerAdvice(ExceptionHandleAdvice)
Spring/SpringBoot统一异常处理@RestControllerAdvice(ExceptionHandleAdvice)异常的友好化处理
2021-11-30 22:57:15 941
原创 使用Spring AOP实现方法入参日志打印/请求响应日志打印
在实际的项目中对外暴露的接口通常需要打印请求日志,以下就是使用切面做一个请求日志打印的功能:首先先导入AOP相关的包,SpringBoot的项目启动类需要添加@EnableAspectJAutoProxy 注解<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></de
2021-11-28 18:43:46 1045
原创 解决:同一个类中方法调用,导致@Transactional失效(AopContext.currentProxy())
我前面有一个文章讲了当调用本类方法时,被调用方法的@Transactional注解会失效,所以建议大家用编程式事务。Spring/SpringBoot实现编程式事务然而今天,自己推翻我自己,分享一个怎么在调用当前类带有事务注解的方法时,还能强制使事务生效的方式。((YourClass) AopContext.currentProxy()).withTransactionMethod(keyword);这种写法相当于用AOP的方式调用同类的方法,使得@Transactional注解生效。spring
2021-11-28 18:05:16 4216 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 868 1
原创 Spring/SpringBoot实现编程式事务
首先需要了解的是为什么需要编程式事务?声明式事务(@Transactional)明明更简洁好用。声明式事务的缺陷声明式事务表面上简洁好用,但是实际上是牺牲了一些灵活性的,@Transactional注解并不是用在哪里都能生效,@Transactional生效的条件:@Transactional注释的方法,不能是private修饰@Transactional注释的方法,必须是有接口的方法实现(通用的Spring面向接口编程的套路)@Transactional注释的方法,必须要通过接口的方式调用,才
2021-10-05 16:14:48 1615
原创 详解:被人误解的ScheduledThreadPoolExecutor定时器
总所周知,ScheduledThreadPoolExecutor是更优于Timer的JDK定时任务,该类支持多线程执行定时任务,能够保证更加准确的时间间隔。该类有三个核心方法,他们分别是:schedule 创建并执行在给定延迟后启用的单次操作。public ScheduledFuture<?> schedule(Runnable command,long delay,TimeUnit unit)scheduleAtFixedRate 创建并执行在给定的初始延迟之后,随后以给定的时间段
2020-12-29 22:21:51 712
原创 Java定时器之JDK自带的定时器实现方式
既然要详细说说定时器,就由浅入深,先从最简单的说起。我首先接触到的定时器就是根据线程的Thread.sleep()方法实现的,最开始学习java的时候,会用这个方法实现一些简单的动画效果,今天就来回顾一下当初的小动画!1. 利用Thread.sleep();方法实现定时任务首先 Thread.sleep(times)方法是干嘛的呢,它是用来阻塞当前线程运行的一个方法,按字面意思就是让当前线程睡一会,把CPU资源让给其他线程……你给它传入一个long参数,就是你希望她睡多久的时间值。随便一提,我旁边的
2020-12-25 00:21:36 889
原创 详解Redis集群配置哨兵模式(redis-sentinel)
哨兵模式详解背景在哨兵模式出现之前,如果redis主从复制集群的主服务器宕机,那么运维人员需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,哨兵模式出现之后,这种方式基本已经被替代。什么是哨兵模式哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。这里的哨兵有两个作用:通过发送命令,让R
2020-11-16 17:59:20 717
原创 搭建Redis简易集群实现主从复制和读写分离
redis不禁支持去中心化的集群模式,也可以实现主从复制集群。下面我将一步步搭建一套简易的主从复制集群,帮助大家理解主从复制和哨兵模式。1. Redis的下载安装请参考:Linux(centos7)安装配置并启动Redis全过程及make报错问题解决2. 主从复制模型我画了个草图,这是一个一主二从的简易集群模型,master用来写入,slave用来读数据,实现读写分离。我们接下来就是要实现这样一个集群系统。3. 集群环境搭建我这里使用了一台centos7的虚拟机来搭建这个demo,所需环境.
2020-11-11 19:32:54 803 2
原创 解密Redis事务(redis事务有没有原子性)
事务是什么意思事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元);事务的四大特性:原子性事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做一致性事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事
2020-11-11 11:52:54 2789
原创 解决:连接远程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 1880
原创 Redis常用命令及用法大全
最近面试了很多java开发,简历上清一色的写着熟练使用redis,但是只能回答redis是什么,缓存雪崩、缓存穿透是什么意思等常见面试问题,就连redis常用命令都说不上来。现在很多框架或者工具都已经封装的很完美,用起来也只是傻瓜式操作,但是作为一个开发者,不能仅仅当一个傻瓜。PS: redis所有命令不区分大小写1. 联通测试启动服务端和客户端之后,首先要进行客户端是否连通服务端,命令如下命令描述ping收到‘pong’说明联通成功2. KEY命.
2020-11-04 18:49:47 384
原创 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 2054 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 834
原创 将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 779
原创 设置GitIgnore 避免不必要的文件上传到git
将自己的本地项目提交到github的时候,往往会将一些乱七八糟的本地配置文件上传到远程仓库,有的文件还会导致clone下来的项目报错,这些文件诸如:我们可以通过idea设置GitIgnore:常见的忽略文件设置:*.hprof;*.pyc;*.pyo;*.rbc;*.yarb;*~;.DS_Store;.git;.hg;.svn;CVS;__pycache__;_svn;vssver.scc;vssver2.scc;*.mvn;*.md;mvnw;*.cmd;*.gitignore;*.log;
2020-10-10 15:48:29 607
原创 Log4j.properties实例
### 设置###log4j.rootLogger = debug,stdout,D,E### 输出信息到控制抬 ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.Co
2020-10-03 21:17:57 254
原创 Mybatis:解决属性名和字段名不一致的问题
问题描述常见的mybatis语句:<select id="getAllUsers" resultType="com.term.model.User"> select * from user </select>当数据库中的字段名和实体类的属性名一致的时候,类型映射器将自动赋值,并返回一个完整的User对象。而当有属性名和字段名不一致的时候,自动赋值无法完成,会出现属性值为空的情况。解决方法1、Sql语句使用别名<select id="get
2020-10-03 18:27:25 755
原创 Idea自定义设置/常用配置
每次重装系统或者升级工作环境,都要面临重装开发工具重新配置的苦恼,记录一下我的idea常用配置1、常规设置更改字体大小Editor–>Font中 修改字体大小更改主题Appearance&Behavior -> Appearance -> Theme 设置为 Darcula创建文件时 增加注释信息Editor–>File and Code Templates–>includes–>File Header设置文件编码Editor–>File
2020-10-03 17:33:07 467
原创 用Idea搭建一个Mybatis项目
什么是 MyBatis?MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。官方文档https://mybatis.org/mybatis-3/zh/index.html最好的官方文档之一,一篇文档读懂,根
2020-10-03 15:53:25 1144 2
原创 Jackson简介
Java生态圈中有很多处理JSON和XML格式化的类库,Jackson是其中比较著名的一个。虽然JDK自带了XML处理类库,但是相对来说比较低级,使用本文介绍的Jackson等高级类库处理起来会方便很多。引入类库由于Jackson相关类库按照功能分为几个相对独立的,所以需要同时引入多个类库,为了方便我将版本号单独提取出来设置,相关Gradle配置如下。ext { jacksonVersion = '2.9.5'}dependencies { compile group: 'co
2020-09-18 21:14:09 1068
原创 图解用idea搭建一个Gradle+Spring的web工程(建项目)
上一篇文章详细介绍了下载gradle之后环境的配置,已经gradle仓库的基本配置,接下来我们聊聊实战,怎么用gradle搭建一个WEB项目。环境:Windows10、JDK8开发工具:Idea框架:Spring、Gradle新建webapp文件夹打开idea,找到上篇文章我们一起新建的空白项目(没看上一篇的现在看也行,很短的)现在它只是一个java项目,并不是javaweb项目,我们先给它注入web项目的灵魂:在项目的main文件夹下创建一个叫webapp的文件夹,然后再在webapp下面创
2020-08-17 21:22:30 1100
SpringCloud全家桶+Springboot+Mybatis+MySql项目pom.xml文件开箱即用开箱即用
2023-12-24
飞机大战/雷霆战机 全部Java源代码,可运行
2019-03-05
高可靠性的Apache负载均衡服务器组的搭建 Apache集群
2018-09-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人