Spring Boot
文章平均质量分 82
Spring Boot相关技术积累记录
lakernote
不停的复盘自己,砥砺前行,不忘初衷
展开
-
Spring Boot 启动生命周期分析,每个组件的执行时序,扩展点分析等【建议收藏】(持续更新,见到一个分析一个)
Spring Boot 启动核心众所周知的SpringApplication.run(xxx.class, args);SpringApplication.run代码如下: /** * Run the Spring application, creating and refreshing a new * {@link ApplicationContext}. * @param args the application arguments (usually passed from a Jav原创 2021-01-21 15:57:29 · 2322 阅读 · 6 评论 -
从零搭建开发脚手架 Spring Boot配置扫描多个包目录的多种姿势
默认是扫描当前application启动类所在的包及其子包例如我们的代码如下:其内部原理,其实用的就是注解。如果我们想扫描其他的多个包目录应该怎么做呢?例如,扫描下面2个包。方式一 方式二 原理跟方式一相同方式三 原理跟方式一相同详解由上可知都是基于注解做的,那么我们来看下它是如何使用的。注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中。注解代码如下:注意看里面的注释,非常详细。场景以下是项目中可原创 2022-06-08 23:25:51 · 6359 阅读 · 1 评论 -
Spring Boot 控制bean加载顺序的几种方法
文章目录@DependsOn@Lazy@AutoConfigureAfter或@AutoConfigureBefore@DependsOn效果:lliBean在lakerBean之前实例化@DependsOn({"lliBean"}) // 名称必须写对,必须是容器里存在的Bean@Controllerpublic class lakerBean { ...}@Controllerpublic class lliBean { ...}@Lazy效果:只有首次访问它的时候才会实例原创 2021-03-24 18:39:23 · 613 阅读 · 0 评论 -
从零搭建开发脚手架 Spring Boot文件上传的多种方式、原理及遇到的问题
文章目录文件上传概述CommonsMultipartResolverServlet 3.0单文件上传多文件上传带其他参数的文件上传优雅的后端实现多个【文件+参数】上传方案一:上传文件Base64方案二:上传文件url原理问题Spring Boot上传文件大小限制上传文件过大异常拦截使用swagger上传文件不起作用文件上传概述Spring支持可插拔的MultipartResolver对象进行文件上传。目前有2个实现;在Servlet 2.5 及早期版本之前,文件上传需要借助 commons-fil原创 2021-03-10 16:28:12 · 1488 阅读 · 0 评论 -
Spring Boot Tomcat临时目录tmp抛错误异常
首先,我们应该知道,对于http POST请求来说,它需要使用这个临时目录来存储post数据。其次,因为该目录是挂在到/temp目录下的临时文件,那么对于一些OS系统,像centOS将经常删除这个临时目录,所有导致该目录不存在了解决方案1.在application.yml文件中设置multipart location ,并重启项目spring: http: multipart: location: /data/upload_tmp2.在application.yml文件中原创 2021-03-09 19:25:13 · 2819 阅读 · 3 评论 -
从零搭建开发脚手架 Spring Boot集成Flyway实现数据库版本管理
文章目录Flyway是什么Flyway集成和使用添加依赖配置文件脚本测试原理高级基于Java的迁移回调Flyway是什么Flyway是一款数据库版本控制管理工具,支持数据库版本自动升级。项目初始化的时候,往往都是要先手动执行数据库脚本。在开发过程当中,数据结构或者数据有更新时,往往都要手动执行脚本同步开发环境、测试环境。现在我们就可以使用flyway来帮我们自动的去完成这个工作。Flyway集成和使用添加依赖<dependency> <groupId.原创 2021-03-09 16:01:04 · 1288 阅读 · 0 评论 -
从零搭建开发脚手架 Spring Boot集成Mybatis-plus之一
文章目录简介特性框架结构依赖集成依赖配置编码开始使用核心功能代码生成器添加依赖编码编写配置自定义模板引擎自定义代码模板自定义属性注入字段其他信息查询注入实战总结类似TkMybatis官网地址:https://baomidou.com/简介MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。愿景我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。特性原创 2021-03-08 16:09:57 · 1292 阅读 · 0 评论 -
Spring Boot 单元测试
错误测试的时候报错 :org.junit.runners.model.InvalidTestClassError: Invalid test class xxx解决:有时候IDEA开启了自动导包, 导致@Test注解导包时会导错包。 正确的包地址: import org.junit.Test;原创 2021-03-08 14:30:17 · 168 阅读 · 0 评论 -
跨站请求伪造(CSRF)示例、原理及其防御措施
文章目录概述例子原理防御使用token验证判断Referer/OriginSameSite Cookie属性概述CSRF是Cross Site Request Forgery的缩写,中文翻译过来是跨站请求伪造。它欺骗用户在当前已通过身份验证的Web应用程序上执行不需要的操作。在社交软件的帮助下(例如通过电子邮件或聊天发送链接),攻击者可能会欺骗Web应用程序的用户执行攻击者选择的操作。如果受害者是普通用户,则成功的CSRF攻击会迫使用户执行状态更改请求,例如转账,更改其电子邮件地址等。如果受害者是管理帐原创 2021-03-04 13:59:13 · 2019 阅读 · 3 评论 -
layui使用笔记及常见前端相关问题记录
文章目录背景常见问题如何在Layui中使用Jquery背景因为本人专职Java后端,对于前端一窍不通,每当想做一些好用的小功能,缺乏前端展示是非常痛苦的一件事,所以痛定思痛,开始简单学习Layui作为平时前端开发框架。为什么选择Layui?询问了周边的前端大佬,Layui简单易上手,也可以EasyUi.项目结构图常见问题如何在Layui中使用Jquery<script> var $; // 使用jQuery layui.use(['jquery'], func原创 2021-03-03 14:02:46 · 253 阅读 · 0 评论 -
从零搭建开发脚手架 实现在线WebLog、动态修改日志级别
文章目录背景实现在线weblog动态修改日志级别背景项目开发中,查看日志以及修改日志级别是很常用的操作。一般的操作方式为:#mermaid-svg-FcOcpmu2sPf2yQAO .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-FcOcpmu2sPf2yQAO .label text{fill:#333原创 2021-02-26 11:40:30 · 2301 阅读 · 0 评论 -
从零搭建开发脚手架 Spring Boot 输入参数校验多种方式整理
文章目录背景常见场景1.bean验证2.简单平面参数验证3.手动验证4.List验证扩展1.@Validated 和 @Valid 的异同2.快速故障模式3.验证相关注解和说明4.自定义验证注解准备做个《从零搭建开发脚手架系列》,把遇到的问题和搭建的过程记录分享给大家。背景当涉及到用户输入时,就需要对输入的内容做校验,例如:姓名不能为空,年龄范围为0-150等等。我们使用Spring Boot内置的验证来实现此功能。从Spring Boot 2.3开始,我们需要显式添加spring-boot-原创 2021-02-23 19:33:19 · 1875 阅读 · 1 评论 -
从零搭建开发脚手架 HttpServletRequest多次读取异常,仅能读取一次
文章目录背景原因解决办法扩展思考1.是否存在线程安全问题?2.加载顺序问题?3.OncePerRequestFilter和Filter的区别准备做个《从零搭建开发脚手架系列》,把遇到的问题和搭建的过程记录分享给大家。背景在过滤器中或者Controller多次调用HttpServletRequest.getReader()或getInputStream()方法,会导致异常。给出示例代码如下: @RequestMapping(value = "/param") private Respons原创 2021-02-19 19:44:02 · 2973 阅读 · 5 评论 -
Java读取大文件
文章目录1. 在内存中读取2. 通过文件流式传输3. 使用Apache Commons IO进行流传输4. 结论1. 在内存中读取读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法:Files.readLines(new File(path), Charsets.UTF_8);FileUtils.readLines(new File(path));这种方法带来的问题是文件的所有行都被存放在内存中,当文件足够大时很快就会导致程序原创 2021-02-08 15:34:51 · 2145 阅读 · 3 评论 -
Spring 内置工具类总结
内置类搜索可以通过进入IDE并在*Utils类搜索或*Utils.java文件搜索中进行搜索来找到它们常用让我们看看其中的一些。BeanUtils -处理JavaBeans的有用功能ClassUtils -有用的功能,用于反思性地询问类型SystemPropertyUtils-处理System属性的有用功能FileCopyUtils-用于复制InputStream和OutputStream实现的有用功能AopUtils -处理Spring的AOP代理的有用功能ReflectionUti原创 2021-02-08 10:47:57 · 332 阅读 · 0 评论 -
Cookie和Session常用操作方法总结
文章目录1.Cookie1.1 创建一个cookie1.2 设置Cookie的到期时间1.3 设置Cookie域1.4 设置Cookie路径1.5 在Servlet中读取Cookies1.6 删除Cookie2. HttpSession2.1 获取会话2.2 会话属性1.Cookie简而言之,cookie是存储在客户端的一小部分数据,服务器在与客户端进行通信时会使用它们。它们用于在发送后续请求时识别客户端。它们还可以用于将某些数据从一个servlet传递到另一个servlet。有关更多详细信息,请参原创 2021-02-08 10:11:52 · 347 阅读 · 0 评论 -
Spring Boot 注解大全(实时更新中)
1. @ComponentScan@ComponentScan 对应 XML 配置形式中的 <context:component-scan> 元素,用于配合一些元信息 Java Annotation,比如 @Component 和 @Repository 等,将标注了这些元信息 Annotation 的 bean 定义类批量采集到 Spring 的 IoC 容器中。我们可以通过 basePackages 等属性来细粒度地定制 @ComponentScan 自动扫描的范围,如果不指定,则默认原创 2021-01-22 15:53:19 · 199 阅读 · 0 评论 -
Spring Boot程序做成系统服务(windows、linux)
文章目录LinuxSystem V InitSystemdUpstartWindowsWindows服务包装器Java服务包装器其他参考Linux为了将程序作为后台进程运行,我们可以简单地使用nohup命令,但是由于各种原因,这也不是首选方法。这个链接提供了很好的解释。在Linux下,我们可以选择使用传统的System V Init脚本或Systemd配置文件来配置守护程序。传统上,前者是最著名的选择,但后来逐渐被后者取代。您可以在此处找到有关此差异的更多详细信息。为了增强安全性,我们首先创建一原创 2021-01-21 15:32:03 · 382 阅读 · 0 评论 -
Spring Boot应用程序启动时运行自定义逻辑的多种方法(Spring Boot 扩展接口总结)
文章目录前言方法1. @PostConstruct注解2. InitializingBean接口3. ApplicationListener4. @Bean和initMethod属性5. 构造函数注入6. CommandLineRunner7. ApplicationRunner结合机制前言在SpringBoot启动期间会运行我们一些定制逻辑,这是一个很常见的需求,但是如何不清楚组件运行时序会导致很多的问题。在实例化任何对象之后,我们不能简单地将逻辑包含在bean的构造函数中或调用方法中。在这些过程中原创 2021-01-21 15:14:15 · 650 阅读 · 1 评论 -
配置Spring Boot 应用程序
文章目录端口号上下文路径错误页面自定义错误消息以编程方式关闭应用程序配置日志记录级别注册一个新的Servlet在启动应用程序中配置Jetty或Undertow端口号默认值为8080。server.port=8083对于基于YAML的配置:server: port: 8083我们还可以通过编程方式自定义服务器端口:@Componentpublic class CustomizationBean implements WebServerFactoryCustomizer<Con原创 2021-01-21 14:51:01 · 598 阅读 · 0 评论 -
Spring Boot 实现在线WebLog、动态设置日志级别(可配合Nacos实现动态刷新)
文章目录前言实战1. 实现服务器端日志浏览2. 实现日志级别查询3. 实现日志的级别动态设置前言通过前2篇原理剖析我们已经可以模拟造轮子了,本篇内容来实战一波。Nacos或者Config是如何加载远程配置的?然后再模拟它造个轮子?Nacos或者Config是怎么实现配置热刷新的?然后再模拟它造个轮子?在实际项目开发中,一般的业务配置刷新,直接用@RefreshScope+@Value即可,但是我们项目上经常会遇到这样的场景,无法简单的用@RefreshScope+@Value实现,例如:线原创 2021-01-19 19:55:01 · 3063 阅读 · 1 评论 -
Spring Boot 使用DeferredResult实现长轮询
文章目录前言1. 阻塞的REST服务2. 使用DeferredResult的非阻塞REST3. DeferredResult回调前言异步支持是在Servlet 3.0中引入的,简单来说,它允许在请求接收器线程之外的另一个线程中处理HTTP请求。从Spring 3.2开始可用的DeferredResult有助于将长时间运行的计算从http-worker线程卸载到单独的线程。尽管另一个线程将占用一些资源来进行计算,但同时不会阻止工作线程,并且可以处理传入的客户端请求。异步请求处理模型非常有用,因为它有原创 2021-01-18 14:24:21 · 2689 阅读 · 0 评论 -
Spring Boot Streaming and SSE异步处理
文章目录Spring Boot Streaming and SSE异步处理ResponseBodyEmitter服务器端客户端SseEmitter服务器端客户端StreamingResponseBody服务器端客户端Spring Boot Streaming and SSE异步处理ResponseBodyEmitterSseEmitterStreamingResponseBodyResponseBodyEmitterResponseBodyEmitter 处理异步响应。而且,它代表了许多子原创 2021-01-18 14:09:21 · 803 阅读 · 0 评论 -
Spring Boot 根据HttpServletRequest获取请求参数,对密码用***表示
log.info("[preHandle][" + request + "]" + "[" + request.getMethod() + "]" + request.getRequestURI() + getParameters(request));private String getParameters(HttpServletRequest request) { StringBuffer posted = new StringBuffer(); En...原创 2021-01-18 11:59:39 · 769 阅读 · 1 评论 -
Spring Boot 返回图片、音视频等流数据(多种方式)
文章目录前言HttpServletResponseHttpMessageConverter配置实现ResponseEntityResource实现结论前言项目开发中,会经常遇到需要下载的功能,即后台返回图片、音视频这类的文件流,记录下多种实现方式。HttpServletResponseHttpMessageConverterResponseEntityResourceHttpServletResponse图像下载的最基本方法是直接针对响应对象实现:@RequestMapping(val原创 2021-01-18 11:54:56 · 8079 阅读 · 0 评论 -
Spring Boot 实现文件上传(多文件、扩展参数等)
文章目录前言Commons FileUpload使用Servlet 3.0单个文件上传多个文件上传上传带有其他表单数据的文件Spring Boot 启动文件上传前言Spring允许我们使用可插拔的MultipartResolver对象启用多部分支持。该框架提供了一个Commons FileUpload的MultipartResolver实现以及另一个用于Servlet 3.0多部分请求解析的实现Commons FileUpload要使用CommonsMultipartResolver处理文件原创 2021-01-18 11:38:32 · 2411 阅读 · 1 评论 -
Spring Boot 读取http headers内容
文章目录1.读取HTTP headers1.1 单个读取1.2 全部读取2. @RequestHeader属性1.读取HTTP headers1.1 单个读取如果需要访问特定的标头,则可以使用标头名称配置@RequestHeader:@GetMapping("/greeting")public ResponseEntity<String> greeting(@RequestHeader("accept-language") String language) { // code原创 2021-01-13 10:00:47 · 9768 阅读 · 1 评论 -
Spring Boot中的自定义验证MessageSource
1.概述MessageSource是Spring应用程序中可用的强大功能。这有助于应用程序开发人员编写大量额外的代码来处理各种复杂的情况,例如特定于环境的配置,国际化或可配置的值。另一种情况是将默认验证消息修改为更用户友好/自定义消息。2. Maven依赖让我们从添加必要的Maven依赖关系开始:原创 2021-01-03 21:53:11 · 1523 阅读 · 0 评论 -
Spring 分组验证
前言分组验证约束声明约束组使用约束组测试一组约束测试具有多个组的约束使用GroupSequence指定约束组验证顺序在要验证的实体上使用GroupSequence在接口上使用GroupSequence测试组序列前言在很多情况下,我们需要在Bean的某些字段集上应用约束,然后再在同一Bean的另一组字段上应用约束。例如,让我们假设我们有一个两步注册表单。在第一步中,我们要求用户提供基本信息,例如名字,姓氏,电子邮件ID,电话号码和验证码。当用户提交此数据时,我们只想验证此信息。原创 2021-01-03 21:23:54 · 413 阅读 · 0 评论 -
Java的SSH连接远程服务器
Java的SSH连接远程服务器1.简介2. JSch2.1 实践3. Apache MINA SSHD3.1 实践4. 结论Java的SSH连接远程服务器1.简介SSH,也称为安全外壳或安全套接字外壳,是一种网络协议,允许一台计算机通过不安全的网络安全地连接到另一台计算机。在本教程中,我们将展示如何使用JSch和Apache MINA SSHD库通过Java与远程SSH服务器建立连接。在我们的示例中,我们将首先打开SSH连接,然后执行一个命令,读取输出并将其写入控制台,最后关闭SSH连翻译 2021-01-03 21:13:52 · 3331 阅读 · 1 评论 -
在Spring Boot中进行验证Bean
1.概述2. Maven依赖3.一个简单的领域类4.实施REST控制器5. @ExceptionHandler注释6.运行示例应用程序1.概述当涉及到验证用户输入时,Spring Boot为开箱即用的常见但关键的任务提供了强大的支持。虽然Spring Boot支持无缝定制验证的集成,用于执行验证的事实标准是Hibernate验证,该Bean验证框架参考中实现。2. Maven依赖在这种情况下,我们将学习如何通过构建基本的REST控制器来在Spring Boot中验证域对象。控制器原创 2021-01-03 20:42:07 · 607 阅读 · 0 评论 -
Java Bean验证基础
1.概述2. JSR 3803.依存关系3.1 验证API3.2 验证API参考实现3.3 表达语言依赖性4.使用验证注释5.编程方式验证5.1 定义Bean5.2 验证Bean6. 结论1.概述使用标准框架JSR 380(也称为*Bean Validation 2.0)*来验证Java Bean的基础。在大多数应用程序中,验证用户输入是非常普遍的要求。Java Bean验证框架已经成为处理这种逻辑的事实上的标准。2. JSR 380JSR 380是用于Java Bean验原创 2021-01-03 20:23:53 · 150 阅读 · 0 评论 -
Spring中@Valid和@Validated注解的差异
1.概述2. @Valid和@Validated 批注3.例子4.使用@Valid批注标记嵌套对象5.利与弊6.结论1.概述我们将重点介绍Spring中@Valid和@Validated批注之间的区别 。验证用户输入是我们大多数应用程序中的常见功能。在Java生态系统中,我们专门使用Java标准Bean验证API来支持此功能。而且,从4.0版本开始,它也与Spring很好地集成在一起2. @Valid和@Validated 批注在Spring中,我们使用JSR-303的@Valid批原创 2021-01-03 19:42:23 · 331 阅读 · 0 评论 -
springboot中获取运行端口port
前言如果是静态的port如果是动态的port前言项目中就是有这种需求,获取运行中springboot实例占用的服务端口原创 2020-12-24 15:16:00 · 6816 阅读 · 0 评论 -
spring boot 开启非web环境
前言设置方法方法1. 在pom.xml文件中,移除`spring-boot-starter-web`依赖方法2. MainApplication.java配置非web环境方法3. 修改配置文件前言项目中有些需求需要开发成非web环境的应用,例如定时服务、客户端程序、一些小工具等等原创 2020-12-24 15:02:29 · 573 阅读 · 0 评论 -
HttpServletRequest中的getRequestURI和getPathInfo之间的区别
getRequestURI()返回完整的请求URI。这包括部署文件夹和servlet映射字符串。它还将返回所有额外的路径信息。getPathInfo()仅返回传递到servlet的路径。如果没有传递额外的路径信息,则此函数将返回null。换句话说,如果将应用程序部署在Web服务器的根目录中,并且请求将servlet映射到“ /”,则getRequestURI()和getPathInfo()都将返回相同的字符串。否则,我们将获得不同的值。原创 2020-12-24 14:01:24 · 1872 阅读 · 0 评论 -
如何正确选择Spring Boot与Spring Cloud的版本以及对应关系
背景1. 新项目使用Spring Boot、Spring Cloud2. 将Spring Cloud添加到现有的Spring Boot应用程序一. 新项目使用Spring Boot、Spring Cloud1. 使用start.spring.io网站构建2. 使用idea的Spring Initializr构建二. 将Spring Cloud添加到现有的Spring Boot应用程序1. Spring Boot版本介绍2. Spring Cloud版本介绍3. Spring Boot 与S原创 2020-12-24 11:39:08 · 902 阅读 · 0 评论 -
Spring Boot2 自定义错误页面
文章目录1. 前言2. 禁用默认错误页3. 配置自定义页面3.1 准备个404.html页面3.2 自定义ErrorController4. 验证1. 前言一个常见的404错误页,Whitelabel Error Page我们在项目开发的时候有时候,有的需求场景可能需要自定义Spring Boot应用程序的默认错误页面,因为默认的实在是太丑了,体现不了我们的专业和牛逼的地方,那么应该怎么快速解决这个问题呢?来看看下面的操作吧,非常的优雅。2. 禁用默认错误页配置文件设置为false,默认是tr原创 2020-12-15 20:00:50 · 652 阅读 · 1 评论 -
Spring Boot 自定义过滤器并指定其调用顺序的多种姿势
文章目录1. 前言2. 定义过滤器2.1 @Component+@Order()2.2 @WebFilter+@ServletComponentScan2.3 FilterRegistrationBean3. 总结1. 前言我们在项目开发的时候有时候,有的需求场景可能需要自定义过滤器并指定其调用顺序,那么应该怎么快速解决这个问题呢?来看看下面的操作吧,非常的优雅,有3种方式。2. 定义过滤器2.1 @Component+@Order()用spring容器识别处理,代码如下:@Component原创 2020-12-15 19:17:42 · 2346 阅读 · 2 评论 -
Spring Boot 返回纯HTML
文章目录1. 前言2. Maven依赖3. Controller代码4. 验证1. 前言我们在项目开发的时候有时候,有的需求场景可能需要返回纯的html页面给前端,而不是Json格式,那么应该怎么快速解决这个问题呢?来看看下面的操作吧,非常的优雅2. Maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifac原创 2020-12-15 18:14:26 · 2496 阅读 · 1 评论