自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(149)
  • 收藏
  • 关注

原创 线程对局部变量以及对只能通过当前线程的局部变量才能访问到的对象进行的操作总是线程安全的

局部变量是指在函数或代码块内部定义的变量,其作用范围仅限于定义它的函数或代码块内部线程安全是指多个线程访问共享资源时,不会破坏资源的完整性。

2025-03-27 20:27:12 279

原创 Thread.join源码分析

这是Thread.join的核心代码,实际上join方法有重载,分别为join()和join(long millis),在join()方法中实际上执行的是join(0);所以最终都会进入到上述代码块中。我们知道当调用一个线程对象的join方法时,实际上是让当前线程等待该线程对象执行完成。这里要区分当前的和,这是两个概念。

2025-03-25 14:28:12 537

原创 多线程中对共享变量的操作必须保证互斥

不可见”并非绝对:即使未同步,某些情况下修改仍可能被其他线程“偶然”看到(例如JVM因内存压力自动刷新缓存)。但这是不可预测的,不能依赖。可见性 ≠ 原子性:即使线程B的修改偶然可见,也无法保证线程A读取到的是“完整修改后的值”(例如对long或double的非原子操作)。在多线程代码编写中,对于共享变量的操作不要在未同步的情况下读写,一定要保证可见性,不管是加锁还是volatile修饰。未同步的操作:若线程修改共享变量时未通过锁同步,JVM不保证其修改对其他线程可见(可能停留在本地缓存中)

2025-03-23 15:11:06 123

原创 MySQL中count(*)与count(字段区别)

的结果,我们都知道A left join B时A的结果是一定存在的,当一对多时就会A有多个相同的结果,这个时候如果A left join B的同时在后面补上删除掉B1的条件,那么结果就只有一行了,像这种情况下左边的A1同样也就会少一行。我想表达的意思时,当在连接条件主动额外删除B表的数据时,实际上总体结果数量也被删除了(删除了一整行,除非下面在一条数据的情况下才会保留左表数据,因为只剩一行了),像这种情况发生时,你不管count(A表连接B表,若A和B是一对多的关系时,会出现。只有在这种情况下count(

2025-03-13 17:23:59 216

原创 关于分布式的误区

分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。通俗的理解,所谓分布式系统,就是一个业务拆分成多个子业务,分布在不同的服务器节点,共同构成的系统称为分布式系统,同一个分布式系统中的服务器节点在空间部署上是可以随意分布的,这些服务器可能放在不同的机柜中,也可能在不同的机房中,甚至分布在不同的城市。

2025-03-10 16:42:19 469

原创 Springboot-mybatis配置多数据源

先在配置文件中定义数据库连接的基本信息,我这里是举例子所以设定了两个MySQL数据库。一般是支持同时配置不同数据库的。可以大致看一下OMS数据源配置类的注释,基本都写了这个配置类做了什么。在写完配置文件之后,我们需要写相应的配置类去读取数据库的连接信息。

2025-03-07 11:21:05 182

原创 Debian系更新软件包时忽略指定的包

我安装的是Debian12系统,有时会更新软件包,但是由于我安装了docker,国内配置的软件源-清华源无法加速,从官方下载速度极慢,经常失败,我也没有更新docker的需求,所以这里记录下忽略docker的过程。

2025-02-28 13:43:16 329

转载 Xshell的SSH断开无法连接

可通过网页控制台进入系统,服务器供应商都会提供对应的网页控制端,可登陆系统,网页登录不受影响。xshell再次连接,成功。//进入到ssh秘钥目录。

2025-02-16 02:17:26 64

原创 debian12安装后的一些设置

之前在家里捣鼓的都是CentOS,后来听说停止维护了,这次安装Debian系统,由于是第一次安装,遇到了一些奇奇怪怪的问题,这里记录一下。

2025-02-16 02:14:23 954

原创 mybatis在动态SQL判断字符串是否相等

mybatis判断字符串是否相等

2025-01-14 11:09:54 143

原创 一个类就创建Json反序列化所需的属性

平时我们开发的时候总是会有对接其他系统的需求,其他系统返回的Json并不总是简单的这种类型,有可能里面包含的数据比较杂,会出现多层嵌套呀,数组的值这种情况,我们反序列化的时候用Map当然也是可以处理的,就是比较麻烦,得一直去找,所以一般会创建一个类接收,但是遇到Json嵌套的比较多的时候并且里面的k和v属性也比较多的时候额外创建其他类又太麻烦,这种情况下我们可以使用Java的静态内部类去处理,如下。

2024-12-19 22:41:37 367

原创 终于知道大家为啥用Jackson进行json序列化的多了,记录下

之前我一直用的Gson,感觉Gson很方便,方法名简洁易懂,但是有次我对接其他平台的接口时,对方返回的json里的值是小数,使用Gson反序列化总是会处理成Double类型,尤其是需要先反序列化成Map之后再拿里面的值去转成对象时比较麻烦,看网上有解决Gson反序列化为小数的文章,配置了好一会也没配置好,就直接用Jackson了,确实很牛,可以正确识别原来对象的格式,不需要转换了,再贴下配置ObjectMapper序列化时间啥的吧,自用记录下。

2024-12-18 23:41:32 209

原创 记一次自定义类型处理器未生效的原因

之前分享过Mybatis连接PGSQL数据库,为了操作方便增加了一些类型处理器的文章,那时使用的是Springboot框架,,当时直接启动项目就注册了这些类型处理器,今天接触了新项目也要用到这些类型处理器,就自然而然的复制了过来,没想到启动项目不生效,找了半天才发现原因,这个项目是Springboot多模块的,然而我放置的位置在Springboot启动类所在的包的外面,所以导致即使加了@Configuration也无法被扫描到,根本就没生成Bean!

2024-12-18 23:30:25 243

原创 BigDecimal在进行除法运算时需要注意四舍五入的位置

BigDecimal在进行除法运算时需要注意四舍五入的位置

2024-12-16 22:01:52 252

原创 docker查看指定时间范围的日志

最后的> logs.txt 表示将容器日志输出到某个文件,这里输出到当前文件夹下的logs.txt。一般拉服务器日志到文件中使用docker logs ,会添加时间范围以更精确定位问题,就像下面。-t 针对每行日志添加时间戳。

2024-11-06 00:37:03 524 1

原创 Java关于相对路径和绝对路径

/ 最推荐 类加载的形式读取数据 不用在意源代码和编译后的文件的位置.class一般源代码和编译后的jar包中的资源位置都不一样的,这样获取类路径的方式可以保证不出错,下图可以看到实际都是从类路径中拿到的。

2024-10-19 17:38:17 840

原创 方法引用中为什么签名看起来不匹配也可以引用?(未绑定的方法引用)

实际上this是作为普通方法的第一个参数被传入的,如果一个普通方法有多个参数,那么this是排在第一位(只是被隐藏了),后续参数按照代码顺推的,所以我们有时可以看到方法引用没有严格按照方法签名去匹配,就是这个原因,就像下面这样。其实Java中的普通方法是有隐藏参数的,这个参数就是我们熟悉的this,所有的普通方法都是一样的 比如下面的eat方法。但是在JVM的角度上看,实际调用实例方法需要有一个this对象,你可以像下面这样去想。(但实际方法签名不是这样的,签名还是以我们看到的为准。

2024-10-17 00:02:04 247

原创 在mybatisPlus项目中引入pageHelper导致依赖冲突

可以看到是因为jsqlparser依赖导致的冲突,这两个jsqlparser依赖的版本源码中有些方法被改变了,导致运行的时候找不到方法报错,这里我把pageHelper中自带的jsqlparser给排除掉就好了。其实依赖冲突的原因有很多,报错的原因也不一定是找不到方法,具体情况需要具体分析。假如你需要在mybatisPlus框架中引入pageHelper插件,需要注意是否存在冲突,我之前就在项目中引入了该分页插件导致项目起不来,这里你可以使用idea中下载的maven Helper插件去查看冲突,如下图。

2024-10-10 12:59:06 480

原创 mybatisPlus对于pgSQL中UUID和UUID[]类型的交互

在PGSQL中,有的类型是UUID和UUID[]这种类型,在mybatis和这些类型交互的时候,Java中的类型可以设置为UUID和List,这是兼容的,可以正常读取和更新,但是在使用mybatis-Plus框架时就不行,需要手动设置类型处理器才可以,这里记录一下类型处理器的设置。配置完之后需要在实体类的对应属性上添加注解以使其生效。

2024-10-09 13:08:50 905

原创 mybatis连接PGSQL中对于json和jsonb的处理

tips:本来是找了好久,都不知道该如何处理这种json/jsonb类型的,后来上网查资料才看到pgSQL的驱动包里有这个PGobject类型的。

2024-10-07 23:50:47 698 2

原创 mybatis自定义类型处理器

其实使用MySQL或Oracle数据库很少会遇到自定义类型处理器的情况,之前是因为项目中使用了PGSQL才接触到这块的,这里简单做一下记录要创建一个自定义的类型处理器,就需要继承BaseTypeHandler类或者实现TypeHandler接口(至于他俩的区别,说是BaseTypeHandler已经提供了一些基础实现,建议优先使用这个,这个没研究),重写其中的方法,如下图我这里创建的是针对String类型的类型处理器,在每个方法调用时做了简单的打印然后在XML中应用即可 ,非常简单。

2024-10-07 23:27:42 465

原创 MySQL随便写写

开启事务的时候,如果进行查询数据的话,那么这些数据是不会被上锁的,除非你显式的使用for update(X锁)或者for share(S锁)进行上锁,不然这些数据在事务未提交的时候也可以被其他事务修改。update语句自动加X锁。

2024-08-05 22:40:29 135 1

原创 Java类的初始化顺序

静态代码块仅在类加载的时候执行一次!重复创建对象不会重复执行!其实setter方法没必要加,是我手动调用的,所以顺序依次为。

2024-07-24 23:04:58 227

原创 Springboot循环依赖的解决方式

这个其实我也不好说,我自己写代码从来没有发现有循环依赖的问题,每个类确定好自己的职责,将方法正确的放入该类去引用bean一般就不会出现这种问题。这里我就描述一下循环依赖的产生吧,就是在容器启动过程准备bean的时候,会检测bean中是否注入了别的依赖,如果有就再去生成别的依赖对象注入到bean中,但是会发生这么一种情况,我有A,B两个@service,在A类中我通过注解引入B,然后再在B类中通过注解引入A,这个时候理论上就会无限产生A和B的实例,递归创建bean了属于是。

2024-07-24 22:56:42 714 4

原创 Springboot多模块项目从0构建打包运行

springboot多模块构建

2024-06-24 00:24:42 1950

原创 泛型的继承使用

图片描述的是我创建了一个TupleList类继承ArrayList,ArrayList中指定的泛型类型为TupleFour,并且TupleFour中的泛型可以看到和子类是一样的<A,B,C,D>,我之前在想为什么TupleFour类型的泛型也需要写,不写不也可以吗?当你定义一个泛型类,实例化时需要指定类型,如果不指定默认就是Object类型。所以我认为泛型的继承使用时,得先看子类定义的泛型,父类使用子类的泛型标记时,那么就产生一个约束的作用,编译器会帮你做类型检查。

2024-05-21 14:55:15 283

原创 docker查找MySQL容器的配置文件

【代码】docker查找MySQL容器的配置文件。

2024-02-17 00:05:57 823

原创 VMware虚拟机网络配置

桥接模式其实就是借助你宿主机上的网卡进行联网和通信,所以相当于虚拟机和宿主机平级,处于同一个网段中。需要将这些信息修改为和宿主机同一网段即可,然后重启虚拟机或者重启网络服务。以上都完成之后可能会出现宿主机可以ping通虚拟机,但是虚拟机无法ping通宿主机的情况,这种情况大概率是因为宿主机的防火墙给拦截了,这种情况只需要到Windows防火墙开放【虚拟机监控】即可多台虚拟机按上述相同配置都可以互相ping。

2024-02-15 16:09:25 1047

原创 Java中多线程的中断状态

在Java中,我们创建完线程之后可能需要在某些情况下去停止线程的运行,一般的话可以手动在线程中设置一个flag,规定当flag为真时继续执行,当flag为假时停止执行。在Java中也给我们提供了一个叫【中断状态】的东西,我们可以调用线程的某些方法去控制该线程的中断与否。

2023-11-12 21:47:32 284

原创 MySQL创建和指定用户权限

详细见https://sourcebyte.vip/article/272.html或https://baijiahao.baidu.com/s?

2023-10-29 23:29:23 146

原创 docker安装MySQL时的配置文件

我使用docker安装MySQL5.7的时候,发现找不到配置文件,并不是网上搜索到的my.cnf,应该是每个版本的配置文件都有点差别,这里记录下,一般的长得像配置文件的你去打开看一下,里面是否有。这样的内容,如果有这样的内容一般就是MySQL的配置文件,也可以在里面添加一些配置然后重启服务器查看配置是否生效,生效就说明是。我这个版本的MySQL(5.7.36)在docker容器下的配置文件为/etc/mysql/mysql.conf.d。

2023-10-29 23:27:02 786

原创 Linux安装JDK

我们安装Linux操作系统时,有时会自带OpenJDK,比如CentOS7,这时我们一般会卸载自带的JDK转而安装自己的OracleJDK,下面记录下操作过程。去官网找到Linux的JDK的安装包下载下来上传到Linux服务器,然后使用。如果有类似【java-1.7…这样的】的就是自带的JDK。去解压到指定的文件夹,这里是/usr/local/下。验证是否完成:使用java -version查看。使用以下命令查找是否存在自带JDK。卸载完成之后再次使用。

2023-10-29 21:31:20 220

原创 在JSP页面的JavaScript中引用EL表达式报错的问题

JSP使用EL表达式的问题

2023-08-31 15:53:29 190

原创 关于MySQL数据库版本不同导致表进行比较的时候报错illegal mix of collations...的问题

大致意思是作为连接条件的A和B字段的排序规则不同导致的,由于我在测试数据库建表的时候设定的排序规则是utf8mb4_general_ci,但是测试服是8.0版本以上的,默认的排序规则是utf8mb4_0900_ai_ci,所以导致连接查询的时候出错误了,这里需要更改建表时的字段的排序规则为utf8mb4_0900_ai_ci或者更改数据库实例的默认排序规则为utf8mb4_general_ci。,这样后面连接查询可能会出现问题,并且无法使用到索引,修改还很麻烦!字符集统一设定为utf8mb4。

2023-08-30 13:22:45 1054

原创 Git常用命令解释

git常用命令

2023-07-22 22:58:17 580 1

原创 MySQL中order by在子查询中失效的问题

MySQL中order by在子查询中失效的问题

2023-07-17 10:54:54 486

原创 使用maven中的profile动态打包不同环境的配置文件

maven中的profile可以在打包时动态选择不同的配置文件进行打入,在项目具有开发、测试、生产环境时可以更方便优雅的进行不同环境的打包运行。

2023-06-27 22:55:44 4996

原创 springboot接收到请求时中间的“+“会被替换成空格的原因

springboot接收到请求时中间的"+“会被替换成空格的原因是没有进行URL编码,但是后端接口解析参数的时候会进行解码操作,一旦解码就会将”+"替换成空格了,* 所以遇到这种情况的时候可以在发送请求之前使用URL编码过一次,这样就不会出现问题了。

2023-06-20 13:49:23 2375

原创 Springboot读取配置文件的方式以及多环境读取的方式

该注解可以将配置文件()中的值注入到类的成员变量中,中写入如下配置server:port: 8888servlet:age: 12这样就可以在项目启动时从environment对象中拿到该配置文件中的键值对进行赋值了,如果想赋值给静态变量需要将注解加在具体属性的set方法上!

2023-06-18 00:51:03 2638

原创 配置Nexus私服

maven私服的搭建

2023-06-11 23:24:47 1225

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除