Spring
文章平均质量分 85
又言又语
Leave my own steps
展开
-
【Spring Boot 3】【Web】返回 XML 数据
本文介绍开发 Spring Boot Web 应用时如何返回数据格式为 XML 的 HTTP Response Body。虽然 JSON 是 RESTful 默认使用的数据格式,但为了兼容某些已有系统或实现某些旧有协议,有时可能遇到需要返回 XML 数据格式的场景。本文介绍如何借助 Jackson 库实现此需求场景。本文并未详细说明各 Jackson 注解作用,可以从示例中直观看出每个注解对应的用途,如仍不清除可访问官方文档;原创 2024-09-09 22:25:05 · 1163 阅读 · 0 评论 -
【Spring Boot 3】【Web】处理跨域资源共享 CORS
本文介绍开发 Spring Boot Web 应用时如何处理跨域资源共享(CORS)。跨域资源共享(CORS,Cross-Origin Resource Sharing),是一种基于 HTTP 头的机制,允许服务器标识除了自己以外的其他源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。使用注解 Controller 类或方法配置CorsFilter创建实现接口的配置类,重写其方法自定义Filter设置。原创 2024-09-04 22:39:39 · 1185 阅读 · 0 评论 -
【Spring Boot 3】【Web】统一封装 HTTP 响应体
本文介绍开发 Spring Boot Web 应用时如何使用统一封装 HTTP 响应体(HTTP Response Body)。拦截带有注解或返回类型为的 Controller 方法,在这些方法执行完成之后且将 HTTP Response Body 封装成统一数据格式;对 HTTP Response Body 执行加密;对 HTTP Response Body 执行编码。supports:确定处理 HTTP Response Body 的范围,首先被执行;:在。原创 2024-09-03 23:17:39 · 960 阅读 · 0 评论 -
【Spring Boot 3】【Web】统一处理 HTTP 请求体
本文介绍开发 Spring Boot Web 应用时如何使用统一处理 HTTP 请求体(HTTP Request Body)。HTTP 客户端发送的请求体已编码,需要在 Controller 方法处理前先解码;HTTP 客户端发送的请求体已加密,需要在 Controller 方法处理前先解密;对 HTTP 请求体数据执行统一的过滤转换。仅对使用了注解的 Controller 方法生效;方法说明:supports:确定处理 HTTP Request Body 的范围,首先被执行;原创 2024-09-03 22:53:59 · 1378 阅读 · 0 评论 -
【Spring Boot 3】【Web】返回MP4视频流
本文介绍开发 Spring Boot Web 应用时如何返回MP4视频流给前端显示。本文给出了两种返回视频流的方法:返回返回但是第二种无法在前端控制视频播放进度,虽然有办法解决,但明显加大了代码复杂度,所以建议实际开发中有限选择方法一。本文出于演示目的,将MP4文件资源放在工程中一起打包,实际应用开发通常配合文件存储服务使用。原创 2024-09-01 22:17:54 · 407 阅读 · 0 评论 -
【Spring Boot 3】【Web】返回图片
本文介绍开发 Spring Boot Web 应用时如何返回图片给前端显示。原创 2024-09-01 21:55:51 · 988 阅读 · 0 评论 -
【Spring Boot 3】【Web】文件下载
本文介绍开发 Spring Boot Web 应用时如何实现文件下载功能。提供文件下载服务需要设置 HTTP 响应头:filename用于设置下载文件名本文出于演示目的,将下载的文件资源放在工程中一起打包,实际应用开发通常配合文件存储服务使用。原创 2024-09-01 21:39:31 · 746 阅读 · 0 评论 -
【Spring Boot 3】【Web】文件上传
本文介绍开发 Spring Boot Web 应用时如何实现文件上传功能。Spring 提供简化了文件上传操作,在之前都是使用原生的接收上传文件数据,后端将接收到的文件二进制流转换为File类;本文处于演示目的,将上传的文件存储到本地一个目录中,实际应用开发通常配合文件存储服务使用。原创 2024-09-01 21:13:00 · 412 阅读 · 0 评论 -
【Spring Boot 3】【Web】国际化
本文介绍开发 Spring Boot Web 应用时如何配置国际化。国际化,简称i18n,源自国际化英文单词中首字母i与尾字母n之间有18个字母。Spring 默认使用提供国际化支持。通过解析 HTTP Headers 中字段判断当前语言环境。基名_语言_地区.properties,其中语言使用小写双字母,地区使用大写双字母。常用语言zh:中文en:英语ar:阿拉伯语da:丹麦语de:德语el:希腊语es:西班牙语fi:芬兰语fr:法语he:希伯来语hu:匈牙利语it:意大利语。原创 2024-09-01 10:23:39 · 863 阅读 · 0 评论 -
【Spring Boot 3】【Web】ProblemDetail
本文介绍开发 Spring Boot Web 应用时如何使用返回错误响应信息。RFC 7807type:字符串,标识问题类型。title:字符串,简短可读的问题类型摘要。status:HTTP 状态码(HTTP status code)。detail:字符串,问题发生说明。instance:标识问题的具体实例的 URI 引用。中只有status属性是必须设置的,其他属性都可选;标准属性只有 5 个(typetitlestatusdetailinstance),可以使用(或。原创 2024-08-31 10:32:46 · 1067 阅读 · 0 评论 -
【Spring Boot 3】【Web】全局异常处理
本文介绍开发 Spring Boot Web 应用时如何捕获和处理全局异常。结合使用(或)和可以拦截处理指定 Controller 中的指定异常。(或)是 Controller 增强器,通过面向切面编程(AOP)给 Controller 添加统一的处理逻辑。可以通过namevalue等属性指定拦截的 Controller 范围;指定拦截处理的异常类型,只有一个数组类型参数value,可以接受一个或多个Throwable异常类型。原创 2024-08-31 09:56:14 · 1336 阅读 · 0 评论 -
【Spring Boot 3】【Web】解析获取HTTP请求参数
本文介绍开发 Spring Boot Web 应用时如何解析获取 HTTP 请求参数。,其中即传递的参数,代表博客的唯一标识;/blog?;使用 HTTP Headers(请求头)传参,将参数放在自定义 HTTP Header 中;使用 HTTP Headers(请求头)中的 Cookie 传参;使用 HTTP Body(请求体)传参。:处理 URL Path 传参。:处理 URL Query 传参。:处理 HTTP Headers 传参。原创 2024-08-31 09:26:39 · 1602 阅读 · 0 评论 -
【Spring Boot 3】【Web】自定义响应状态码
本文介绍开发 Spring Boot Web 应用时如何自定义 HTTP 响应状态码(HTTP Response Status Code)。原创 2024-08-30 21:26:02 · 567 阅读 · 0 评论 -
【Spring Boot 3】【Web】同时启用 HTTP 和 HTTPS
本文介绍如何在 Spring Boot Web 应用中同时启用 HTTP 和 HTTPS。原创 2024-08-30 21:01:10 · 795 阅读 · 0 评论 -
【Spring Boot 3】【Web】配置HTTPS
本文介绍如何在 Spring Boot Web 应用中配置 HTTPS。原创 2024-08-30 20:37:42 · 1259 阅读 · 0 评论 -
【Spring Boot 3】【Web】自定义过滤器
本文介绍开发 Spring Boot 应用如何自定义过滤器(Filter)实现。Spring Boot 过滤器(Filter)基于 Servlet 规范实现,可以对网络请求进行拦截,并在请求执行前后进行相应处理。编码转换安全校验请求链路跟踪过滤器(Filter)通常拿来与拦截器(Interceptor)进行比较,虽然它们在应用上存在诸多重叠,但实现原理完全不同。原创 2024-08-28 23:16:47 · 1175 阅读 · 0 评论 -
【Spring Boot 3】自定义拦截器
本文介绍开发 Spring Boot 应用如何自定义拦截器(Interceptor)实现。Spring Boot 拦截器(Interceptor)基于 Java 反射机制实现,可以实现对 Controller 中方法进行拦截,并在方法执行前后进行响应的处理,是基于切面编程(AOP)的一种模式。权限校验日志记录性能监控拦截器(Interceptor)通常拿来与过滤器(Filter)进行比较,虽然它们在应用上存在诸多重叠,但实现原理完全不同。原创 2024-08-28 22:49:35 · 1040 阅读 · 0 评论 -
【Spring Boot 3】【YAML】读取YAML文件
本文介绍开发Spring Boot应用如何读取resources目录下YAML格式文件的内容,注意并不是介绍使用@Value或读取或配置文件,而是读取额外的YAML格式文件,这些文件中的数据也并不一定用于应用配置。本文介绍两种读取YAML使用 Jackson使用 SnakeYaml本文仅说明了读取resources目录下YAML格式文件内容,实际开发中YAML。原创 2024-03-20 21:41:50 · 920 阅读 · 0 评论 -
【Spring Boot 3】【JSON】读取JSON文件
本文介绍开发Spring Boot应用如何读取resources目录下JSON格式文件的内容。有些情况下应用需要额外加载一些配置信息,这些配置信息既不在或bootstrap配置文件中,也不在由或bootstrap配置文件包含(include)的其他配置文件中,而是存储在一些额外的JSON格式文件中,需要应用启动时加载这些配置信息。本文演示了使用Spring Boot默认的Jackson框架读取JSON的方法,也可以切换为Fastjson2、GSON等其他框架;原创 2024-03-13 22:11:13 · 1455 阅读 · 0 评论 -
【Spring Boot 3】【Camel 4】动态路由
使用Java DSL定义动态路由使用XML DSL定义动态路由Java DSL动态路由:调用的addRoutes方法,参数类型为;XML DSL动态路由:通过从路由定义文本中构建Resource对象,调用的方法从当前对象中获取,然后调用的loadRoutes方法加载Resource对象。注意:这是Camel 4中的动态添加XML DSL路由的方法,在Camel 3及之前的版本中并不这样处理。原创 2024-03-11 23:24:52 · 1207 阅读 · 0 评论 -
【Spring Boot 3】【Camel 4】静态路由
本文介绍开发Spring Boot应用如何集成Apache Camel 4.x版本实现静态路由定义。Apache Camel是一个基于《【Apache Camel】基础知识》。Apache Camel提供了多种用于创建EIP模式路由的领域特定语言(Domain Specific Language,DSL),本文演示了最常用的三种:Java DSL、XML DSL、YAML DSL。Timer和Log,关于其他组件的使用在后续文章中陆续补充介绍。原创 2024-03-11 22:00:23 · 1102 阅读 · 0 评论 -
【Spring Boot 3】读取resource文件
本文介绍开发Spring Boot应用如何读取resources目录下文件的内容。本文介绍了开发Spring Boot应用读取resources构造Spring实例,构造参数是resources目录下文件的相对路径;调用当前类的方法,方法参数是加上resources目录下文件的相对路径;调用Spring自动注入的对象的方法,方法参数是加上resources目录下文件的相对路径;调用Spring自动注入的对象的方法,方法参数是加上resources目录下文件的相对路径。原创 2024-03-08 22:46:22 · 672 阅读 · 0 评论 -
【Spring Boot 3】动态注入和移除Bean
本文介绍开发Spring Boot应用如何动态注入及移除Bean实例。获取;通过获取;通过构建;调用的方法注入。原创 2024-03-08 21:48:10 · 1344 阅读 · 0 评论 -
【Spring Boot 3】获取已注入的Bean
本文介绍开发Spring Boot应用如何获取已注入的Bean实例。测试用的Bean和配置注入放在src/test目录下是为了辅助测试。原创 2024-03-07 22:46:21 · 1139 阅读 · 0 评论 -
【Spring Cloud 2023】【ZooKeeper】配置中心
本文介绍开发Spring Cloud应用集成ZooKeeper实现配置中心。本文引入 Apache Curator 是为了辅助测试配置中心相关功能;配置项说明::全局配置节点名称,默认。:默认true,启用ZooKeeper配置功能。:默认true,查找配置会抛出异常,否则只会记录警告日志。:替代用于在ZooKeeper中查值。:附加到应用程序名称的配置文件的分隔符,默认英文逗号。:配置根节点名称,默认config。原创 2024-03-07 22:11:39 · 1015 阅读 · 0 评论 -
【Spring Boot 3】【JPA】一对多双向关联
【Spring Boot 3】【JPA】@OneToMany 实现一对多单向关联和【Spring Boot 3】【JPA】@ManyToOne 实现一对多单向关联中分别介绍了如何使用@OneToMany和@ManyToOne注解处理一对多单向关联关系,本文介绍结合使用@OneToMany和@ManyToOne注解处理一对多双向关联关系,涵盖主从双数据表和带有中间关联关系表的三数据表这两种存储关联关系的实现。本文定义了公司(Company)、工程师(Engineer)、经理(Manager。原创 2024-02-26 22:18:48 · 809 阅读 · 0 评论 -
【Spring Boot 3】【JPA】@ManyToOne 实现一对多单向关联
【Spring Boot 3】【JPA】一对多单向关联》说明了开发Spring Boot应用时如何使用@OneToMany注解处理一对多关联关系,但是因为@OneToMany无法控制获取记录的数量,存在内存溢出的风险,因此日常开发中多数情况下会使用@ManyToOne注解处理一对多关联关系。本文介绍开发Spring Boot应用时如何使用@ManyToOne注解处理一对多单向关联关系,涵盖主从双数据表和带有中间关联关系表的三数据表这两种存储一对多关联关系的实现。本文定义了公司(Company。原创 2024-02-23 23:06:55 · 1300 阅读 · 0 评论 -
【Spring Boot 3】【JPA】@OneToMany 实现一对多单向关联
本文介绍开发Spring Boot应用时如何使用@OneToMany注解处理一对多单向关联关系,涵盖主从双数据表和带有中间关联关系表的三数据表这两种存储一对多关联关系的实现。本文定义了公司(Company)、工程师(Engineer)、经理(Manager)三个实体,其中公司(Company)与工程师(Engineer)、公司(Company)与经理(Manager)都是一对多单向关联,且关系主控方(即关系拥有方)都是公司(Company本文将中间表对应的Entity()和Repository(原创 2024-02-22 22:20:05 · 689 阅读 · 0 评论 -
【Spring Boot 3】【JPA】一对一中间表关联
存储一对一关联关系可以使用主从双数据表或带有中间关联关系表的三数据表,在《【Spring Boot 3】【JPA】一对一单向关联》和《【Spring Boot 3】【JPA】一对一双向关联》中说明了基于主从双数据表的实现,本文介绍带有中间关联关系表的三数据表实现。本文定义了房屋(House)、地址(Address)、房产证()三个实体,其中房屋(House)与地址(Address)一对一单向关联,房屋(House)与房产证()一对一双向关联,关系主控方(即关系拥有方)都是房屋(House。原创 2024-02-21 21:18:34 · 932 阅读 · 0 评论 -
【Spring Boot 3】【JPA】一对一双向关联
【Spring Boot 3】【JPA】一对一单向关联》说明了开发Spring Boot应用时如何使用@OneToOne注解处理一对一单向关联关系,本文介绍如何处理一对一双向关联关系。存储一对一关联关系通常使用主从双数据表,其中主表中有外键指向从表,有时也会使用三数据表,即存在一个中间关联关系表。本文基于主从双数据表实现。本文使用级联权限设置,因此主表的增加操作会影响从表,修改和删除操作都不会影响从表,级联权限设置包括:ALL:拥有以下所有权限。PERSIST。原创 2024-02-19 22:40:23 · 1007 阅读 · 0 评论 -
【Spring Boot 3】【JPA】一对一单向关联
本文介绍开发Spring Boot应用时如何使用@OneToOne注解处理一对一单向关联关系。存储一对一关联关系通常使用主从双数据表,其中主表中有外键指向从表,有时也会使用三数据表,即存在一个中间关联关系表。本文基于主从双数据表实现。本文使用级联权限设置,因此主表的所有增、删、改操作都会影响从表;本文针对价格类字段使用Double数据类型,开发中应根据实际情况采用Long或BigDecimal类型代替,不建议直接使用Double数据类型。原创 2024-02-19 22:13:09 · 1060 阅读 · 0 评论 -
【Spring Boot 3】【JPA】@ElementCollection处理一对多关系
OneToMany@ManyToOne本文介绍开发Spring Boot应用时如何使用处理集合属性处理集合属性处理集合属性处理类集合。原创 2024-02-18 21:51:22 · 679 阅读 · 0 评论 -
【Spring Boot 3】【JPA】嵌入式对象
日常开发过程中经常会遇到一些拥有很多字段的表,这些字段可以按照一定范围进行分组,但考虑到效率等因素不得已将所有这些字段都放在同一张表内,譬如员工信息表中既包含姓名、出生日期等基本信息,同时也包含该员工的联系信息,联系信息又由邮箱、手机号、通讯地址等组成,本可以将联系信息设计成单独的一张数据表,但为了避免多表联合查询的效率问题,将所有的这些字段都放入一张表内,从代码开发的角度出发,如果只定义一个员工Entity实体类并不一定合理,更合理的方案是将联系信息拆分成一个独立的类嵌入到员工Entity类中。原创 2024-02-02 22:44:10 · 929 阅读 · 0 评论 -
【Spring Boot 3】事件机制
定义事件类定义事件发布定时事件监听其中每一步都有多种方法实现,本文即是介绍开发Spring Boot应用实现事件机制的这些方法。Spring事件默认是单线程执行的,好处在于事件监听和事件发布可以使用同样的事务(Transaction)上下文;本文介绍的配置多线程执行的方法将对应用中所有的事件监听器生效,如果想控制只为其中某些监听器生效,则不需要本文中的定义,只需在需要多线程执行的事件监听器方法上添加@Async注解即可。原创 2024-02-01 23:05:42 · 1384 阅读 · 0 评论 -
【Spring Boot 3】应用启动执行特定逻辑
实现接口run方法;实现接口run方法;实现接口方法;使用注解;使用注解,设置。和接口是在Spring Boot应用程序启动后回调的接口,因此需要等待启动完成后才能执行的逻辑要使用这两种方法实现;在Bean初始化之前执行,的方法在Bean属性初始化后执行,他们只与当前Bean相关,并不会等到应用完全启动完成,因此他们的执行要早于和;@Scheduled也不依赖于应用完全启动,通过设置延迟执行时间可以尽量确保在应用完全启动后执行,但这种方法用得较少。默认情况下的执行在之前,通过的。原创 2024-02-01 22:19:22 · 911 阅读 · 0 评论 -
【Spring Boot 3】【@Scheduled】多线程执行定时任务
Scheduled使用@Scheduled注解的方法同时使用@Async注解;调用的 `` 方法设置执行定时任务的线程池。前序任务的执行时长制约后续任务的执行,导致任务实际执行的时间间隔超过了配置的时间间隔;任务执行需要抢占线程资源,很可能某些任务永远抢占不到线程资源,导致定时执行任务的逻辑实际是无效的。原创 2024-01-30 22:59:32 · 1951 阅读 · 0 评论 -
【Spring Boot 3】异步线程任务
本文介绍开发Spring Boot应用实现异步线程任务的方法及步骤。Spring Boot使用注解开启对异步线程的支持,使用@Async注解标注异步任务,@Async注解在类上,则该类中所有方法都是异步线程执行,需要注意使用@Async注解的类对象必须是Spring上下文管理的Bean实例;注解在方法上,只有标注注解的方法是异步线程执行。Spring异步任务的原理是通过Spring AOP动态代理实现的,Spring容器初始化Bean实例时会扫描@Async。原创 2024-01-29 23:16:37 · 1014 阅读 · 0 评论 -
【Spring Boot 3】【@Scheduled】动态删除定时任务
【Spring Boot 3】【@Scheduled】动态新增定时任务说明了开发Spring Boot应用时如何动态新增定时任务,本文将在其基础上继续介绍如何动态删除定时任务。1> 本文展示的添加定时任务的实现方法与【Spring Boot 3】【@Scheduled】动态新增定时任务不同,没有使用,而是自定义了一个类型的实例,通过调用此实例的schedule*方法添加定时任务,也未使用到注解;2> 本文使用了缓存所有的定时任务对象,后续所有对定时任务的控制本质上都是调用这些定时任务对象的方法;原创 2024-01-28 10:48:24 · 1379 阅读 · 0 评论 -
【Spring Boot 3】【@Scheduled】动态新增定时任务
【Spring Boot 3】【@Scheduled】动态修改定时任务时间说明了开发Spring Boot应用如何动态修改定时任务的时间,本文介绍如何动态新增定时任务。1> 本文配置定时任务使用的方法与【Spring Boot 3】【@Scheduled】动态修改定时任务时间中有所区别,没有使用方法,而是直接使用了等方法,需要关注的是,使用这些方法在添加完定时任务后需要执行语句,否则定时任务不会生效;原创 2024-01-27 22:14:13 · 1351 阅读 · 0 评论 -
【Spring Boot 3】【@Scheduled】动态修改定时任务时间
Spring Boot 3】【@Scheduled】静态定时任务说明了开发Spring Boot应用时如何配置静态定时任务,本文介绍如何动态调整定时任务时间。1> 如果要实现动态修改定时任务触发时间,则需要自定义接口的实现类,在实现方法时调用Spring提供的Bean的相关方法配置定时任务;2> 通过配置定时任务的方法除了外,还有等,在使用上稍有不同,本文中并未做出相关介绍;原创 2024-01-27 18:10:46 · 2028 阅读 · 0 评论