当前位置: 首页 > news >正文

Java学习,一文掌握Java之SpringBoot框架学习文集(1)

在这里插入图片描述

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。
🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。
🎉欢迎 👍点赞✍评论⭐收藏

SpringBoot知识专栏学习

SpringBoot知识云集访问地址备注
SpringBoot知识点(1)https://blog.csdn.net/m0_50308467/article/details/135322153SpringBoot专栏

文章目录

  • 🏆 Java框架之Spring Boot
    • 🔎 Java框架之Spring Boot学习(1)
      • 🍁🍁 01、Spring Boot 应用程序的运行方式有哪些?
      • 🍁🍁 02、Spring Boot 应用程序的启动流程是什么样的?
      • 🍁🍁 03、Spring Boot 中的 "约定优于配置" 是什么意思?
      • 🍁🍁 04、Spring Boot 应用程序的入口类需要添加哪个注解来启用自动配置机制?
      • 🍁🍁 05、如何覆盖默认的 Spring Boot 配置项?
      • 🍁🍁 06、Spring Boot 中的自动配置是如何工作的?
      • 🍁🍁 07、Spring Boot 中的自动配置是如何解决冲突的?
      • 🍁🍁 08、如何自定义 Spring Boot 的自动配置?
      • 🍁🍁 09、如何定义一个自定义的 Starters?
      • 🍁🍁 10、Spring Boot Actuator 提供了哪些功能?

🏆 Java框架之Spring Boot

🔎 Java框架之Spring Boot学习(1)

🍁🍁 01、Spring Boot 应用程序的运行方式有哪些?

Spring Boot 应用程序有以下几种运行方式:

  1. 在 IDE 中直接运行:在开发环境中,你可以选择合适的启动类,并在 IDE 中直接运行 Spring Boot 应用程序。

  2. 通过 Maven 或 Gradle 进行打包并在命令行中运行:使用 Maven 或 Gradle 将 Spring Boot 应用程序打包成可执行的 JAR 文件,然后在命令行中使用 java -jar 命令来运行应用程序。

  3. 使用 Spring Boot Maven 插件进行直接运行:Spring Boot 提供了一个 Maven 插件,可以直接在命令行中运行应用程序,无需事先进行打包。使用命令 mvn spring-boot:run 即可启动应用程序。

  4. 使用 Docker 镜像运行:将 Spring Boot 应用程序打包成 Docker 镜像,并使用 Docker 容器运行应用程序。这种方式提供了更好的隔离性和可移植性。

  5. 使用控制台方式运行:在命令行中使用 Spring Boot 的 SpringApplication 类的静态 run 方法来启动应用程序,例如在 Java 类中编写 public static void main 方法并调用 SpringApplication.run(Application.class, args)

  6. 使用 Spring Boot DevTools 进行热部署:在开发环境中,你可以使用 Spring Boot DevTools 模块来实现代码的热部署。在应用程序启动时,DevTools 会监视代码的变化,并自动重新加载修改后的代码,从而加快开发过程。

无论选择哪种运行方式,Spring Boot 应用程序都会使用内嵌的 Tomcat、Jetty 或 Undertow 服务器来运行。

🍁🍁 02、Spring Boot 应用程序的启动流程是什么样的?

Spring Boot 应用程序的启动流程如下:

  1. 执行 main 方法:在 Spring Boot 应用程序的启动类中,执行 public static void main(String[] args) 方法。

  2. 创建 SpringApplication 实例:用于自动配置所有Spring的环境并启动Spring应用程序,创建一个 SpringApplication 实例。

  3. 加载配置文件:Spring Boot 应用程序会默认加载 application.propertiesapplication.yml 配置文件,作为默认的配置文件,也可以通过设置启动参数 --spring.config.name--spring.config.location 来指定其他的配置文件。

  4. 执行自动配置过程:Spring Boot 应用程序会根据 classpath 中的依赖自动配置Spring环境,包括:自动配置数据源、Web应用程序、安全等等组件,也可以使用 @EnableAutoConfiguration 注解来手动配置。

  5. 启动 Web 服务器:Spring Boot 应用程序会启动内嵌的 Web 服务器(如 Tomcat 或 Jetty),并根据配置的端口号等信息来监听请求。

  6. 运行应用程序:应用程序启动后,可以执行自定义的逻辑或处理外部请求等,完成应用程序的启动。

  7. 触发应用程序启动事件:在启动过程中,SpringApplication 实例会触发一系列的应用程序启动事件,比如 ApplicationStartingEventApplicationEnvironmentPreparedEventApplicationPreparedEvent 等。这些事件可以被监听器捕获,并执行相应的操作。

  8. 加载启动类和应用程序上下文SpringApplication 加载启动类,并创建应用程序上下文。这个上下文是 Spring 的 IoC 容器,负责管理 Bean 实例、依赖注入等。

  9. 执行Spring Boot应用程序SpringApplication 运行应用程序上下文,执行 Spring Boot 应用程序的逻辑代码。主要是执行启动类上的 @SpringBootApplication 注解或其他注解所标注的方法。

  10. 启动完成:应用程序完成启动,服务器监听请求并响应。此时可以通过浏览器或其他客户端访问应用程序提供的服务。

在整个启动流程中,Spring Boot 提供了一系列的可扩展点和监听器,允许开发者自定义启动时的行为,如自定义配置加载、自定义 Bean 注册等。这使得 Spring Boot 在不同场景下都具备灵活性和可扩展性。

在以上过程中,Spring Boot 应用程序有两个重要的组件,即 SpringApplicationSpringApplicationRunListenerSpringApplication 负责调用 SpringApplicationRunListener 中的方法,来在启动过程中触发所需要的事件。

🍁🍁 03、Spring Boot 中的 “约定优于配置” 是什么意思?

“约定优于配置”(Convention over configuration)是 Spring Boot 的设计思想之一。它的主要含义就是在框架的设计中,遵循一定的约定,减少配置的工作量,从而提高开发效率。

在 Spring Boot 中,很多常见的配置已经被预设好了,例如内嵌的 Tomcat 服务器、通用的数据访问、日志记录等功能。开发者只需要遵循一定的默认约定,就可以快速创建可执行的 Spring 应用程序,而不需要过多的配置或管理。

举个例子,Spring Boot 中的项目结构、Bean 命名规范、依赖管理等都有一定的约定,这些约定可以使得开发者能够使用更加简洁、明了的代码来实现应用程序的功能。

这种设计思想可以让开发者专注于应用程序的业务逻辑,而避免关注框架本身的细节。这样能够提高开发效率,让开发者更加专注于实现具体的业务需求。同时,这也使得应用程序的维护成本降低,因为维护者们只需要关注一些必要的配置,而不需要去深入了解框架本身的工作原理。

总之,“约定优于配置”是 Spring Boot 设计的一种思想,可以让开发者只需关注应用程序的逻辑实现,而无需过多关注框架本身的细节,从而提高开发效率和降低维护成本。

当你使用Spring Boot开发应用程序时,它遵循了一系列的默认约定。这些约定旨在帮助你快速搭建应用程序,并以最小的配置工作启动。

以下是一些关于Spring Boot中约定优于配置的例子:

  1. 默认的目录结构:Spring Boot希望你的项目按照它约定的目录结构组织代码。例如,将应用程序主类放在顶层包(top-level package)中,将控制器放在controllers包中,将实体类放在models包中等等。这样的规约可让其他开发人员更容易理解你的项目,也能更轻松地找到特定的组件。

  2. 自动配置:Spring Boot根据你的类路径、依赖和其他配置信息自动配置应用程序。这意味着你不需要显式地编写大量的配置代码。例如,当你添加Spring Data JPA依赖时,Spring Boot会自动配置JPA相关的Bean,以便你能够方便地使用它们。

  3. 默认的属性配置:Spring Boot为许多常见的配置属性提供了默认值。例如,默认数据源配置、服务器端口等。你可以在需要的情况下覆盖这些默认属性,以满足你的应用程序需求。

  4. 约定的Bean命名:Spring Boot会根据约定为某些Bean(如控制器、存储库、服务等)生成默认的Bean名称。这使得组件的自动装配变得更简单,无需手动指定Bean名称或使用注解。

这些约定在Spring Boot中充分利用了约定,使得开发过程更加高效和简洁。虽然你可以通过自定义配置来覆盖这些约定,但在大多数情况下,你只需要遵循这些默认约定就能够快速构建和启动应用程序。

🍁🍁 04、Spring Boot 应用程序的入口类需要添加哪个注解来启用自动配置机制?

在 Spring Boot 应用程序的入口类中,你需要添加 @SpringBootApplication 注解来启用自动配置机制。

@SpringBootApplication 是一个组合注解,它包含了以下三个注解的功能:

  • @Configuration:将该类标记为配置类。
  • @EnableAutoConfiguration:启用自动配置机制。
  • @ComponentScan:启用组件扫描,以便发现和装配其他组件。

通过添加 @SpringBootApplication 注解,你可以简化入口类的代码,并确保 Spring Boot 自动加载配置并扫描组件。

以下是一个示例:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}}

在这个示例中,@SpringBootApplication 注解用于标记 MyApplication 类作为 Spring Boot 应用程序的入口点。SpringApplication.run() 方法用于启动应用程序,并自动加载配置以及扫描组件。

需要注意的是,入口类应该位于包的顶层(top-level package)中,这样可以确保自动扫描到所有的组件。同时,@SpringBootApplication 注解也可以用于额外的配置类上,以确保这些配置类也能够被自动加载和扫描。

除了 @SpringBootApplication 注解,还有一些其他的启动注解也可用于启用自动配置机制,这些注解包括:

  • @EnableAutoConfiguration:启用自动配置机制。
  • @ComponentScan:启用组件扫描,以便发现和装配其他组件。
  • @Configuration:将该类标记为配置类。
  • @SpringBootConfiguration:将该类标记为 Spring Boot 的配置类。
  • @EnableAutoConfiguration@ComponentScan 的组合注解:这是 @SpringBootApplication 注解内部就包含了这些注解。

在大多数情况下,你可以直接使用 @SpringBootApplication 注解来启用自动配置机制,而不必使用其他特定的注解。

但如果需要对自动配置进行更深入的控制,你可以选择使用其他启动注解。例如,如果你需要排除特定的自动配置,可以使用 @EnableAutoConfiguration(exclude = {...}) 注解来排除不需要的自动配置。

总之,在 Spring Boot 应用程序的入口类中,添加合适的启动注解是启用自动配置机制的必要步骤,可以大大简化应用程序的构建和配置。

🍁🍁 05、如何覆盖默认的 Spring Boot 配置项?

在 Spring Boot 应用程序中,可以通过多种方式来修改或覆盖默认的配置项。以下是一些常见的方法:

1. application.properties/application.yml 配置文件

在应用程序的 classpath 中的 application.propertiesapplication.yml 中覆盖默认属性。例如,你可以在这些文件中添加以下配置来更改默认端口:

# application.properties
server.port=8080

或者使用 YAML 格式的配置文件:

# application.yml
server:port: 8080

2. 命令行参数

启动应用程序时,可以使用命令行参数来覆盖默认属性。例如,以下命令将更改默认端口:

java -jar myapp.jar --server.port=8080

3. 在代码中修改属性

使用 Spring 的 Environment 抽象类可以在代码中修改属性。例如,以下代码会将端口设置为 8080:

@Autowired
private Environment env;public void setPort() {env.setProperty("server.port", "8080");
}

4. 使用配置类

可以使用 @ConfigurationProperties 注解创建一个配置类,并在其中定义应用程序的配置项,然后将其注入到代码中以便在运行时修改属性。例如,以下代码片段创建了一个名为 MyConfig 配置类,其中的属性 server.port 具有默认值 8080

@Configuration
@ConfigurationProperties(prefix = "server")
public class MyConfig {private int port = 8080;public void setPort(int port) {this.port = port;}public int getPort() {return port;}
}

在应用程序的其他组件中可以使用 @Autowired 注解将 MyConfig 类注入到代码中,然后以相同的方式使用属性。

@Autowired
private MyConfig myConfig;public void setPort() {myConfig.setPort(8080);
}

无论使用哪种方法,都可以通过修改或覆盖默认配置项来自定义 Spring Boot 应用程序的行为。需要注意的是,某些配置属性只能通过一种或几种方法进行修改或覆盖,具体要根据属性的类型和用途来确定最佳配置方式。

🍁🍁 06、Spring Boot 中的自动配置是如何工作的?

Spring Boot 的自动配置是通过条件化的配置和自动装配实现的。它的工作原理可以总结为以下几个步骤:

  1. 类路径扫描:当应用程序启动时,Spring Boot 会扫描类路径上的依赖关系。这意味着 Spring Boot 可以检测到在应用程序类路径上存在的库和框架。

  2. 自动配置候选项的识别:Spring Boot 根据类路径上发现的库和框架,自动识别可能与当前应用程序相关的自动配置候选项。每个自动配置候选项对应于一个或多个自动配置类。

  3. 条件化的配置:Spring Boot 使用条件化注解来确定是否要激活某个自动配置。条件化注解允许根据一组条件来决定是否应该启用自动配置。例如,@ConditionalOnClass 注解会检查类路径上是否存在特定的类,如果存在,则激活自动配置。

  4. 自动配置类的执行:当自动配置被激活时,相应的自动配置类会被加载和执行。自动配置类根据条件进行配置,例如注册适当的 Bean、应用默认属性等。

  5. 用户自定义配置:如果用户提供了自己的配置,它会覆盖自动配置的默认值。用户可以通过 application.propertiesapplication.yml@ConfigurationProperties 注解等方式提供自己的配置。

通过这个自动配置的过程,Spring Boot 可以根据应用程序的类路径和用户的自定义配置,提供合理且默认的配置,减少了开发者的工作量。同时,开发者也可以通过自定义配置来覆盖或扩展默认的自动配置,以满足特定的需求。

需要注意的是,自动配置并不是万能的,它只提供了一种方便的方式来配置应用程序,对于更复杂的需求,仍然需要开发者手动进行配置。另外,为了避免不必要的自动配置,开发者也可以通过 @EnableAutoConfiguration(exclude = {...}) 来排除掉某些不需要的自动配置。

另外,Spring Boot 中的自动配置还有以下一些特性:

  1. 自动配置类:Spring Boot 使用很多自动配置类来根据应用程序的环境自动配置相应的组件,比如数据源、Web 容器、安全等等。

  2. 自定义过滤器和拦截器:Spring Boot 允许开发者定义自己的过滤器和拦截器,并且自动配置它们。

  3. 条件化的 Bean 创建:有时我们只想在满足某些条件时才创建某个 Bean,Spring Boot 提供了一些条件化的注解来满足这种需求,比如 @ConditionalOnProperty@ConditionalOnClass 等等。

  4. 自动配置的前置条件:有些自动配置需要满足一些前置条件才能生效,比如某个 Bean 已经存在、特定的类存在等等。Spring Boot 提供了一些前置条件来保证自动配置的正确性。

总之,Spring Boot 的自动配置是一种非常便捷和强大的特性,它在很大程度上简化了应用程序的配置工作,节约了开发者的时间和精力。当然,现有的自动配置并不一定满足所有场景,对于一些特殊的需求,我们仍然需要开发者手动进行配置。

🍁🍁 07、Spring Boot 中的自动配置是如何解决冲突的?

在 Spring Boot 中,自动配置可能会发生冲突。为解决冲突,Spring Boot采用了以下两个策略

  1. 优先使用用户定义的 Bean:当多个自动配置类尝试为相同的 Bean 创建实例时,Spring Boot 将优先考虑由用户显式定义的 Bean,而不是自动配置生成的 Bean。换句话说,如果在应用程序中定义了一个与自动配置类中相同类型和名称的 Bean,则Spring Boot将使用用户定义的 Bean,以解决冲突。

  2. 后加载的 Bean 会覆盖先前加载的 Bean:当存在多个自动配置类为相同的 Bean 进行不同的配置时,Spring Boot会根据配置类加载顺序来决定使用哪种配置。在应用程序启动时,Spring Boot首先加载较早的自动配置类,并在后续加载的自动配置类中进行 Bean 的定义。这样,后加载的 Bean 将替换先前加载的 Bean,解决了冲突。

请注意,自动配置的冲突在绝大多数情况下并不常见。当然,在遇到冲突时,我们应仔细研究其原因,并考虑采取手动配置或者排除某些自动配置的方式来解决冲突。有时候,自定义条件类也可以用来控制哪些自动配置应该生效,进一步解决自动配置的冲突。

🍁🍁 08、如何自定义 Spring Boot 的自动配置?

自定义 Spring Boot 的自动配置可以让您根据项目的需求或特定的场景进行定制化配置。下面是自定义 Spring Boot 自动配置的主要步骤,以下重点内容已加粗显示:

  1. 创建自动配置类:创建一个 Java 类,一般以 xxxAutoConfigurationXxxAutoConfiguration 命名,并使用 @Configuration 注解进行标记。

  2. 编写自动配置逻辑:在自动配置类中,使用各种 Spring 的注解和配置方式,编写自动配置的逻辑。根据具体需求,可以使用 @Bean 注解创建需要自动配置的 Bean,并对其进行初始化和配置。

  3. 使用条件注解:为了确保自定义的自动配置仅在特定条件下生效,可以使用条件注解来控制自动配置的生效条件。例如,使用 @ConditionalOnClass@ConditionalOnProperty 等注解来指定某个类、某个属性满足条件时才进行自动配置。

  4. 打包和引入:将编写好的自动配置类所在的模块打包为一个 Jar 文件,并将该 Jar 文件引入到您的项目中。可以使用 Maven、Gradle 等构建工具将模块打包为可发布的 Jar 文件。

  5. 启用自动配置:在 Spring Boot 主应用程序的入口类上使用 @EnableAutoConfiguration 注解来启用自定义的自动配置。这样,当应用启动时,Spring Boot 将加载并应用自定义的自动配置。

需要注意的是,自定义自动配置通常是为了解决特定需求或提供额外功能,而不是完全替换 Spring Boot 的默认自动配置。因此,在自定义自动配置时,应尽量遵循 Spring Boot 的自动配置规范,并确保自定义的配置与默认的配置可以和谐共存。

请参考以下示例说明每个步骤:

1. 创建自动配置类

@Configuration
public class MyAutoConfiguration {// 配置代码将在这里
}

2. 编写自动配置逻辑

在自动配置类中,可以使用 @Bean 注解创建需要自动配置的 Bean,并对其进行初始化和配置。例如,创建一个名为 myBean 的 Bean,并设置它的属性:

@Bean
public MyBean myBean() {MyBean bean = new MyBean();bean.setProperty("some value");return bean;
}

3. 使用条件注解

为了确保自定义的自动配置仅在特定条件下生效,可以使用条件注解来控制自动配置的生效条件。例如,使用 @ConditionalOnClass 注解确保特定的类可用时才进行自动配置:

@Configuration
@ConditionalOnClass(ConditionClass.class)
public class MyAutoConfiguration {// 配置代码将在这里
}

4. 打包和引入

使用构建工具(例如 Maven 或 Gradle)将自动配置类所在的模块打包为一个可发布的 Jar 文件。

5. 启用自动配置

在 Spring Boot 主应用程序的入口类上使用 @EnableAutoConfiguration 注解来启用自定义的自动配置。例如:

@SpringBootApplication
@EnableAutoConfiguration(MyAutoConfiguration.class)
public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
}

🍁🍁 09、如何定义一个自定义的 Starters?

自定义 Starters 是通过封装常用的依赖和配置,方便其他开发人员在 Spring Boot 项目中快速集成自定义功能的一种方式。下面是定义一个自定义 Starters 的主要步骤:

  1. 创建 Starter 模块:创建一个新的 Maven 或 Gradle 模块,作为定义自定义 Starter 的项目。

  2. 定义 Starter 名称和描述:在 Starter 模块的 pom.xml(或相应的构建文件)中,定义 Starter 的名称和描述等元数据信息,以便其他开发人员了解这个 Starter 的用途和功能。

  3. 添加 Starter 依赖:在 Starter 模块的 pom.xml(或相应的构建文件)中,添加需要封装的依赖库的依赖项。可以根据自己的需求选择需要的依赖库,例如数据库驱动、缓存库、消息中间件等。

  4. 创建自定义配置类:在 Starter 模块中,创建一个专门用于配置 Starter 的类。这个类可以包含一些初始化配置、默认值等。可以使用 @ConfigurationProperties 注解声明配置属性,并使用 @Component@Configuration 注解将其作为 Spring Bean 进行管理。

  5. 编写自动配置类:在 Starter 模块中,创建一个自动配置类,类似于自定义自动配置的步骤。该自动配置类可根据 Starter 的功能和特点,创建一些必要的 Bean 并进行初始化和配置。

  6. 打包和发布:使用构建工具将 Starter 模块打包为一个可发布的 Jar 文件。可以将其发布到本地 Maven 仓库,也可以发布到远程 Maven 仓库,以便其他开发人员可以通过 Maven 或 Gradle 方式引入使用。

  7. 使用自定义 Starter:在其他项目中,可以通过 Maven 或 Gradle 的方式引入刚才创建的自定义 Starter,即可获得该 Starter 封装的依赖和配置。可以在项目的 pom.xml(或相应的构建文件)中添加对 Starter 的依赖,并在项目的配置文件中使用 Starter 提供的配置。

通过自定义 Starters,可以将常用的依赖和配置进行封装,使项目的集成更加简单和统一。同时,也方便了其他开发人员在 Spring Boot 项目中快速集成自定义功能。

当然,请参考以下示例说明每个步骤:

1. 创建 Starter 模块

创建一个新的 Maven 或 Gradle 模块,作为定义自定义 Starter 的项目。命名为 my-starter

2. 定义 Starter 名称和描述

my-starterpom.xml(或相应的构建文件)中,定义 Starter 的名称和描述等元数据信息:

<artifactId>my-starter</artifactId>
<name>My Starter</name>
<description>A custom starter for my project</description>

3. 添加 Starter 依赖

my-starterpom.xml(或相应的构建文件)中,添加需要封装的依赖库的依赖项。例如,添加 Spring Boot Starter Web 的依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

4. 创建自定义配置类

my-starter 中,创建一个用于配置 Starter 的类 MyStarterProperties

@ConfigurationProperties("my.starter")
public class MyStarterProperties {private String message = "Hello, Starter";public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}
}

5. 编写自动配置类

my-starter 中,创建一个自动配置类 MyStarterAutoConfiguration

@Configuration
@ConditionalOnClass(WebMvcConfigurer.class)
@EnableConfigurationProperties(MyStarterProperties.class)
public class MyStarterAutoConfiguration {private final MyStarterProperties properties;public MyStarterAutoConfiguration(MyStarterProperties properties) {this.properties = properties;}@Beanpublic MyStarterBean myStarterBean() {MyStarterBean bean = new MyStarterBean();bean.setMessage(properties.getMessage());return bean;}
}

6. 打包和发布

构建 my-starter 模块,并将其打包为一个可发布的 Jar 文件。可以使用 Maven 或 Gradle 命令进行构建。

7. 使用自定义 Starter

在其他项目中,可以通过 Maven 或 Gradle 的方式引入 my-starter。例如,在项目的 pom.xml(或相应的构建文件)中添加对 Starter 的依赖:

<dependencies><dependency><groupId>com.example</groupId><artifactId>my-starter</artifactId><version>1.0.0</version></dependency>
</dependencies>

8. 项目配置文件中使用 Starter 配置

然后,在项目的配置文件中使用 Starter 提供的配置:

my:starter:message: "Hello, Custom Starter"

🍁🍁 10、Spring Boot Actuator 提供了哪些功能?

Spring Boot Actuator 是一个用来监控和管理 Spring Boot 应用的框架,提供了一组 HTTP 端点(Endpoint)和 JMX Bean,用于获取应用的健康状况、度量信息、配置信息等。以下是 Spring Boot Actuator 提供的一些常用功能:

  1. 应用健康指标:/actuator/health 端点提供了应用健康状态的指标,包括应用的基本信息、状态和是否存活等。

  2. 应用信息终端:/actuator/info 端点提供了应用系统的信息,比如应用的版本信息、作者、反馈信息等。

  3. 度量指标终端:/actuator/metrics 端点提供了一系列度量指标信息,如 CPU 使用率、内存使用率、请求计数器、并发请求数量、线程池占用情况以及 HTTP 请求响应时间等。

  4. 环境信息终端:/actuator/env 端点提供了应用的环境变量信息和配置信息。

  5. 线程信息终端:/actuator/threaddump 端点提供了 JVM 运行时的线程信息。

  6. 请求追踪终端:/actuator/httptrace 端点提供了应用的 HTTP 请求追踪信息。

  7. 关闭应用终端:/actuator/shutdown 端点提供了应用关闭的功能。

以上为 Spring Boot Actuator 提供的常用功能,但它同时提供了许多其他功能的端点和扩展,如缓存信息、数据库连接状况、JMS 队列信息等。您可以根据具体的业务需求,选择相应的端点和功能来监控和管理应用。

在这里插入图片描述

相关文章:

Java学习,一文掌握Java之SpringBoot框架学习文集(1)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…...

javaWeb学生信息管理系统2

一、学生信息管理系统SIMS 一款基于纯Servlet技术开发的学生信息管理系统&#xff08;SIMS&#xff09;&#xff0c;在设计中没有采用SpringMVC和Spring Boot等框架。系统完全依赖于Servlet来处理HTTP请求和管理学生信息&#xff0c;实现了信息的有效存储、检索和更新&#xf…...

Linux Shell 019-文本行处理工具sed

Linux Shell 019-文本行处理工具sed 本节关键字&#xff1a;Linux、Bash Shell、文本行处理工具 相关指令&#xff1a;sed、 sed介绍 sed是Stream Editor&#xff08;流编辑器&#xff09;的缩写&#xff0c;简称流编辑器&#xff1b;用来处理文件的。sed是一行一行读取文件…...

Ubuntu中fdisk磁盘分区并挂载、扩容逻辑卷

Ubuntu中fdisk磁盘分区并挂载、扩容逻辑卷 一&#xff1a;fdisk磁盘分区并挂载1.查看磁盘分区信息2.分区3.强制系统重新读取分区(避免重启系统)4.格式化分区5.创建挂载目录6.设置开机自动挂载&#xff1a;7.验证并自动挂载(执行了该命令不需要重启系统)8.查看挂载007.异常情况处…...

【leetcode】栈与队列总结

本文内容来自于代码随想录 栈 用栈实现队列 两个栈实现队列。思路&#xff1a;两个栈分别表示入栈和出栈。 入队&#xff1a;直接入栈出队&#xff1a; a. 出栈为空&#xff0c;先把入栈中的元素全部放到出栈中&#xff08;相当于反过来&#xff0c;这样在出栈的时候先进的元…...

[EFI]HP Spectre 13 v102nl电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 HP Spectre 13 v102nl 处理器Intel Core i7-7500U (7th gen - Kaby Lake)已驱动内存8 GB LPDDR3-1866 SDRAM已驱动硬盘512 GB Toshiba NVMe™ M.2 SSD已驱动显卡Intel HD Graphics 620已驱动声卡Conexant CX8200 (0x2008)已驱动网卡I1211 Gigabit Etherne…...

【Pytorch】学习记录分享8——PyTorch自然语言处理基础-词向量模型Word2Vec

【Pytorch】学习记录分享7——PyTorch自然语言处理基础-词向量模型Word2Vec 1. 词向量模型Word2Vec)1. 如何度量这个单词的&#xff1f;2.词向量是什么样子&#xff1f;3.词向量对应的热力图&#xff1a;4.词向量模型的输入与输出![在这里插入图片描述](https://img-blog.csdni…...

【Kotlin 】协程

Kotlin协程 背景定义实践GlobalScope.launchrunBlocking业务实践 背景 在项目实践过程中&#xff0c;笔者发现很多异步或者耗时的操作&#xff0c;都使用了Kotlin中的协程&#xff0c;所以特地研究了一番。 定义 关于协程&#xff08;Coroutine&#xff09;&#xff0c;其实…...

用Xshell连接虚拟机的Ubuntu20.04系统记录。虚拟机Ubuntu无法上网。本机能ping通虚拟机,反之不能。互ping不通

先别急着操作&#xff0c;看完再试。 如果是&#xff1a;本机能ping通虚拟机&#xff0c;反之不能。慢慢看到第8条。 如果是&#xff1a;虚拟机不能上网&#xff08;互ping不通&#xff09;&#xff0c;往下一直看。 系统是刚装的&#xff0c;安装步骤&#xff1a;VMware虚拟机…...

人机对话--关于意识机器

人机对话–关于意识机器 这段内容是我和《通义千问》的对话。这本身展示的是人工智能的效果&#xff0c;同时这里面的内容也有人工智能相关&#xff0c;与各位分享。 我&#xff1a;阿尼尔赛斯 《意识机器》这本书写的是什么&#xff1f; 通义千问&#xff1a; 阿尼尔赛斯教…...

八股文打卡day16——计算机网络(16)

面试题&#xff1a;TCP连接是如何确保可靠性的&#xff1f; 我的回答&#xff1a; 1.数据分块控制。应用数据被分成被认为最适合传输的数据块大小&#xff0c;再发送到传输层&#xff0c;数据块被称为数据报文段或数据段。 2.序列号和确认应答。TCP为每一个数据包分配了一个序…...

Java Object浅克隆深克隆

对象克隆 把A对象的属性值完全拷贝给B对象&#xff0c;也叫对象拷贝&#xff0c;对象复制。 实现Cloneable接口&#xff0c;表示当前类的对象就可以被克隆&#xff0c;反之&#xff0c;表示当前类的对象就不能克隆。 如果一个接口里面没有抽象方法&#xff0c;表示当前的接口…...

概率的 50 个具有挑战性的问题 [8/50]:完美的桥牌

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒&#xff08;Frederick Mosteller&#xff09;的《概率论中的五十个具有挑战性的问题与解决方案》&#xff09;一书。我认为创建一个系列来讨论这些可能作为面试问题出现的迷人问题会很有趣。每篇…...

自动驾驶学习笔记(二十四)——车辆控制开发

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo开放平台9.0专项技术公开课》免费报名—>传送门 文章目录 前言 控制算法 控制标定 控制协议…...

【起草】【第十二章】定制ChatGPT数字亲人

身为普普通通的我们&#xff0c;不知道亲人们在哪一天就要离开这个世界 &#xff1f; 作为普普通通的程序员&#xff0c;我们可以为我们的亲人做点什么 &#xff1f; 让他们以数字资产形式留在人世间 ? 对话&#xff5c;6岁女孩病逝捐器官&#xff0c;妈妈&#xff1a;她去…...

MySQL数据库索引

索引的定义 索引是一个排序的列表&#xff0c;包含索引字段的值和其对应的行记录的数据所在的物理地址 索引的作用 加快表的查询速度&#xff0c;还可以对字段排序 索引的副作用 会额外占用磁盘空间&#xff1b;更新包含索引的表会花费更多的时间&#xff0c;效率会更慢 …...

【LLM 】7个基本的NLP模型,为ML应用程序赋能

在上一篇文章中&#xff0c;我们已经解释了什么是NLP及其在现实世界中的应用。在这篇文章中&#xff0c;我们将继续介绍NLP应用程序中使用的一些主要深度学习模型。 BERT 来自变压器的双向编码器表示&#xff08;BERT&#xff09;由Jacob Devlin在2018年的论文《BERT:用于语言…...

数字人私人定制

数字人是什么&#xff1f; 在回答这个问题之前&#xff0c;我们先回答另一个问题&#xff0c;人如何与人工智能交流&#xff1f;目前可以通过文字、语音、电脑屏幕、手机屏幕、平板、虚拟现实设备等和人工智能交流&#xff0c;为了得到更好的交流体验&#xff0c;人工智能必然…...

CollectionUtils

使用 CollectionUtils 类的常用方法 在Java开发中&#xff0c;我们经常需要对集合进行各种操作&#xff0c;而Apache Commons Collections库提供了一个方便的工具类 CollectionUtils&#xff0c;其中包含了许多实用的方法。在这篇博客中&#xff0c;我们将深入了解一些常用的方…...

很想写一个框架,比如,spring

很想写一个框架&#xff0c;比如&#xff0c;spring。 原理很清楚&#xff0c;源码也很熟悉。 可惜力不从心&#xff0c;是不是可以找几个小弟一起做。...

Java集合/泛型篇----第五篇

系列文章目录 文章目录 系列文章目录前言一、说说LinkHashSet( HashSet+LinkedHashMap)二、HashMap(数组+链表+红黑树)三、说说ConcurrentHashMap前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通…...

ACES 增强版不丹水稻作物地图(2016-2022 年)

ACES 增强版不丹水稻作物地图&#xff08;2016-2022 年&#xff09; 用于改善粮食安全决策的 2016-2022 年年度作物类型稻米地图仍然是不丹的一项挑战。这些地图是与不丹农业部和 SERVIR 合作开发的。通过专注于发展不丹的科学、技术、工程和数学 (STEM)&#xff0c;我们共同开…...

【Spark精讲】一文讲透Spark宽窄依赖的区别

宽依赖窄依赖的区别 窄依赖&#xff1a;RDD 之间分区是一一对应的宽依赖&#xff1a;发生shuffle&#xff0c;多对多的关系 宽依赖是子RDD的一个分区依赖了父RDD的多个分区父RDD的一个分区的数据&#xff0c;分别流入到子RDD的不同分区特例&#xff1a;cartesian算子对应的Car…...

nacos2.3.0配置中心问题处理

问题&#xff1a;Error to process server push response: {"headers":{},"abilityTable":{"supportPersistentInstanceByGrpc":true},"module":"internal"} 处理办法&#xff1a; 将pom.xml中 <!-- nacos服务注册/发…...

Apollo自动驾驶系统:实现城市可持续交通的迈向

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言引言&#xff1a;1. 什么是微服务架构&#xff1f;2. 微服务架构的组成要素3. 微服务架构的挑战和解决方案4. 微服务架构的可扩展性和弹性 第二部分&#x…...

【WPF.NET开发】附加事件

本文内容 先决条件附加事件语法WPF 如何实现附加事件附加事件方案处理附加事件定义自定义附加事件引发 WPF 附加事件 Extensible Application Markup Language (XAML) 定义了一种语言组件和称为附加事件的事件类型。 附加事件可用于在非元素类中定义新的 路由事件&#xff0c…...

java浅拷贝BeanUtils.copyProperties引发的RPC异常 | 京东物流技术团队

背景 近期参与了一个攻坚项目&#xff0c;前期因为其他流程原因&#xff0c;测试时间已经耽搁了好几天了&#xff0c;本以为已经解决了卡点&#xff0c;后续流程应该顺顺利利的&#xff0c;没想到 人在地铁上&#xff0c;bug从咚咚来~ 没有任何修改的服务接口&#xff0c;抛出…...

【pynput】鼠标行为追踪并模拟

文章目录 前言基本思路安装依赖包实时鼠标捕获捕获鼠标位置捕获鼠标事件记录点击内容效果图 实时按键捕获控制按键操作捕获按键事件组合键记录区间设置 用户操作记录与回溯基本思路完整代码效果图 利用本文内容从事的任何犯法行为和开发与本人无关&#xff0c;请理性利用技术服…...

docker小白第十天

redis集群主从容错切换案例 3主3从的redis集群&#xff0c;某个主机宕机了&#xff0c;需要对应的从机补位。 docker exec -it redis-node-1 /bin/bash # 进入容器1的命令行 redis-cli -p 6381 # 进入节点1的命令行 cluster nodes # 查看集群信息可以看到1号和6号对应是主从关…...

Apache SSI 远程命令执行漏洞

一、环境搭建 二、访问upload.php 三、写shell <!--#exec cmd"id" --> 四、访问 如图所示&#xff0c;即getshell成功&#xff01;​...

阿里云30个公共云地域、89个可用区、5个金融云和政务云地域

阿里云基础设施目前已面向全球四大洲&#xff0c;公共云地域开服运营30个公共云地域、89个可用区&#xff0c;此外还拥有5个金融云、政务云地域&#xff0c;并且致力于持续的新地域规划和建设&#xff0c;从而更好的满足用户多样化的业务和场景需求。伴随着基础设施的加速投入和…...

Linux驱动开发之杂项设备注册和Linux2.6设备注册

目录 一、杂项设备注册 杂项设备注册简介 杂项设备注册特点: 杂项设备注册相关API misc_register() misc_deregister() 杂项设备注册相关例程 例程简介 源码分享 二、Linux 2.6设备注册 Linux2.6设备注册简介 Linux 2.6设备注册特点 Linux2.6设备注册流程 ​Linu…...

javafx写一个文档编辑器

文本编辑器是一种用于编辑纯文本文件的工具。它具有基本的文本编辑功能,如插入、删除、复制、粘贴等。文本编辑器通常不具备格式化文本、排版和图形编辑等高级功能,专注于纯文本的编辑。常见的文本编辑器包括记事本(Notepad)、Sublime Text、Visual Studio Code、Atom、Emacs…...

PHP与Angular详细对比 帮助你选择合适的项目技术

开发可有效扩展并提供诺克斯堡级安全性的Web应用程序和网站是每个开发人员的梦想。而使用这样的产品是每个用户的愿望。因此&#xff0c;为您的项目选择最合适和可靠的技术非常关键。 虽然PHP和Angular是完全不同的技术——PHP与JavaScript是一个更恰当的比较——但它们都广泛…...

基于立锜RTQ7882,支持全协议及DP显示功能的PD快充方案

在上一篇文章【基于RTQ7882的车载PD快充方案 - 大大通 &#xff08;wpgdadatong.com&#xff09;】中&#xff0c;已经对立锜科技&#xff08;Richtek&#xff09;及主打产品RTQ7882的基本功能作了介绍。 本文将分享RTQ7882近期新增的功能&#xff0c;以及其Cost Down版本。 旨…...

2023-12-25 LeetCode每日一题(不浪费原料的汉堡制作方案)

2023-12-25每日一题 一、题目编号 1276. 不浪费原料的汉堡制作方案二、题目链接 点击跳转到题目位置 三、题目描述 圣诞活动预热开始啦&#xff0c;汉堡店推出了全新的汉堡套餐。为了避免浪费原料&#xff0c;请你帮他们制定合适的制作计划。 给你两个整数 tomatoSlices …...

JavaScript 基础通关

快速熟悉 JavaScript 的基础语法&#xff0c;比较高级的比如事件放在后面的笔记中。 JavaScript 1. JavaScript 介绍 1.1 JavaScript 基本介绍 JavaScript 是一门运行在客户端&#xff08;浏览器&#xff09;的编程语言&#xff0c;实现人机交互的效果。实现网页特效、表单验…...

目标检测损失函数:IoU、GIoU、DIoU、CIoU、EIoU、alpha IoU、SIoU、WIoU原理及Pytorch实现

前言 损失函数是用来评价模型的预测值和真实值一致程度&#xff0c;损失函数越小&#xff0c;通常模型的性能越好。不同的模型用的损失函数一般也不一样。损失函数主要是用在模型的训练阶段&#xff0c;如果我们想让预测值无限接近于真实值&#xff0c;就需要将损失值降到最低…...

今年努力输出的嵌入式Linux视频

今年努力了一波&#xff0c;几个月周六日无休&#xff0c;自己在嵌入式linux工作有些年头&#xff0c;结合自己也是一直和SLAM工程师对接&#xff0c;所以输出了一波面向SLAM算法工程师Linux课程&#xff0c;当然嵌入式入门的同学也可以学习。下面是合作的官方前面发的宣传文章…...

python非常好用的文件系统监控库

如果你不想使用Watchdog库&#xff0c;而是自己编写代码来监视文件系统的变化&#xff0c;可以使用Python的内置模块os和time来实现。 下面是一个简单的示例代码&#xff0c;演示如何使用os和time模块来监视文件系统中文件的变化&#xff1a; pythonimport osimport timedef m…...

基于SpringBoot的电影购票系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的电影购票系统,java项目…...

Spring系列:Spring如何解决循环依赖

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…...

netty源码:(40)ReplayingDecoder

ReplayingDecoder是ByteToMessageDecoder的子类&#xff0c;我们继承这个类时&#xff0c;也要实现decode方法&#xff0c;示例如下&#xff1a; package cn.edu.tju;import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handle…...

Apache Doris (五十五): Doris Join类型 - Colocation Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. Colocation Join原理...

计算机组成原理复习7

内存管理 文章目录 内存管理存储器概述存储器的分类按在计算机中的作用&#xff08;层次&#xff09;分类按存储介质分类按存取方式分类按信息的可保存性分类 存储器的性能指标存储容量单位成本存储速度&#xff1a;数据传输率数据的宽度/存储周期 存储器的层次化结构多级存储系…...

python使用openpyxl操作excel

文章目录 前提读取已有excel创建一个excel工作簿对象创建excel工作簿中的工作表获取工作表第一种&#xff1a;.active 方法第二种&#xff1a;通过工作表名获取指定工作表​​​​​​第三种&#xff1a;.get_sheet_name() 修改工作表的名称数据操作写入数据按单元格写入通过指…...

使用keepalived时虚拟IP漂移注意事项

什么是Keepalived服务 keepalived是一个开源的软件项目&#xff0c;用于实现高可用性&#xff08;HA&#xff09;的网络服务器负载均衡和故障转移。它允许将多台服务器组合在一起&#xff0c;形成一个虚拟服务器集群&#xff0c;实现负载均衡和故障转移。 keepalived的核心功…...

32阵元 MVDR和DREC DOA估计波束方向图对比

32阵元 MVDR和DREC DOA估计波束方向图对比 一、原理 MVDR原理&#xff1a;https://zhuanlan.zhihu.com/p/457528114 DREC原理&#xff08;无失真响应特征干扰相消器&#xff09;&#xff1a;http://radarst.ijournal.cn/html/2019/3/201903018.html 主要参数&#xff1a; 阵…...

OpenCV-11颜色通道的分离与合并

本次我们使用两个比较重要的API split&#xff08;mat&#xff09;将图像的通道进行分割。 merge&#xff08;(ch1&#xff0c;ch2&#xff0c;ch3)&#xff09;将多个通道进行融合。 示例代码如下&#xff1a; import cv2 import numpy as npimg np.zeros((480, 640, 3),…...

从0到1入门C++编程——01 C++基础知识

文章目录 一、工具安装二、新建项目三、设置字体、注释、行号四、C基础知识1.数据类型2.输入输出3.运算符4.选择、循环结构5.跳转语句6.数组7.函数8.指针9.结构体 一、工具安装 学习C使用到的工具是Visual Studio&#xff0c;Visual Studio 2010旗舰版下载链接&#xff1a;点此…...