自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 问答 (1)
  • 收藏
  • 关注

原创 Spring中七种Propagation类的事务属性详解

Spring框架提供了七种事务传播行为(Propagation),它们定义了事务方法在调用其他事务方法时的行为规则。NOT_SUPPORTED 挂起当前事务,非事务执行 非事务执行 不支持事务。REQUIRES_NEW 挂起当前事务,创建新事务 创建新事务 独立事务。适用场景:需要独立事务的操作,如日志记录,不希望受外层事务影响。嵌套事务是外部事务的一部分,只有外部事务提交时,嵌套事务才会提交。适用场景:查询方法,可以适应有事务或无事务的环境。

2025-08-05 15:04:08 421

原创 Spring Security 认证与授权实现机制

antMatchers("/api/**").hasAuthority("API_ACCESS") // 基于权限。.antMatchers("/admin/**").hasRole("ADMIN") // 基于角色。.antMatchers("/public/**").permitAll() // 公开访问。AuthenticationManager:认证入口点,委托给AuthenticationProvider。.anyRequest().authenticated() // 其他请求需要认证。

2025-08-04 19:54:11 1063

原创 超赞的 MyBatis 写法

MyBatis作为流行的ORM框架,有许多高效、优雅的写法可以提升开发效率和代码质量。这些写法可以显著提升MyBatis的使用体验和开发效率,根据实际场景选择合适的方式组合使用效果更佳。// 第1页,每页10条。1. 动态SQL构建(if/choose/when/otherwise)7. 分页查询(使用PageHelper插件)5. 注解式SQL(适合简单查询)// 其他方法实现...// 只需在查询前设置分页参数。// 1. 条件构造器查询。// Mapper中使用。// 自定义枚举处理器。

2025-08-02 12:23:11 401

原创 RestTemplate 的作用与调用方式详解

Spring框架提供的RestTemplate是简化HTTP请求的同步客户端工具,支持GET/POST/PUT/DELETE等请求方法。摘要介绍了基础调用方式(带参数请求、JSON/表单数据处理)、高级用法(请求头设置、异常处理、文件上传)以及完整配置示例(超时设置、日志拦截器)。文章还包含最佳实践建议(连接池配置、线程安全)和常见问题解决方案(中文乱码、SSL证书问题)。RestTemplate适合在传统Spring项目中实现RESTful API调用,但新项目可考虑响应式WebClient作为替代方案。

2025-08-01 13:43:36 947

原创 Redisson实现Redis分布式锁的原理

Redisson是一个基于Redis的Java驻内存数据网格(In-Memory Data Grid)客户端,它提供了丰富的分布式对象和服务,其中分布式锁是其核心功能之一。

2025-08-01 11:17:13 1325

原创 SpringBoot 实现 RAS+AES 自动接口解密

/ 会话30分钟过期。这套方案结合了RSA和AES的优势,既保证了密钥交换的安全性,又利用了对称加密的高效性,适合为第三方提供安全的API服务。这种RSA+AES混合加密方案既保证了密钥传输的安全性,又利用了对称加密的高效性,适合对安全性要求较高的接口场景。// 4. 返回服务端AES密钥(用客户端AES密钥加密)// 4. 返回服务端AES密钥(用客户端AES密钥加密)POST /api/encrypt/init 初始化会话,交换AES密钥。// 3. 存储双方协商的密钥 (实际可用组合密钥)

2025-07-30 18:39:55 1035

原创 上传文件不同的文件类型并读取文件的内容

System.out.println("\n文件内容已保存到: " + selectedFile.getName() + ".txt");System.out.println("检测到文件类型: " + fileExtension.toUpperCase());System.out.println("已选择文件: " + selectedFile.getName());System.out.println("\n=== 文件内容预览(前1000字符) ===");// 设置文件过滤器。

2025-07-30 13:01:36 904

原创 Streams API 详解

collect(Collectors.toList()) // 优于 .collect(ArrayList::new, List::add, List::addAll)中间操作(Intermediate) 返回Stream,可链式调用 filter(), map(), sorted()// 结果: ["H", "e", "l", "l", "o", "W", "o", "r", "l", "d"]4.6 anyMatch()/allMatch()/noneMatch() - 匹配检查。

2025-07-30 08:28:36 1200

原创 BigDecimal常见用法、示例及注意事项

《BigDecimal 使用指南》摘要:本文详细介绍了 Java 中 BigDecimal 的正确使用方法。重点包括:1)推荐使用字符串构造而非 double 构造以避免精度丢失;2)必须为除法运算指定舍入模式;3)比较时应使用 compareTo 而非 equals;4)注意格式化输出和科学计数法处理。文章还指出了常见陷阱,如不可变性导致的运算问题,并提供了安全转换、精确比较等实用工具方法。最后给出了性能优化建议,如重用预定义常量和批量运算优化。掌握这些技巧可确保财务计算等高精度运算的准确性。(149字)

2025-07-29 22:04:19 1022

原创 Spring事务失效的八种常见场景

确保@Transactional注解的方法为public避免自调用,或使用AopContext.currentProxy()获取代理对象配置正确的rollbackFor属性或抛出RuntimeException需要捕获异常时手动回滚或重新抛出确保使用支持事务的数据库引擎根据业务需求正确配置传播行为多数据源时指定正确的事务管理器避免在final/static方法上使用事务注解理解这些场景可以帮助开发者在实际项目中避免事务失效的问题。

2025-07-29 20:23:52 946

原创 SpringBoot 中提供实用工具类

/ 要求参数(String)必须有长度(即,Not Empty),否则抛出异常,不予放行。// 要求参数(String)必须有内容(即,Not Blank),否则抛出异常,不予放行。// 要求参数(List/Set)必须非空(Not Empty),否则抛出异常,不予放行。// 要求参数 object 必须为非空(Not Null),否则抛出异常,不予放行。// 相当于 toString()方法,但参数为 null 时,返回字符串:""// URL 资源,如 file://... http://...

2025-07-29 18:59:28 821

原创 Java线程池详解

线程池是Java并发编程中的核心组件,合理使用线程池可以降低资源消耗、提高响应速度,并且便于线程管理。

2025-07-29 11:28:51 833

原创 JAVA服务中的大文件上传和下载优化

本文介绍了文件上传下载的优化方案,主要包括:1)分片上传和断点续传实现,通过分块存储和合并处理大文件;2)流式传输技术,包括NIO零拷贝和内存映射文件提升效率;3)断点续传下载方案,支持Range请求和随机访问;4)高级优化如异步处理、对象存储集成;5)系统配置调优建议。同时提供了监控指标、日志记录等运维方案,以及前端配合实现进度显示的技术要点,适用于视频等大文件传输场景,能有效解决网络不稳定、内存占用高等问题。

2025-07-27 20:52:57 1128

原创 Spring Boot 中整合WebSocket

将目前的类定义成一个websocket服务器端,注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端。log.error("ServerDataWebSocket.消息发送失败,失败原因:{}", e.getMessage());log.info("有新窗口开始监听,当前在线人数为{}", getOnlineCount());log.info("有一连接关闭,当前在线人数为:{}", getOnlineCount());//构建redisKey。

2025-07-27 17:56:18 1140

原创 第三方系统接口安全设计方案

本文介绍了一种保障第三方系统接口安全的设计方案。核心内容包括:1)采用API密钥对机制(accessKey/secretKey)进行身份认证,通过UUID生成唯一密钥并加密存储;2)使用HMAC-SHA256签名算法验证请求完整性,防止数据篡改;3)通过时间戳和随机数(nonce)校验防范重放攻击;4)实现AES加密的数据传输保护;5)基于Spring Security和Redis的限流机制确保系统可用性。方案还包含完整的数据库表设计、实体类实现以及安全过滤器配置,为第三方接口调用提供了身份认证、数据防篡改

2025-07-26 22:00:38 774

原创 Java实现API接口敏感数据加解密

PostMapping("/updateSensitiveInfo") public AjaxResult updateSensitiveInfo(@DecryptRequest @RequestBody SensitiveInfoDTO dto) { // dto已经是解密后的对象 // 处理业务逻辑... return AjaxResult.success();throw new RuntimeException("响应数据加密失败", e);// 将IV和加密数据一起返回。// 获取用户敏感信息。

2025-07-26 15:53:07 1298

原创 TCC模式实现批量转账与自动冲正方案

1.定义事务的实体,分成TRYING,CONFIRMED和CANCELLED,这个三种2.创建tcc事务的实体,包括主键id ,事务的id,TccStatus3.tcc参与者的实体 ,包括主键id ,事务的id,TccStatus ,参与的服务名称,confirmidbigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',varchar(64) NOT NULL COMMENT '全局事务ID',status。

2025-07-25 12:10:01 968

原创 在项目中集成RabbitMQ

本文介绍了Spring Boot集成RabbitMQ的完整实现方案。首先通过pom.xml添加AMQP依赖,并在配置文件中设置连接参数。核心配置类RabbitConfig定制了消息转换器,特别处理Java8日期类型序列化。通过扩展RabbitTemplate实现消息发送的增强功能,包括统一ID生成、上下文注入等。消息消费者采用手动ACK模式,配合死信队列和异常处理机制确保消息可靠性。方案适用于需要标准化消息格式、传递上下文信息或实现消息审计的分布式系统场景,提供了包括延迟消息、消息追踪等企业级特性。

2025-07-24 21:45:46 947

原创 kafka在springBoot中怎么进行集成

本文介绍了Spring Boot集成Kafka的完整流程。首先在pom.xml中添加spring-kafka依赖,然后在application.yml中配置Kafka服务器地址、生产者和消费者的各项参数。通过KafkaTemplate实现消息发送,使用@KafkaListener注解创建消息消费者。文章还介绍了测试方法及高级配置选项,包括JSON消息处理、手动提交Offset和异常处理机制。最后总结了关键配置项的作用和推荐场景,如消息确认级别、重试次数、消费偏移量设置等,为开发人员提供了完整的Kafka集成

2025-07-24 19:57:42 666

原创 工作常用sql

本文介绍了MySQL存储过程的完整写法及常用数据库查询操作。存储过程部分包含创建、调用、删除等基本语法,演示了无参和带参数存储过程的实现。数据库操作部分涵盖了系统信息查询(当前用户、数据库、表大小等)、表结构查询(外键、主键)、数据查询(LIMIT、ORDER BY、GROUP BY)、条件查询(EXISTS、IN、NOT IN)以及索引优化等内容。文章提供了实用的SQL示例,包括联合查询、执行计划分析和索引创建等数据库管理常用操作。

2025-07-24 09:59:50 581

原创 增加actuator的相关控制权限请求以避免信息暴露

httpBasic() // 启用HTTP Basic认证。sensitive: true # 标记为敏感端点。@Order(1) // 确保在Shiro配置前生效。1.增加相关的配置文件和pom文件。

2025-07-23 22:46:41 993

原创 实用sql语句编写

null"> CASE status WHEN 0 THEN '待审核' WHEN 1 THEN '通过' WHEN -1 THEN '拒绝' WHEN 2 THEN '待完善' ELSE '其他' END as status_desc, </if> create_by, create_time, remark from sys_dict_data。比如:SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');SELECT DATE_ADD(日期, INTERVAL 1 DAY);

2025-07-23 22:37:41 683

原创 如何对SpringBoot配置文件敏感信息加密?

4.将加密后的相关的字符串在配置的yaml文件进行替换,注意增加ENC(),并增加相关的配置密钥的配置文件。5.在启动类上增加jasypt自启动的注解 EnableEncryptableProperties。按照上面的方法,即能实现相关的加密敏感数据配置文件的操作。2.找到对应的jar包之后运行cmd。加密相关的配置文件的相关敏感信息。1.引入jasypt的相关依赖。

2025-07-16 18:51:10 216

空空如也

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

TA关注的人

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