springboot
文章平均质量分 70
Coder-文小白
95后Java后端程序员,新晋菜鸟奶爸,开始尝试探索副业的小白。微信公众号:Coder-文小白
展开
-
Spring Cloud与Seata 2.0集成:零基础安装到AT模式实战的完整教程
Seata)是一个开源的分布式事务解决方案,旨在解决微服务架构下的事务一致性问题。它提供了高性能、易扩展的分布式事务服务,帮助开发者在分布式系统中实现事务管理。Seata 2.0版本是这一框架的一个重要更新,带来了更多的功能和优化。例如,Seata 2.0版本继续优化了事务处理的性能,通过更高效的事务日志存储方式和更精细的并发控制策略,提高了事务处理的吞吐量和响应速度。更多关于seata2.0版本新特性,可以通过官网(https://seata.apache.org/zh-cn/)进行了解。原创 2024-08-30 07:00:00 · 299 阅读 · 0 评论 -
spring boot 3.x版本中集成spring security 6.x版本进行实现动态权限控制解决方案
框架会自动使用的方法进行用户加载,在加载用户以后,会在过滤器中的方法中,进行前端输入的用户信息和加载的用户信息进行信息对比。/*** 这里为了演示方便,模拟从数据库查询,直接设置一下权限");return new User("jack" , // 用户名称 new BCryptPasswordEncoder() . encode("123456") , //密码 list //权限列表);} }/**原创 2024-07-08 19:14:05 · 1596 阅读 · 2 评论 -
Spring Boot项目中,如何在yml配置文件中读取maven pom.xml文件中的properties标签下的属性值
在最近的项目开发过程中,有一个需求,需要在Spring Boot项目的yml配置文件中读取到mave的pom.xml文件中的properties标签下的属性值,这个要怎么实现呢?原创 2024-06-01 09:30:00 · 787 阅读 · 0 评论 -
如何基于Spring Boot项目从零开始打造一个基于数据库号段模式去中心化的分布式ID生成方案
在当前系统开发过程中,单体架构的应用正在走向消亡,越来越多的应用开始分布式架构,在分布式架构设计过程中,有一个问题往往避免不了,就是分布式ID生成问题。在常见解决方案中,有使用雪花算法或者自建统一ID生成服务雪花算法是一个很好的分布式ID生成方案,不过雪花算法的递增规律可能看起来不太明显,自建统一ID生成服务面对中小型系统来说又太过于复杂了,那除了这些方法之外还有什么好的解决方法没有呢?这次我们介绍一个解决方案,基于数据库号段的解决方案。原创 2024-04-27 10:34:59 · 865 阅读 · 1 评论 -
Java应用开发必备:使用 easy-captcha 组件生成验证码的详细介绍
最近系统开发在优化验证码的相关功能,第一反应就是有没有开源的第三方组件可以使用呢。在一番寻觅以后,还真发现一个好用的第三方验证码组件。是一个开源的Java库,用于生成和验证验证码,它的API上手难度低,可以生成包含数字字母中文和数字运算验证码,还有会动的GIF格式验证码哦,此外还允许开发者针对长度字符集字体颜色样式等方面进行自定义,可以满足大部分复杂场景。// 指定宽度为200,高度为100,验证码字符为5个。原创 2024-04-27 10:33:44 · 3258 阅读 · 3 评论 -
记一次中间件宕机以后持续请求导致应用OOM的排查思路(server.max-http-header-size属性配置不当的严重后果)
最近有一次在系统并发比较高的时候,数据库突然发生了故障,导致大量请求失败,在数据库宕机不久,通过应用日志可以看到系统发生了。通过内部排查得知,原来是应用提供的某个接口是GET请求方式,在请求URL中拼接的参数过大的时候会报。初次看到这个现象的时候,我还是有点懵逼的,数据库宕机以后为什么会导致应用发生OOM呢?还在继续接受请求,由于请求响应阻塞,同时此时会有大量请求进行堆积,但是每次请求都会创建。最后,将该GET请求方式接口修改成了POST方式请求,参数传递也通过请求体进行,原创 2024-04-19 19:46:47 · 1389 阅读 · 0 评论 -
什么?我一行日志代码竟然让接口响应延迟了1s
代码逻辑很简单,参数type如果是old,日志级别是debug的话,需要打印一下debug日志,debug日志中需要调用一个方法。在某次开发过程中,对于一个接口,我只是加了一行代码竟然让接口响应延迟大大增加,感觉是很小一个错误,在此记录一下。可以看到此时响应时间增长到1000多毫秒了,两者只是一行日志的区别。了,通过应用日志也可以发现test()方法不再执行。可以看到此时响应时间在几十毫秒的样子。可以看到此时,方法耗时。原创 2024-04-19 19:42:49 · 259 阅读 · 0 评论 -
Spring Boot项目启动过程中为什么日志打印没有显示完整包名呢?
不知道大家注意过没有,在Spring Boot项目启动过程中日志打印并没有显示完整的报名,而是显示一些o.a.co.s.web形式的包名,如下图:这是为什么呢?原创 2024-03-27 18:48:22 · 755 阅读 · 0 评论 -
Spring Boot项目怎么从Nacos注册中心上获取其他服务列表信息?
在spring boot项目开发过程中,为了进行微服务之间的调用,我们一般会使用注册中心,比如Nacos。假设我们有一个业务需求,应用A需要从Nacos注册中心上获取服务信息进行分析,需要怎么实现呢?原创 2024-03-14 20:15:19 · 2134 阅读 · 1 评论 -
Spring Boot项目如何快速从零开始打造一个属于自己的RPC框架
在平时Spring Boot项目开发过程中,我们进行远程服务调用大都采用 + 相关注解发布接口,使用组件进行微服务之间调用。这套技术架构已经足够完善了,当然没有什么问题,但是作为一个开发者,老是用一套框架天天写代码,不免有点无聊,那么今天我们就从零开始,不使用 + 相关注解发布接口,不使用组件进行远程调用,靠自己,快速从零开始实现一个属于,炫一下吧!2. 自定义注解既然我们不使用Spring提供的原生相关注解了,那我们为了简化开发,还是吧。此注解的作用于接口上,被该注解标识的接口可以被自定义框架,简化我原创 2024-02-27 21:40:33 · 2080 阅读 · 6 评论 -
Spring Boot项目中不使用@RequestMapping相关注解,如何动态发布自定义URL路径
在Spring Boot项目开发过程中,对于接口API发布URL访问路径,一般都是在类上标识或者注解,然后在方法上标识注解,通过设置注解属性,发布URL。在某些场景下,我觉得这样发布URL太麻烦了,不适用,有没有什么其他方法自由发布定义的接口呢?答案是肯定的。参考步骤二的测试截图效果,我们自定义发布一个URL。/*** 注册一个web容器初始化以后的事件监听,注册自定义URL/*** 标识事件监听器是否已经注册,避免重复注册/*** 需要发布的地址。原创 2024-02-27 07:00:00 · 2711 阅读 · 1 评论 -
Spring Boo项目中方法参数对象中字段上存在的自定义注解如何进行拦截解析
在Spring Boot项目开发过程中,我们经常会使用到自定义注解的方式进行业务逻辑开发,此时注解我们一般是放在方法或者类上面,通过AOP切面拦截的方式进行自定义业务逻辑填充。但是如果自定义注解放在类的字段上,此时应该如何进行解析呢?@Target({原创 2024-02-25 21:25:07 · 1474 阅读 · 0 评论 -
Spring Boot应用集成Actuator组件以后怎么自定义端点暴露信息
在平时业务开发中,我们往往会在spring Boot项目中集成Actuator组件进行系统监控,虽然Actuator组件暴露的端点信息已经足够丰富了,但是特殊场景下,我们也需要自己暴露端点信息,此时应该怎么操作呢?@RestControllerEndpoint(id = "myActuator") // 标识这是一个actuator组件暴露端点@Component //交给Spring容器管理resultMap.put("msg", "我是测试数据...");原创 2024-02-20 21:29:50 · 754 阅读 · 0 评论 -
Spring Boot项目怎么对System.setProperty(key, value)设置的属性进行读取加解密
之前我写过一篇文章使用SM4国密加密算法对Spring Boot项目数据库连接信息以及yaml文件配置属性进行加密配置(读取时自动解密),对Spring Boot项目的属性读取时进行加解密,但是没有说明对System.setProperty(key, value)设置的属性进行读取加解密,这个在开发过程中应该怎么实现呢?在resource目录下新建META-INF目录,新建spring.factories文件在resource目录下新建META-INF目录,新建spring.factories文件。原创 2024-02-20 21:25:58 · 1162 阅读 · 0 评论 -
Spring Boot项目中TaskDecorator的应用实践
TaskDecorator是一个执行回调方法的装饰器,主要应用于传递上下文,或者提供任务的监控/统计信息,可以用于处理子线程与主线程间数据传递的问题。System . out . println("线程执行前,资源设置。。。。");System . out . println("线程执行后,资源清理。。。。");} }System . out . println("线程执行前,资源设置。。。。");System . out . println("线程执行后,资源清理。。。。");} }原创 2024-02-20 21:24:39 · 1024 阅读 · 0 评论 -
Spring Boot应用集成Actuator端点自定义Filter解决未授权访问的漏洞
我们知道想要实时监控我们的应用程序的运行状态,比如实时显示一些指标数据,观察每时每刻访问的流量,或者是我们数据库的访问状态等等,需要使用到Actuator组件,但是Actuator有一个访问未授权问题,简单说就是其他人可以通过Actuator组件暴露的URL进行端点信息访问,甚至shutdown应用。那么我们有没有什么解决方法呢?endpoints:web:exposure:whiteUrl: # 白名单,配置白名单的URL请求时不需要验证,多个可以用英文逗号分隔。原创 2024-02-19 22:51:50 · 2164 阅读 · 0 评论 -
关于Spring Boot应用系统避免因为日切(日期切换)导致请求结果变更的一种解决方案
在系统开发过程中,有些业务功能面临日切(日期切换)问题,比如结息跑批问题,在当前工作日临近24点的时候触发结息,实际交易时间我们预期的是当前时间,但是由于业务执行耗时,可能进行了日切,业务跑到下一个工作日了,这样业务如果采用下一个工作日的时间进行业务计算,可能会导致业务结果与预期不一致,有没有什么解决方案呢?本文只是提供一种业务日切处理的大概思路,实际开发过程中,请以业务逻辑为根本,完善日切面临的问题解决方案,避免无脑照搬导致的业务异常。原创 2024-02-18 22:47:57 · 904 阅读 · 0 评论 -
Spring Boot项目内置Tomcat容器如何配置使用https协议访问(data isn‘t an object ID (tag = 48)问题解决方案)
将上面生成的pkcs12类型证书文件拷贝到Spring Boot项目的。,不过Spring Boot项目不能直接使用crt证书,https生成私钥和crt证书文件,可以参考之前的博客。此时需要升级JDK版本,resource目录。原创 2024-02-08 09:15:00 · 832 阅读 · 1 评论 -
使用SM4国密加密算法对Spring Boot项目数据库连接信息以及yaml文件配置属性进行加密配置(读取时自动解密)
在业务系统开发过程中,我们必不可少的会使用数据库,在应用开发过程中,数据库连接信息往往都是以明文的方式配置到yaml配置文件中的,这样有密码泄露的风险,那么有没有什么方式可以避免呢?方案当然是有的,就是对数据库密码配置的时候进行加密,然后读取的时候再进行解密,这样就可以避免敏感信息泄露了。针对加密的数据库配置信息,需要自定义解密,所以需要自定义一个DataSource对象// 对用户名进行解密 return SM4Utils . decryptStr(super . getUsername());原创 2024-02-07 17:11:52 · 3975 阅读 · 1 评论 -
Spring Boot集成百度UidGenerator雪花算法使用以及自定义starter封装UidGenerator支持原生DB、Redis、自定义方式获取workID介绍
当下系统开发过程中,普遍会采用分布式微服务架构,在此技术背景下,分布式ID的生成和获取就成为一个不得不考虑的问题。常见的分布式ID生成策略有基于数据库号段模式UUID基于Redis基于zookeeper雪花算法(snowflake)等方案,这其中雪花算法由于其简单、独立、易用的特性,被众多技术选型推荐。雪花算法 (SnowFlake),是 Twitter 开源的分布式 id 生成算法,可以不用依赖任何第三方工具进行自动增长的数字类型的ID生成;雪花算法的核心逻辑是使用一个64 bit 的 long 型。原创 2024-02-05 21:19:33 · 3598 阅读 · 2 评论 -
SpringBoot框架自定义解析配置项占位符(${})获取配置
在最近项目开发中,有一个需求,针对自定义注解中字符串属性值的设置需要支持使用”${xx}“占位符获取在SpringBoot框架配置文件中配置项对应的属性值,而且支持多个”${xx}“标识的配置任意拼接。原创 2024-01-17 22:07:41 · 912 阅读 · 1 评论 -
Spring Boot框架中Controller层API接口如何支持使用多个@RequestBody注解接受请求体参数
众所周知,在Spring Boot框架中,Controller层API接口编码获取请求体参数时,在参数上会使用@RequestBody注解;如果一次请求中,请求体参数携带的内容需要用多个参数接收时,能不能多次使用@RequestBody注解呢?原创 2024-01-16 22:24:36 · 2314 阅读 · 4 评论 -
layering-cache扩展——多级缓存有效时间增加随机浮动时间,防止缓存雪崩
一、背景最近在项目中有使用layering-cache(https://gitee.com/xiaolyuh/layering-cache?_from=gitee_search)进行多级缓存,有开发人员说想在缓存的时候增加一定时间的随机浮动,已到达防止缓存雪崩的目的,由于layering-cache是开源的,想增加此功能也十分简单,在此记录一下。缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。二、编码实现本次改造只针对二级缓存,也就是redis缓存层面原创 2022-04-11 22:24:03 · 996 阅读 · 0 评论 -
SpringBoot项目集成消息中间件以后@JmsListener注解不能生效的问题
SpringBoot项目集成消息中间件以后@JmsListener注解不能生效的问题原创 2022-03-28 23:34:34 · 2697 阅读 · 0 评论 -
SpringBoot监控Tomcat活动线程数来判断是否完成请求处理
SpringBoot监控Tomcat活动线程数来判断应用是否完成请求处理原创 2022-03-28 23:13:06 · 2406 阅读 · 2 评论 -
spring boot 2.x整合websocket——服务器端和客户端开发
一、前言WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。最近做的系统中,也涉及到websocket的使用,打算在这里记录一下原创 2020-12-07 15:21:05 · 723 阅读 · 0 评论 -
spring boot 2.x 使用mybatis拦截器实现系统日志记录(将完整参数的SQL语句记录到数据库中)
一、前言最近要求做系统的全局日志记录功能,要求把执行的完整SQL语句保存到数据库中,在实际开发中最终放弃了使用AOP的方法,改由使用mybatis的拦截器实现,这里简单记录一下实现过程。系统数据库主要环境:数据库:MySQL数据源:DruidDataSource二、创建数据库用表这里只是简单演示一下实现过程,只用两张表模拟一下:用户表(user)CREATE TABLE `user` ( `id` bigint(20) NOT NULL, `age` int(11) NUL原创 2020-12-04 16:37:40 · 2435 阅读 · 2 评论 -
RequestContextHolder跨线程获取不到request对象,解决方法
一、前言最近在做一个系统的全局日志拦截记录功能,有一个需要记录的IP地址的信息,我是从HttpServletRequest对象中获取的,但是我发现如果使用线程池以后,记录日志信息会报错,主要是获取不到HttpServletRequest对象。下面使用代码简单演示一下问题和解决方法:二、代码演示创建一个spring boot项目,项目结构如下:2. 导入maven依赖: <dependency> <groupId>org.spri原创 2020-12-03 11:38:41 · 7326 阅读 · 6 评论 -
spring boot2.x 使用validator进行数据校验以及扩展自定义参数校验
一、前言在平时开发中,前端提交表单时,通常会校验一些数据的可行性,比如是否为空,长度,身份证,邮箱等等,不过这样的验证是否就足够了呢,答案肯定是否定的。一个可靠的系统,不仅仅要依靠前端的数据验证,后端的验证也是必不可少的。以前验证数据的合法性,需要通过写大量的if…else…条件判断,有没有更简便快捷的方法呢,答案是有的,就是使用validator进行数据校验。spring boot的validation模块已经为我们提供了许多默认直接可以使用的注解,注意:spring boot2.3.x以后版本需要原创 2020-11-19 18:04:18 · 1802 阅读 · 0 评论 -
spring boot2.x 自定义事件的发布与监听
一、前言需要实现spring boot自定义事件的发布与监听,其实并没有多复杂,可以分以下三步进行:通过继承抽象类ApplicationEvent,自定义事件;通过实现 ApplicationListener接口 或者通过 @EventListener 注解到方法上,自定义一个事件的监听;通过ApplicationContext对象,发布事件。二、代码实现创建一个spring boot项目,项目结构如下:2. 导入maven依赖: <dependency>原创 2020-11-19 10:47:48 · 1599 阅读 · 1 评论 -
spring boot2.x 如何巧妙的自定义@EnableXXX模块装配功能
一、前言在平时使用spring boot的时候,很多时候都会用到@EnableXXX的注解,来装配一些功能模块,有代表性的,比如:@EnableWebMvc 开启Web MVC的配置支持;@EnableCaching 开启注解式的缓存支持。如果,想自定义实现这些功能,我们应该怎么做呢?先看一下spring boot是怎么帮我们做的。@EnableWebMvc(采用基于注解驱动方式)@Retention(RetentionPolicy.RUNTIME)@Target({ElementTy原创 2020-11-13 12:27:33 · 419 阅读 · 0 评论 -
spring boot2.x 后端参数校验+统一异常处理+后端自定义全局统一接口返回响应数据格式
一、前言这篇博客主要介绍以下几个方面:通过Validator来方便快捷地完成参数的校验工作;通过全局异常处理来完成异常操作的规范;通过数据统一响应来完成响应数据的规范;通过自定义注解,过滤返回的响应体是否需要进行统一包装。二、搭建spring boot项目项目结构如下:三、导入maven依赖 <dependency> <groupId>org.springframework.boot</groupId>原创 2020-11-11 14:31:49 · 715 阅读 · 2 评论 -
使用tomcat搭建一个本地图片服务器,用Spring Boot工程上传图片并及时显示
一、使用tomcat搭建本地图片服务器准备一个tomcat服务器:2.进入conf目录下,修改server.xml文件中的相关端口:停止服务端口8005 <Server port="8065" shutdown="SHUTDOWN">HTTP端口8080 <Connector port="8765" protocol="HTTP/1.1" connectionTimeout="20000"原创 2020-11-04 12:10:29 · 2311 阅读 · 3 评论 -
spring boot2.3.X版本找不到hibernate-validator相关注解解决方法
今天使用idea创建了一个spring boot2.3.x版本的spring boot项目,在使用hibernate-validator相关的注解的时候,发现不能导入相关的包:后来在官网找到了相关说明:官网链接官网上也给出了解决方法,手动导入相关依赖就行了,如下:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-va原创 2020-10-16 09:55:06 · 1363 阅读 · 1 评论 -
spring boot2.x版本学习笔记之使用JPA访问MySQL数据库
一、JPA简介JPA (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的局面。JPA 是在充分吸收了现有 Hibernate,TopLink,JDO 等 ORM 框架的基础上发展而来的,具有易于使用,伸缩性强等优点。注意: JPA 是原创 2020-08-25 15:35:16 · 248 阅读 · 0 评论 -
spring boot2.x版本学习笔记之使用mybatis进行多数据源配置访问数据库
首先创建2个用于测试的数据库,每个数据库中都创建一张user表,建表语句如下:CREATE TABLE `user` ( `id` bigint(20) NOT NULL, `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `age` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGI.原创 2020-08-24 17:31:51 · 174 阅读 · 0 评论 -
spring boot2.x版本学习笔记之使用mybatis的xml配置方式配合DruidDataSource数据源访问MySQL数据库
首先创建一个用于测试的数据库,创建一张user表,建表语句如下:CREATE TABLE `user` ( `id` bigint(20) NOT NULL, `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `age` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGINE = In.原创 2020-08-24 16:18:14 · 466 阅读 · 0 评论 -
spring boot2.x版本学习笔记之使用mybatis注解方式配合HikariDataSource数据源访问MySQL数据库
首先创建一个用于测试的数据库,创建一张user表,建表语句如下:CREATE TABLE `user` ( `id` bigint(20) NOT NULL, `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `age` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGINE = In.原创 2020-08-24 15:08:45 · 1023 阅读 · 0 评论 -
spring boot2.x版本学习笔记之使用JdbcTemplate进行多数据源配置访问数据库
首先创建2个用于测试的数据库,每个数据库中都创建一张user表,建表语句如下:CREATE TABLE `user` ( `id` bigint(20) NOT NULL, `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `age` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGI.原创 2020-08-24 09:41:48 · 315 阅读 · 0 评论 -
Spring框架中,@Resource注解和@Autowired注解的区别
平时开发中,我们知道,spring中,@Resource和@Autowired都是可以在bean的注入时使用。这里简单介绍一下@Resource和@Autowired注解:@Resource有两个常用属性name、type,注入时分4种情况:指定name和type:通过name找到唯一的bean,找不到抛出异常;如果type和字段类型不一致,也会抛出异常;指定name:通过name找到唯一的bean,找不到抛出异常;指定type:通过tpye找到唯一的bean,如果不唯一,则抛出异常;都不指原创 2020-08-21 17:09:12 · 901 阅读 · 1 评论