Spring Boot 让我们创建和运行项目变得更为迅速,现在已经有越来越多的人使用它。 我们已经在几个项目中使用了 Spring Boot ,今天我们就来一起讨论一下如何改进 Spring Boot 应用的性能。 首先,从之前我在开发中遇到的一个问题说起。 总结 这些都是我们在项目开发中使用到的一些优化 Spring Boot 应用的小技巧,对于大的应用性能的提高还是很明显的。大家可以尝试一下,然后告诉我们你的测试结果。 摘选文章及链接: (1)Spring Boot 性能优化:Spring Boot Performance; (2)Spring Boot 内存优化:Spring Boot Memory Performance ; (3)https://www.techempower.com/benchmarks/; (4)Spring 应用程序优化:Optimizing Spring Framework for App Engine
方便项目启动,不需要下载Tomcat或者Jetty 针对目前的容器优化,目前来说没有太多地方,需要考虑如下几个点 线程数 超时时间 jvm优化 针对上述的优化点来说,首先线程数是一个重点,初始线程数和最大线程数 jvm优化一般来说没有太多场景,无非就是加大初始的堆,和最大限制堆,当然也不是无限增大,根据的情况进快速开始 在spring boot配置文件中application.yml,添加以下配置 server : tomcat: min-spare-threads: 20 max-threads: 100 connection-timeout: 5000 这块对tomcat进行了一个优化配置 ,最大线程数是100,初始化线程是20,超时时间是5000ms Jvm优化 这块主要不是谈如何优化,jvm优化是一个需要场景化的,没有什么太多特定参数,一般来说在server端运行都会指定如下参数 初始内存和最大内存基本会设置成一样的 localhost.localdomain localhost”.“192.168.44.128”为实际的服务器的IP地 3.重启Linux,在服务器上输入hostname -i,查看实际设置的IP地址是否为你设置的 4.
本节主要: 1:spring boot 为我们提供的 starter pom 都有哪些 2:怎么添加xml配置文件 3:日志相关 本文是《凯哥陪你学系列-框架学习之spring boot框架学习》中第四篇 spring boot框架学习4-spring boot核心(3) 声明:本文系凯哥Java(www.kaigejava.com)原创,未经允许,禁止转载! 一:spring boot 为我们提供的 starter pom 都有哪些? 1.1:什么是starter poms? ? 1.2:spring boot 为我们提供的starter pom都有哪些? ? ? ? 二:怎么xml配置文件 spring boot虽然提倡零配置,即无XML配置的。 spring boot对各种日志框架都做了支持,我们可以通过配置修改默认的日志配置。 spring boot默认的日志框架是logback. 在全局配置文件中修改日志级别: ?
1、Spring Boot内置web Spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动。 合适的资源过滤 4、合适的插件配置(exec插件,surefire,Git commitID,shade) 5、针对 application.properties和application.yml 的资源过滤 Spring Boot版本。 启动: 我们直接启动:java -jar demo-0.0.1-SNAPSHOT.jar 4、部署到javaEE容器 修改启动类,继承 SpringBootServletInitializer Boot应用的docker化 首先看Spring Boot应用程序的docker化,由于Spring Boot内嵌了tomcat、Jetty等容器,因此我们对docker镜像的要求就是需要java运行环境
避免重复扫描Spring Boot使用自动配置来为应用程序提供默认配置。但是,如果您的应用程序中包含多个@SpringBootApplication注解,则可能会发生重复扫描的情况。 Spring Boot提供了异步处理的支持。您可以在方法上使用@Async注解来指示方法应该异步执行。 您可以使用Spring Boot的静态资源处理功能来处理静态资源。 Spring Boot提供了JPA分页的支持。您可以在Repository接口中定义一个分页方法。
Spring Boot提供了对多种缓存技术的支持,例如,Ehcache、Redis和Caffeine等。 Spring Boot提供了异步数据库访问的支持。您可以在Repository接口中定义异步方法。 Spring Boot提供了对多种连接池技术的支持,例如,HikariCP、Tomcat JDBC和Commons DBCP2等。
Web 开发的支持 使用 Spring Boot 实现 Web 开发更加便捷了,因为直接依赖 spring-boot-starter-web 模块即可支持 Web 开发,此模块预定义了 Web 开发中常用的依赖包 创建工程 创建一个 Spring Boot 工程,编辑 pom.xml 文件,添加 web 和 thymeleaf 依赖。另外,App 启动类与之前一致。 >spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot 4. Thymeleaf 的支持 Spring Boot 通过 org.springframework.boot.autoconfigure.thymeleaf 包为 Thymeleaf 提供了自动配置,涉及到的类如下
Spring Boot集成CKFinder-优化,对一些配置做一下优化,使配置更加灵活。 优化一:ckfinder.xml ckfinder.xml文件中,baseDir、baseURL需要配置固定路径。把这2个配置放到application.properties中。这样就灵活多了。 Spring Boot支持Servlet的注入,参考示例。 优化二:ImageBrowseServlet ImageBrowseServlet上文已经做了优化,Servlet用注入的方式更灵活,可以很方便的初始化一些参数。
Spring Boot是一个快速构建应用程序的框架,但在高负载下可能会出现性能问题。在本文中,我们将讨论如何对Spring Boot应用程序进行性能优化,以提高其性能和响应能力。 我们将探讨一些常见的性能优化技术,并提供一些示例。启用缓存Spring Boot提供了缓存支持,可通过在启动类上添加@EnableCaching注解来启用。 使用连接池Spring Boot默认使用Tomcat JDBC连接池。连接池可用于缓存数据库连接,从而提高应用程序的性能。如果您没有使用连接池,请考虑将其添加到您的应用程序中。 tomcat-jdbc</artifactId> <version>9.0.48</version></dependency>您可以在application.properties文件中配置连接池:spring.datasource.url =100spring.datasource.max-idle=20spring.datasource.min-idle=5在上面的示例中,initial-size表示连接池中最初创建的连接数,max-active
/ Junit5 / Spring Boot / IDEA IDEA版本 我这里用的是 2022 版本不同,主要跟生成的模板代码有关系 ---- Spring-Boot-Older-Release-Notes https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Older-Release-Notes ---- @SpringBootTest 起源 & Spring-Boot-1.4-Release-Notes https://github.com/spring-projects/spring-boot/wiki/Spring-Boot- ----- 2.0.9.RELEASE https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release-Notes ---- 2.1.0.RELEASE ----- 2.1.18.RELEASE https://github.com/spring-projects/spring-boot/wiki/Spring-Boot
--Doug Linder 正文: Spring Boot 从入门到实践系列教程(4)- Spring Boot Starters简介 1概述 依赖管理是任何复杂项目的关键方面。 Spring Boot启动器可以通过添加一个依赖项来帮助减少手动添加的依赖项的数量。 Spring Boot将确定要使用的版本 - 您需要指定的是spring-boot-starter-parent工件的版本。 , "entity_4")); } //... } 这里重要的是@WebAppConfiguration注释和MockMVC是spring-test模块的一部分,hasSize是一个Hamcrest 请注意,我们在JavaMailSender bean中进行了连接 - 该bean是由Spring Boot自动创建的。
配置项优化 Spring Boot Web 应用加速 完整配置项 management.add-application-context-header = false spring.mvc.formcontent.putfilter.enabled Spring Boot 默认场景下,将 org.springframework.web.filter.HttpPutFormContentFilter 被 org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration 自动装配,以下为 Spring Boot 1.4.1.RELEASE 以及更好版本定义(可能存在一定的差异): @Configuration @ConditionalOnWebApplication Spring Boot 默认场景下,将 org.springframework.web.filter.HttpPutFormContentFilter 被 org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration 配置项 按目前最新的 Spring Boot 1.5.2.RELEASE 版本中实现,也没有提供类似 spring.mvc.formcontent.putfilter.enabled 这样的配置项关闭
那么使用spring boot怎么处理这些呢? 假设现在我们的开发环境端口是:“ 测试环境端口是: 生产环境端口为: 创建如下图的配置文件: 说明: 1: dev是开发环境的 2:pro是生产环境的 3:test是测试环境的 4:是默认配置文件 需要在application.properties中配置: 使用如下: spring.profiles.active= 需要的环境名称 说明: 环境名称就是application- 后面对应的 如上图
今天来学习一下如何在spring boot项目中使用log4j2进来日志的输出。 添加依赖 ? 配置文件 在resources目录下新建log4j2.yml文件,其中添加以下内容: Configuration: status: debug Appenders: Console: #
引入依赖 <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j ", //css静态资源 "/**/*.woff", "/**/*.ttf" ); } 4. 增强特性 配置登陆访问限制 knife4j: enable: true # 开启Swagger的Basic认证功能,默认是false basic: enable: true
Spring Boot默认Tomcat为Servlet容器,以Tomcat为例进行说明,Tomcat,Jetty,Undertow都是通用的。 替换Tomcat Spring Boot默认使用tomcat作为Servlet容器。如果要替换,需要修改spring-boot-starter-web的依赖。 3.1 替换为Jetty 在pom.xml中,将spring-boot-starter-web的依赖由spring-boot-starter-tomcat替换为spring-boot-starter-Jetty : <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web >spring-boot-starter-undetow</artifactId> </dependency> 4.SSL配置 Spring Boot使用的是内嵌的Tomcat,因此SSL配置操作如下:
Spring Boot日志系统默认使用的是logback,灵活性不高,很多时候我们需要使用log4j。 集成方法很简单在maven依赖中加入: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter > <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions > </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j </artifactId> </dependency> 如果想集成log4j2,只需要将spring-boot-starter-log4j改为spring-boot-starter-log4j2即可 附
RestController @RequestMapping("tmall") @EnableAsync public class LoginController { private final org.slf4j.Logger
今天和小伙伴们来聊一聊 Spring6 中的一个新特性 AOT(Ahead of Time),这也是目前在学习 Spring6 源码视频的小伙伴的一个提问,其实还是挺有代表意义的,因此松哥整理一篇文章来和大家聊一聊这个话题 AOT 工作流程 Spring Framework 6 引入了AOT(Ahead-Of-Time)编译的概念,这是一种提前编译 Spring 应用程序的技术,以优化运行时性能,减少启动时间,并为创建 GraalVM Graal 编译器采用了基于图形的优化方法,可以更好地优化代码并提高执行性能。 内存占用:GraalVM 在内存占用方面相对较低,这是由于其编译器技术和优化策略的改进。相比之下,HotSpot JVM 在某些情况下可能会占用更多的内存。 最后,还需要安装一下 native-image,当然大家可以顺便用这个安装检验一下自己的 GraalVM 是否配置正确: 3.2 代码实践 接下来我们创建一个 Spring Boot 工程,来体验一下
框架提供的,用来读取配置文件中的属性值并逐个注入到Bean对象的对应属性 中,Spring Boot框架从Spring框架中对@Value注解进行了默认继承,所以在Spring Boot框架中还可以 Boot框架中,推荐使用配置类的方式向容器中添加和配置组件 在Spring Boot框架中,通常使用@Configuration注解定义一个配置类,Spring Boot会自动扫描和识别配置类,从而替换传统 在Spring Boot入门程序中,项目pom.xml文件有个核心依赖,spring-boot-starter-parent 从spring-boot-dependencies底层源文件可以看出,该文件通过标签对一些常用技术框架的依赖文件进行了统一版本号管理 spring-starter-boot--web依赖 查看 spring--starter--boot--web依赖文件源码,核心代码具体如下 从上述代码可以发现,spring-boot-starter-web 下⾯,本篇⽂章就对Lambda表达式进⾏简要介绍,并进⾏演示 说明' ,'2019-10-10', null, '默认分类', '‘2019,Java,学习路线图', '1', null), ('4',