
Spring
文章平均质量分 59
涛哥是个大帅比
一切都是最好的安排
️相遇是美好的|遭遇也是美好的
展开
-
SpringBoot使用TraceId日志链路追踪
用途:每一次链路,线程维度,添加最终的链路ID traceId。MDC(Mapped Diagnostic Context)诊断上下文映射,是@Slf4j提供的一个支持动态打印日志信息的工具。/*** 日志拦截器*/@Override//可以考虑让客户端传入链路ID,但需保证一定的复杂度唯一性;如果没使用默认UUID自动生成if (!@Override/*** 声明一个线程池*///核心线程数5:线程池创建时候初始化的线程数。原创 2024-11-11 14:37:27 · 2797 阅读 · 3 评论 -
SpringBoot使用hutool操作FTP
SpringBoot使用hutool操作FTP,可以实现从FTP服务器下载文件到本地,以及将本地文件上传到FTP服务器的功能。原创 2024-09-24 11:42:16 · 2096 阅读 · 0 评论 -
spring boot集成easypoi导出word换行处理
spring boot集成easypoi导出word换行处理。内容包含换行符\n,导出word时换行符失效,会将换行符\n识别为空格。原创 2024-07-08 14:26:33 · 1282 阅读 · 0 评论 -
SpringBoot使用redis生成订单号,当天有效
订单号生成规则: DD+年月日+5位流水号,流水号当天有效,第二天重新计数。转载 2024-06-14 10:47:38 · 489 阅读 · 0 评论 -
Spring中的PathMatcher路径匹配器
PathMatcher是Spring的一个概念模型接口,该接口抽象建模了概念"路径匹配器",一个"路径匹配器"是一个用于路径匹配的工具。位于 Spring-core 包中 util 包下。转载 2024-05-13 14:28:08 · 539 阅读 · 0 评论 -
Spring Boot集成Redisson实现延迟队列
Redisson的的RDelayedQueue是基于Redis实现的,而Redis本身并不保证数据的持久性。如果Redis服务器宕机,那么所有在RDelayedQueue中的数据都会丢失。因此,我们需要在应用层面进行持久化设计,例如定期将RDelayedQueue中的数据持久化到数据库。在设计延迟任务时,我们应该根据实际需求来合理设置延迟时间,避免设置过长的延迟时间导致内存占用过高。原创 2024-04-25 17:52:11 · 1646 阅读 · 2 评论 -
Spring Boot整合Redisson的两种方式
Redis是一个开源的内存数据库,支持多种数据类型,如字符串、哈希、列表、集合和有序集合等,常用于缓存、消息队列、计数器、分布式锁和搜索等应用场景。Redisson则是一个基于Redis实现的Java驻内存数据网格,提供了一系列分布式的Java常用对象和多种锁机制,以及分布式服务,使开发者能更集中于处理业务逻辑。Redisson不支持字符串操作、排序、事务、管道、分区等Redis特性,但Redisson 提供了许多其他功能,如分布式闭锁、分布式计数器、分布式信号量等。原创 2024-04-24 17:17:04 · 11764 阅读 · 1 评论 -
Spring Boot实现接口签名验证
一个用于生成签名,另一个用于验证签名。生成签名的方法通常将请求参数按照特定规则计算出一个签名值。常见的签名算法有HMAC-SHA1、HMAC-SHA256等。验证签名的方法则是对接收到的请求参数进行同样的处理,并计算出一个签名值,然后与请求中携带的签名值进行比对。/*** 获取签名* @param secretKey 密钥* @param data 需要签名的数据* @return 签名*/try {/*** 验证签名* @param secretKey 密钥。原创 2024-04-23 14:44:44 · 5839 阅读 · 1 评论 -
Spring Boot分段处理List集合多线程批量插入数据
Spring Boot分段处理List集合多线程批量插入数据原创 2024-04-22 15:18:53 · 2005 阅读 · 2 评论 -
Spring Boot中@Value注入静态变量
这时候打印发现是空的, 通过上例可以看出,使用@Value注解修饰静态属性,启动项目时不会报错,但是也不会给该静态属性设置值。原创 2024-04-11 18:02:40 · 1535 阅读 · 0 评论 -
Spring Boot中@KafkaListener使用${}动态指定topic
在Spring Kafka中,我们可以使用${}来引用Spring的属性配置。这样我们就可以在不同的环境中重新配置topic名称,而不需要修改代码。原创 2024-04-11 17:54:08 · 1733 阅读 · 0 评论 -
Spring Boot中静态方法获取bean的三种方式
spring框架应用中有些静态方法需要依赖被容器管理的类,原有的方式是@Autowired注解获取bean。静态变量、类变量不是对象的属性,而是一个类的属性,所以静态方法是属于类(class)的,普通方法才是属于实体对象(也就是New出来的对象)的,spring注入是在容器中实例化对象,所以不能使用静态方法。而使用静态变量、类变量扩大了静态方法的使用范围。静态方法在spring是不推荐使用的,依赖注入的主要目的,是让容器去产生一个对象的实例,然后在整个生命周期中使用他们,同时也让testing工作更加容易。原创 2019-04-30 10:23:02 · 1931 阅读 · 1 评论 -
Spring Boot项目启动时执行指定的方法
缺点:如果@PostConstruct方法内的逻辑处理时间较长,就会增加SpringBoot应用初始化Bean的时间,进而增加应用启动的时间。因为只有在Bean初始化完成后,SpringBoot应用才会打开端口提供服务,所以在此之前,应用不可访问。建议:轻量的逻辑可放在Bean的@PostConstruct方法中,耗时长的逻辑如果放在@PostConstruct方法中,可使用@Async异步方法。优点: 项目已经初始化完毕,才会执行方法,所以不用等这个方法执行完,就可以正常提供服务了。原创 2024-04-10 14:00:53 · 503 阅读 · 0 评论 -
spring boot切面execution表达式添加多个包路径
在Spring Boot中,如果你想为多个包中的方法创建一个切面,你可以在@Pointcut注解中使用||操作符来指定多个包。原创 2024-03-18 17:22:41 · 2542 阅读 · 1 评论 -
SpringBoot项目如何打包成war包,并部署在tomcat上运行
正常情况下,我们开发 SpringBoot 项目,由于内置了Tomcat,所以项目可以直接启动,部署到服务器的时候,直接打成 jar 包,就可以运行了。有时我们会需要打包成 war 包,放入外置的 Tomcat 中进行运行,或者使用工具idea直接启动,便于开发调试。原创 2024-03-18 15:15:14 · 6004 阅读 · 0 评论 -
SpringBoot集成Jasypt实现敏感信息加密
在服务中不可避免的需要使用到一些秘钥(数据库、redis等)开发和测试环境还好,但生产如果采用明文配置将会有安全问题,jasypt是一个通用的加解密库,可以使用它。在Spring Boot中使用Jasypt加密和解密敏感数据非常简单,只需要在Spring Boot应用程序中添加Jasypt依赖项,并在应用程序配置文件中指定加密和解密密钥即可。原创 2024-03-18 11:40:26 · 506 阅读 · 0 评论 -
SpringBoot拦截器获取token用户对象优雅地传递到Controller层
抛出的异常需要自己捕捉,返回/*** Token拦截器*/@Component@Slf4j/*** 存储用户信息*/@Override// 从header中获取token// 如果参数中不存在token,则报错throw new RuntimeException("请求头缺少token参数");try {// TODO 根据token获取用户信息// ......log.error("获取用户信息失败:", e);原创 2024-03-12 18:07:36 · 2609 阅读 · 0 评论 -
Spring使用RestTemplate返回的嵌套实体对象为空,转换json报错
Spring Boot项目使用RestTemplate调用接口,使用嵌套实体对象接收的返回结果使用RestTemplate调用接口。原创 2024-03-05 16:07:44 · 1028 阅读 · 0 评论 -
SpringBoot过滤器的使用
在springboot 启动类添加该注解@ServletComponentScan,也可以写包的具体地址,传参数@ServletComponentScan("com.test.demo.filter")完成之后启动项目,访问接口:localhost:8080/test/testFilter,观察控制台运行结果。定义一个TestFilter 实现Filter接口,重写里面的三个方法。定义一个TestFilter 实现Filter接口,重写里面的三个方法。过滤器的运行等级,数字越小,越先执行。原创 2024-01-22 16:10:05 · 619 阅读 · 0 评论 -
SpringBoot解决Slow HTTP慢速攻击漏洞
Web应用在处理HTTP请求之前都要先接收完所有的HTTP头部,因为HTTP头部中包含了一些Web应用可能用到的重要的信息。攻击者利用这点,发起一个HTTP请求,一直不停的发送HTTP头部,消耗服务器的连接和内存资源。抓包数据可见,攻击客户端与服务器建立TCP连接后,每10秒才向服务器发送一个HTTP头部,而Web服务器在没接收到2个连续的\r\n时,会认为客户端没有发送完头部,而持续的等等客户端发送数据。如果恶意攻击者客户端持续建立这样的连接,那么服务器上可用的连接将一点一点被占满,从而导致拒绝服务。这种原创 2024-01-19 14:11:20 · 2540 阅读 · 0 评论 -
Spring集成MyBatis与MyBatis-Plus添加分页插件
MyBatis-Plus3.4.0版本之前添加分页插件,使用配置PaginationInterceptor。从3.4.0版本开始,之后使用配置MybatisPlusInterceptor。原创 2024-01-18 16:19:55 · 962 阅读 · 0 评论 -
SpringBoot参数校验@Validated和@Valid的使用
实体类参数:参数上必须加上@Valid,类上@Validated可加可不加;非实体的参数:类上必须加上@Validated;推荐都加上,如果类上 @Validated不加,万一后期改造添加新参数,可能会忘记注解@Validated。原创 2023-11-27 16:03:28 · 995 阅读 · 0 评论 -
Spring Boot集成kafka的相关配置
额外依赖只需要这一个,kafka-client 不是springboot 的东西,那是原生的 kafka 客户端, kafka-test也不需要,是用代码控制broker的东西。原创 2023-10-12 15:55:23 · 1317 阅读 · 0 评论 -
SpringBoot ApplicationListener观察者模式实际应用场景
此处的初始化是指:所有的Bean被成功装载,后处理Bean被检测并激活,所有Singleton Bean 被预实例化,ApplicationContext容器已就绪可用。当使用ConfigurableApplicationContext (ApplicationContext子接口)接口中的 start() 方法启动 ApplicationContext 时,该事件被发布。使用事件机制的,那么需要先定义订单的事件,然后使用监听器对事件进行监听,最后就是在创建订单的时候进行事件的发布。转载 2023-08-31 16:27:52 · 1035 阅读 · 0 评论 -
RestTemplate HTTPS请求忽略SSL证书
第二种是导入证书,比较复杂(比第一种安全)说明:这里兼容http和https请求,只需要指定名称即可。RestTemplate 默认不支持。这里说一下第一种解决方案,忽略认证。原创 2023-08-09 17:09:46 · 10652 阅读 · 9 评论 -
Spring Boot基于AbstractRoutingDataSource多数据源事务问题
说明:1、Propagation.REQUIRES_NEW:如果当前存在事务,则挂起当前事务,开启一个新的事务,新事务提交后,则继续运行外部事务;2、这里会重新开启一个新事物,所以数据源2也会执行;3、这样无论在两个方法中哪个地方报错抛出异常都会使事务同时回滚;原创 2023-04-14 15:39:40 · 1579 阅读 · 1 评论 -
Spring Boot多数据源事务@DSTransactional的使用
集成com.baomidou,引入dynamic-datasource依赖,实现多数据源,这里说下事务问题:1、一个方法中使用同一个数据源;2、一个方法中使用了多个数据源;原创 2023-04-14 11:13:08 · 12418 阅读 · 9 评论 -
Spring Boot集成Druid实现多数据源的两种方式
Spring Boot集成Druid实现多数据源的两种方式:1、集成com.baomidou,引入dynamic-datasource依赖;2、原生的方式,基于AOP手动实现多数据源;原创 2023-04-12 16:51:56 · 14656 阅读 · 0 评论 -
Spring Boot集成Druid查看配置是否生效
配置完druid后,不知道是否已经生效,我们可以修改某个属性的值,然后在http://localhost:8080/druid监控页面,查看值是否有改变。这时候访问地址就变成:http://localhost:8080/druid.test。原创 2023-04-12 14:29:25 · 3654 阅读 · 0 评论 -
Spring Boot AOP @Pointcut拦截注解的表达式与运算符
这里主要说下Spring Boot AOP中@Pointcut拦截类上面的注解与方法上面的注解,怎么写表达式怎么,还有@Pointcut中使用运算符。原创 2023-04-11 16:17:23 · 2988 阅读 · 0 评论 -
SpringBoot集成WebSocket进行前后端通信
因为WebSocket是类似客户端服务端的形式(采用ws协议),那么这里的WebSocketServer其实就相当于一个ws协议的Controller。创建配置类启用WebSocket支持,用@Configuration和@Bean纳入spring。原创 2023-04-10 11:11:28 · 2577 阅读 · 7 评论 -
Spring Boot+Redis队列实现Java版秒杀系统
如此,每个请求都无需经过加锁操作,直接利用redis的单线程特性,即可实现高并发下的秒杀:请求到达redis,redis会逐个执行,每一次执行要么返回一个值,要么返回null。主要使用的是最后两个方法,最后一个方法,在队列头部新增对象,如果没有这个队列,他会创建出来这个队列,然后将一个集合统统塞到这个redis队列中。倒数第二个方法每调用一次,会删除队列中最后一个元素,然后返回这个元素的值,如果队列中已经没有元素了(队列已经没了)那么他会返回null,他们都是原子操作。在队列左侧新增:lpush。原创 2023-02-14 17:29:43 · 449 阅读 · 0 评论 -
Spring Boot集成Easypoi导出Excel
Spring Boot集成Easypoi导出Excel,建议用浏览器测试,如果用postman导出execl文件名会为response.xls,是正常的。需要导出的属性才加上@Excel注解,不加注解的属性不会导出。原创 2022-11-25 15:04:32 · 855 阅读 · 0 评论 -
Spring Boot异步Async使用Future与CompletableFuture的区别
Future:在执行结束后没法回调,调用get方法会被阻塞;CompletableFuture:在执行结束后可通过whenComplete或whenCompleteAsync方法回调,不会阻塞线程,同时也是支持get方法的;主线程等待各个异步执行的线程返回的结果来做下一步操作,则必须阻塞在future.get()的地方等待结果返回,这时候又变成同步了。适用于需要等异步结果的场景。原创 2022-11-21 17:24:42 · 4615 阅读 · 0 评论 -
SpringBoot文件分片上传
将大文件分割成小的片段,然后通过多个请求并行上传这些片段,最终在服务器端将这些片段合并还原为完整的文件。这种方式有助于规避一些上传过程中的问题,如网络不稳定、上传中断等,并能提高上传速度。原创 2022-10-31 14:43:15 · 6738 阅读 · 7 评论 -
Spring Boot配置文件属性变量引用${}和@@用法
Spring Boot配置文件属性变量引用${}和@@用法,@引用其他文件(除springboot配置文件,像pom.xml)中定义的值, 用@ @在 application.properties中引用pom.xml的变量。原创 2022-10-17 16:15:43 · 1609 阅读 · 0 评论 -
Spring Boot获取节假日API
需要知道某一天是不是节假日,或者是休息日。问题描述我们知道每年的假节日要等国家规定好,我们才能知道,所以自己是算不出的。马上想到的两个解决方法:1.通过调用互联网的节假日API(优点:方便,缺点:主动权在别人手里,万一别人的服务器出了问题,自己的服务也会受影响)2.每年自己手动配置一次(优点:安全不会出问题,缺点:麻烦)感觉都不是很完美,最后把这两种结合一下,生成的解决方案:每年年底定时去调用互联网的节假日API,做个异常捕捉,如果同步失败,证明这个接口可能出了问题,然后再去手动配原创 2022-09-12 10:37:10 · 4119 阅读 · 0 评论 -
Spring Boot+MyBatis实现数据库历史数据定时迁移
每天定时备份3个月前的数据,删除旧数据,会以年份自动生成表名,表不存在自动创建。原创 2022-08-17 17:42:20 · 2300 阅读 · 0 评论 -
Spring Boot中多个PostConstruct注解执行顺序控制
多个类中使用@PostConstruct加载先后顺序,有时候Class A中@PostConstruct注解的方法中的代码执行,需要等待Class B中@PostConstruct 注解方法中的代码执行完后,拿到结果,才能执行,也就是中A中某些代码的执行需要依赖B中代码执后的结果,此时就需要B先执行完,再执行A,原创 2022-08-16 14:42:16 · 7057 阅读 · 1 评论 -
RestTemplate get请求,header设置及传参方式
前言一、RestTemplateSpring Boot RestTemplate使用get请求,请求头header的设置及传参方式1. 有参数,没有请求头2. 有请求头,没参数3. 有请求头,有参数代码如下:原创 2022-07-12 10:47:30 · 36703 阅读 · 2 评论