- 博客(418)
- 收藏
- 关注
原创 SpringBooot之事务失效的场景
1、数据库数据表sys_user中description字段“要求非空”,但是我们新增时候传null,继而导致保存失败,事务被触发导致批量数据会全部会被回滚。2、Springboot中使用事务需要在启动类中开启事务和在方法或者类上使用注解。
2024-11-06 16:13:41 622
原创 Springboot中使用@Async注解7大失效场景及解决方案
在Spring Boot中,@Async注解就像一把瑞士军刀,能帮你轻松处理那些耗时的任务,让主线程可以继续忙别的事儿。再强大的工具,如果使用不好依然会出现问题。为了避免这些坑,咱们得深入了解下@Async是怎么工作的,还要知道怎么用才能不出问题。这里面,绝大多数人会遇到的坑点主要会集中在没有配置自定义线程池、异步方法在同一个类中调用、事务不起作用这几个问题上。所以,推荐还是专门定义一个AsyncService,将异步方法都写在里面,需要使用的时候,就在其他类将其注入即可。
2024-11-05 10:32:48 74
原创 TransmittableThreadLocal初体验
TransmittableThreadLocal是阿里巴巴开源的一个线程本地变量,它是ThreadLocal的一个增强版,可以在线程池等多线程环境下使用,解决了ThreadLocal在多线程环境下的一些问题。在多线程环境下,ThreadLocal可以避免线程安全问题,但是在使用线程池等多线程环境时,ThreadLocal可能会出现一些问题。例如,当使用线程池时,线程池中的线程可能会被多个任务共享,如果使用ThreadLocal存储数据,可能会导致数据被错误地共享。
2024-10-31 17:11:15 319
原创 SpringCloudAlibaba实战入门之OpenFeign高级用法(十)
如果需要在所有请求中添加相同的请求头,可以通过定义一个 Feign 请求拦截器来实现。
2024-10-29 16:05:08 233
原创 SpringCloudAlibaba实战入门之OpenFeign初体验(九)
OpenFeign 是一个声明式的 HTTP 客户端,它是Netflix开源的项目之一,用于简化HTTP请求的调用和处理。OpenFeign的设计目标是使API调用更加简单和优雅。它提供了一组注解和接口,通过声明方式定义HTTP请求,然后自动生成实现代码。这样开发人员只需要编写接口定义和相关的注解,就可以实现对远程服务的调用。OpenFeign支持多种HTTP请求方式,包括GET、POST、PUT、DELETE等。它还支持请求参数的传递、请求头的设置、请求体的序列化等功能。
2024-10-29 14:31:57 75
原创 SpringCloudAlibaba实战入门之Nacos注册中心(四)
Nacos/nɑ:kəʊs/是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理。Nacos 配置中心简介, Nacos 是什么 | Nacos 官网。
2024-10-28 14:24:00 93
原创 SpringBoot学习之使用ThreadPoolTaskExecutor自定义创建线程池(四十四)
使用SpringBoot构建应用时,如何使用线程处理异步任务?其实springBoot已经提供了默认的实现,通过在启动类上加上注解@EnableAsync, 然后在需要异步处理的方法上增加注解@Async即可启动一个线程进行异步处理。其实质类似于:new Thread(()-{System.out.print("处理异步任务")}).start()。
2024-10-24 18:35:42 55
原创 SpringBoot学习之使用Future和Callable创建线程(四十三)
在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。今天我们就来讨论一下Callable、Future和FutureTask三个类的使用方法。
2024-10-24 18:19:00 42
原创 SpringBoot学习之使用ThreadPoolExecutor创建线程池(四十三)
ThreadPoolExecutor是Java中用于管理线程池的类,它提供了一个灵活且可配置的线程池,可以有效地执行并管理多个任务。使用ThreadPoolExecutor可以实现线程的复用、线程池大小的控制、任务调度和异常处理等功能。
2024-10-24 17:59:05 152
原创 SpringBoot学习之使用Executors创建线程池(四十二)
Executors.newCacheThreadPool():可缓存线程池,先查看线程池中有没有之前创建的线程,如果有则直接使用。否则就新创建一个新的线程加入线程池中,我们经常用此类线程池来执行一些业务处理时间很短的任务。Executors.newFixedThreadPool():创建一个固定(指定)长度可重用的线程池,可以控制最大创建数,超过最大长度之后就会放入到队列进行等待。
2024-10-24 17:27:35 511
原创 SpringBoot学习之获取properties文件中的自定义配置(四十一)
2、启动类中增加 @ConfigurationPropertiesScan("com.xu.wemall.commons.config"),这里的“com.xu.wemall.commons.config”是ConfigProperties2类所在的包路径。1、创建一个ConfigProperties1配置文件类。2、在启动类中打印ConfigProperties1。1、创建ConfigProperties2配置文件类。2、在启动类中打印ConfigProperties2。3、 启动后输出结果。
2024-10-22 18:42:33 52
原创 SpringBoot学习之用log4j2打印SQL语句(四十)
可以看到后台的SQL语句已经成功打印出来了,而且日志中包含我们配置的“Hello,World”,说明我们的配置的确生效了,今天的课程就到这里,我们下回再见。-- 此处 定义到Mapper接口所在的包路径即可 也可指定某个文件的日志级别-->上面数据源部分的配置和你的mapper-locations配置,大家根据自己的实际情况修改配置即可。这里我为了演示,还故意临时注释了mybatis-plus的log-impl配置。这里我方便演示,做了一个最简单的配置,注释部分大家酌情选择是否需要选择放开,
2024-10-14 00:43:43 1047
原创 IDEA在git提交时添加忽略文件
目录下所有文件的Git提交,你可以通过设置.gitignore文件来实现。在IntelliJ IDEA中,要忽略。也可以先下载这个.ignore插件。# 忽略所有 .gitignore 文件。2、如果不存在,利用上面的插件新建一个。# 忽略所有 .settings 目录。# 忽略所有 .project 文件。# 忽略所有 .class 文件。# 忽略所有 target 目录。# 忽略所有 .idea 目录。# 忽略所有 .log 文件。1、打开项目根目录下的。
2024-09-30 15:46:32 1425
原创 Maven从入门到精通(三)
当 maven 未配置时,会默认请求 maven 的中央仓库,中央仓库包含了这个世界上绝大多数流行的开源 java 构件,以及源码、作者信息、SCM, 信息、许可证信息等,每个月这里都会接受全世界 java 程序员大概 1 亿次的访问,它对全世界 java 开发者的贡献由此可见一斑。其中仓库又分为本地仓库、中央仓库、镜像仓库、私服。而原始的本地仓库是为空的,因此 maven 需要知道一个网络上的仓库,在本地仓库不存在时前往下载网络上的仓库,也就是远程仓库。配置用于认证的服务器信息,比如私服的用户名和密码。
2024-09-13 15:25:08 1024
原创 Maven从入门到精通(二)
pom.xml是Maven项目的核心配置文件,它是 项目对象模型 - Project Object Model(POM)的缩写。POM定义了项目的所有属性,包括项目的名称、版本、依赖关系、构建配置等。使用pom.xml,我们可以轻松地管理项目的构建和依赖关系,让我们能够更专注于业务逻辑的开发。
2024-09-13 14:47:11 1077
原创 Maven从入门到精通(一)
一个对 Maven 比较正式的定义是这么说的: Maven 是一个项目管理工具,它包含了一个项目对象模型 (POM: Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。简答说,maven主要解决三个问题:项目对象模型、依赖管理、构建项目。
2024-09-13 14:17:36 973
原创 CSS系列之详解overflow(四)
CSS 的 overflow 属性用于控制元素内容溢出时的表现方式。当元素的内容超出其指定的尺寸范围时,就会出现溢出现象。比如,一个元素的高度设置是 80px,但内容高度不只是 80px,内容此时就叫做溢出了。那需要注意的是,overflow 属性生效的前提是需要设置元素的宽度和高度。如果没有明确设置宽度和高度,浏览器将会自动根据内容进行调整,此时 overflow 属性可能不会产生预期的效果。
2024-08-28 17:54:22 555
原创 CSS系列之浮动清除clear(三)
可以看到我们的底部盒子不在原来的位置了,原因是什么呢,原因就是此时父元素我们并没有给他设置高度,父元素的高度完全是1号2号盒子撑起来的,现在给1号2号盒子添加了浮动,不占据原来的位置了,所以父元素此时的高度为零,不占位置了,底部盒子就会上去,造成高度塌陷。直接给第二个盒子添加一个clear:left 这里需要注意,clear消除的是上一个盒子对自己的影响,所以,前面一个盒子往哪边浮动,我们就clear哪边,这里的上一个盒子是float:left,所以我们在第二个盒子上添加的也是clear:left。
2024-08-28 17:25:52 604
原创 CSS系列之Float浮动(二)
float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。选择器 { float: 属性值;属性值描述none元素不浮动(默认值)left元素向左浮动right元素向右浮动代码案例欣赏:/* 浮动的标签 顶对齐 *//* 浮动: 在一行排列, 宽高生效 -- 浮动后的标签具备行内块特点 */.one {.two {/* 因为有浮动, 不能生效 - 盒子无法水平居中 */.three {
2024-08-28 15:21:08 1179
原创 CSS系列之Position定位(一)
这个特定阈值指的是 top, right, bottom 或 left 之一,换言之,指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位生效。粘性定位的元素是依赖于用户的滚动,在。HTML 元素的默认值,即没有定位,遵循正常的文档流对象。静态定位的元素不会受到 top, bottom, left, right影响。,它会固定在目标位置。元素定位表现为在跨越特定阈值前为相对定位,之后为固定定位。元素的位置相对于浏览器窗口是固定位置。相对定位元素的定位是相对其正常位置。
2024-08-27 18:33:12 447
原创 Springboot @scheduled实例
在Spring Boot中,@Scheduled注解可以用来创建定时任务。以下是一个简单的例子,展示了如何使用@Scheduled注解来创建一个每5秒执行一次的定时任务。
2024-08-13 15:40:21 421
原创 8080端口被占怎么处理?
2、运行以下命令来查看占用端口 8080 的程序的 PID(进程标识符),可以看到PID是12040。2、运行以下命令来查看占用端口 8080 的程序的 PID(进程标识符)4、运行以下命令来终止占用端口 8080 的程序。1、 按住Win+R输入CMD打开命令行窗口。3、记下占用端口 8080 的程序的 PID。3、再次使用1中命令进行测试查看。
2024-08-13 15:26:18 2813
原创 Java开发之泛型详解
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。泛型有什么好处?// 响应码// 是否成功// 返回体数据User user;Integer id;进程已结束,退出代码0这样这个反应体就可以返回请求状态和用户信息了。
2024-07-12 14:21:12 849
原创 IntelliJ IDEA自定义菜单(Menus)、任务栏(toolbars)详细教程
5、右上角这两个图标就是我们添加的Pull和Commit指令,点击一下即可开始操作。3、这里以在右侧加入指令为例,选择Right,点击+,选择Add Action。2、点击右边的Main Menu,点击+号,选择Add Action。3、弹出Add Action弹窗,搜索或者选择你要添加的指令。2、弹出自定义工具栏,这里可以在工具栏的左中右三个位置添加。4、选择Git下的Pull,点击OK。
2024-07-11 21:46:01 3087
原创 手把手教你创建并启动一个Vue3项目(Mac版)
1、因为npm的资源默认采用国外的,国内执行对应的安装口令会比较慢,所以我们可以把npm资源切换到国内,这样安装框架的速度就会提升。3、上图红色部分,表示在路径C:\Users\xulijun下成功创建了一个名称叫my-vue-app的vue3项目,我们可以输入下面命令启动这个vue3新项目。2、运行完成后并没有提示,但是可以运行查看口令,验证是否切换成功。
2024-06-19 23:54:34 1787
原创 手把手教你创建并启动一个Vue3项目(Windows版)
1、因为npm的资源默认采用国外的,国内执行对应的安装口令会比较慢,所以我们可以把npm资源切换到国内,这样安装框架的速度就会提升。4、验证安装npm是否成功,npm是Node中自带的打包工具,输入npm -version,输出npm版本号即表示安装成功。2、最后如上图显示,我们就完成我们VUE脚手架的安装了,我们在命令窗口用口令查看当前脚手架版本。
2024-06-19 18:19:01 2995 1
原创 设计模式之桥接模式BridgePattern(十二)
桥接模式(bridge pattern) 的定义是:将抽象部分与它的实现部分分离,使它们都可以独立地变化。桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联来取代传统的多层继承,将类之间的静态继承关系转变为动态的组合关系,使得系统更加灵活,并易于扩展,有效的控制了系统中类的个数 (避免了继承层次的指数级爆炸)。
2024-06-06 18:28:30 447
原创 一篇文章搞懂Object、泛型(T)与通配符?之间的区别
Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类。其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法。泛型的本质便是类型的参数化,通俗的说就是用一个变量来表示类型,这个类型是不确定,但是仅仅是表示某个类型。3、如果,把T定义成一个确定的泛型数据类型,参数就只能是这种数据类型。2、在定义泛型对象的使用方法时,还不知道T是什么类型,它可能是String类型,也可能是Integer类型。通配符是一个有趣的东西,如果你掌握了,会使你的代码更为通用(健壮性更强)。
2024-06-06 11:49:16 199
原创 设计模式之观察者模式ObserverPattern(十一)
观察者模式 (Observer Pattern) 是一种行为型设计模式,又被称为发布-订阅 (Publish/Subscribe) 模式,它定义了对象之间的一种一对多的依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会自动收到通知并更新。
2024-06-06 11:19:40 748
原创 设计模式之过滤器模式FilterPattern(十)
1、过滤器接口(Filter)定义了过滤器的基本方法,具体的实现还要具体过滤器角色去参与,在实际应用中可以扩展该接口以适应不同的过滤条件2 具体命过滤器(ConcreteFilter)实现了过滤器接口,负责执行具体的过滤操作。对数据进行过滤3 过滤链(FilterChain)将多个过滤器按照一定的顺序组合起来,形成一个过滤器链,依次对数据进行过滤。
2024-06-05 16:18:48 785
原创 设计模式之原型模式PrototypePattern(九)
用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。如果创建对象的成本比较大,比如对象中的数据是经过复杂计算才能得到,或者需要从RPC接口或者数据库等比较慢的IO中获取,这种情况我们就可以使用原型模式,从其他已有的对象中进行拷贝,而不是每次都创建新对象,进行一些耗时的操作.
2024-05-20 18:08:03 305
原创 设计模式之适配器模式AdapterPattern(八)
适配器模式 (Adapter Pattern) 是一种结构型设计模式,它通过将一个类的接口转换成客户端所期望的另一个接口,使得原本由于接口不兼容而无法一起工作的类能够协同工作。适配器模式分为类适配器模式和对象适配器模式,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,故应用相对较少。
2024-05-07 18:10:42 459
原创 设计模式之建造者模式BuilderPattern(七)
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。@Data:这是Lombok中提供的Getter和Setter方法和toString方法的注解。@AllArgsConstructor:这是Lombok中提供的包含所有参数的构造方法注解。@NoArgsConstructor:这是Lombok中提供的不包含任何参数的构造方法注解。3、OrderBuilder类。1、OrderItem类。
2024-04-30 17:38:39 1065 1
原创 设计模式之代理模式ProxyPattern(六)
1、什么是代理模式?代理模式是23种设计模式中的一种。代理模式是一种结构型设计模式,它允许为其他对象提供一个替代品或占位符,以控制对这个对象的访问。2、代理模式的角色构成抽象主题(Subject):定义了真实主题和代理主题的共同接口,这样代理类可以通过实现该接口来代理真实主题。真实主题(Real Subject):定义了代理所代表的真实对象。代理(Proxy):持有对真实主题的引用,并实现了与真实主题一样的接口,客户端通过代理来访问真实主题,同时可以在访问真实主题前后进行一些额外操作。
2024-04-30 15:57:20 1111 2
原创 设计模式之模板模式TemplatePattern(五)
模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern), 在一个抽象类公开定义了执行它的方法的模板。它的子类可以更需要重写方法实现,但可以成为典型类中定义的方式进行。模板模式适用于通用步骤的操作,比如做菜,不管你是西红柿炒鸡蛋,还是土豆炖牛肉实现步骤都是一样的,备料,做菜,上菜。再比如投放系统,不管你是投放巨量引擎,广点通还是百度,前期工作实现步骤也都是一样的,配置物料信息,构建投放对象,投放广告。
2024-04-30 01:59:04 522 1
原创 设计模式之装饰者模式DecoratorPattern(四)
装饰者模式(Decorator Pattern)是一种用于动态地给一个对象添加一些额外的职责的设计模式。就增加功能来说,装饰者模式相比生成子类更为灵活。装饰者模式是一种对象结构型模式。装饰者模式可以在不改变一个对象本身功能的基础上增强其功能,通过采用组合而非继承的方式,实现了在运行时动态地扩展一个对象的功能。装饰者模式提供了一种比继承更加灵活的方式来扩展一个对象的功能。
2024-04-28 01:22:33 349 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人