Java学习知识点小结20(SpringBoot框架)


🔫Spring Boot入门

简介:
SpringBoot用来简化Spring应用开发,是整个Spring技术栈的大整合,约定大于配置
在这里插入图片描述

优点:
快速创建独立运行的Spring项目
使用嵌入式的Servlet容器,应用无需打成WAR包
starters(启动器)自动依赖与版本控制
大量的自动配置,简化开发,也可修改默认值
无需配置XML,无代码生成,开箱即用
准生产环境的运行时应用监控
与云计算天然集成

微服务:
是一种架构风格,一个应用是一组小型服务,通过HTTP的方式进行互通
每一个功能元素最终都是一个可独立替换、独立升级的软件单元
在这里插入图片描述

🔫Spring Boot使用说明

◾创建一个maven工程
◾在pom.xml内添加SpringBoot依赖

<!--父项目:Spring Boot的版本仲裁中心,在dependencies里面管理的依赖的版本号,以后我们导入springboot管理的依赖默认不需要写版本号-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.2.RELEASE</version>
</parent>
<dependencies>
<!--spring-boot-starter:spring-boot场景启动器,这里导入了web模块正常运行所依赖的组件; 
 Spring Boot将所有的功能场景抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter,相关场景的所有依赖都会导入进来。-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

◾主程序类

/**
 * SpringBootApplication注解代表该类是springboot主程序类
 * SpringBoot运行这个类的main方法来启动SpringBoot应用
 * @author XJH
 */
@SpringBootApplication
public class HelloWorldMainApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloWorldMainApplication.class,args);
    }
}

@SpringBootApplication 注解
在这里插入图片描述

@SpringBootConfiguration 标注在某个类上,表示这是一个Spring Boot的配置类

@EnableAutoConfiguration 开启自动配置功能
包括将@SpringBootApplication标注的类的所在包及下面所有子包里面的所有组件扫描到Spring容器。


🔫Spring Initializer快速搭建Spring Boot项目

◾选择Spring Initializer创建项目
在这里插入图片描述

在这里插入图片描述
◾选择模块(自动添加启动器)
在这里插入图片描述
◾完成创建
在这里插入图片描述


🔫SpringBoot的配置

🔰配置文件
◾SpringBoot使用一个全局的配置文件
配置文件名为application.propertiesapplication.yml
◾作用:修改SpringBoot自动配置的默认值

🔰YAML语法
k:(空格)v 表示一对键值对(冒号后必须有空格)
◾空格的缩进来控制层级关系,左对齐的一列数据是同一层级

🔰注入配置文件的值

配置文件(yml)

person:
 lastName: simao
 age: 21
 birth: 1999/08/17
 maps: {k1: v1,k2: v2}
 lists:
  ‐sz
  ‐lg
  -gz

配置注入的JavaBean

/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
 * prefix = "person":与配置文件中person的所有属性进行一一映射
 * 需要先把组件放入容器中,才能使用容器提供的@ConfigurationProperties功能
 * ConfigurationProperties默认从全局配置文件中获取属性值
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public void setBirth(Date birth) {
        this.birth = birth;
    }
    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }
    public void setLists(List<Object> lists) {
        this.lists = lists;
    }
}

🔰使用@Value注入和@ConfigurationProperties注入比较

@ConfigurationProperties@Value
功能批量注入配置文件中的属性需要一个个指定
松散绑定支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持

🔰@PropertySource加载指定的配置文件

@PropertySource指定加载某个配置文件
@ConfigurationProperties指定加载文件中的哪一属性。

两个注解一起使用,解决了@ConfigurationProperties只能加载全局配置文件内属性的问题。

🔰@ImportResource:导入Spring的配置文件,@ImportResource标注在一个配置类上,让配置文件里面的内容(bean)生效。但是SpringBoot不推荐这种方式给容器中添加组件。
SpringBoot推荐使用纯注解的方式(使用配置类@Configuration代替Spring配置文件然后使用@Bean给容器中添加组件,在Spring篇内Spring新注解一节详细介绍)

🔰配置文件占位符
可以使用占位符配置随机数 ${random.value}
还可以使用占位符获取之前配置的值 ${之前配置过的属性名:默认值}

🔰Profile
Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活,指定参数等方式快速切换环境

多个Profile文件
◾子文件格式 application-{profile}.properties/yml
◾profile是环境名称,例如application-development.properties 代表开发环境
◾YML配置文件还可以使用文档分块的方式设置Profile

激活指定的profile
◾在主配置文件application中指定环境
例如:spring.profiles.active=development
在这里插入图片描述
即可切换为开发环境,端口号变为8081

◾命令行参数指定环境
在这里插入图片描述

🔰配置文件加载位置
springboot启动会扫描以下位置的application.properties或者application.yml文件作为默认配置文件。

根目录的config文件
根目录
classpath(resource文件夹)下的config文件
classpath下

优先级从高到底,高优先级的配置会覆盖低优先级的配置。
四个位置的主配置文件都会加载,形成互补。

🔰外部配置加载顺序
当项目打包成jar包后,SpringBoot还可以从以下位置进行配置加载

命令行参数 所有的配置都可以在命令行上指定
java -jar springboot_01-0.0.1-SNAPSHOT.jar --server.port=8081

jar包外部的配置文件优先级大于内部配置文件 springboot读取外部配置文件,只需要在jar包外添加一个配置文件覆盖默认的即可,无需修改代码


🔫Spring Boot自动配置原理

◾SpringBoot启动并加载主配置类,@EnableAutoConfiguration 开启自动配置功能
◾SpringBoot扫描所有jar包类路径下 META‐INF/spring.factories获取自动配置类并添加到容器中
◾当一个配置类 (以AutoConfigurartion为后缀的类) 生效,就会给容器中添加各种组件(使用@Bean标签),组件的属性从对应的properties类中获取,这些类里面的每一个属性是和配置文件绑定的。
总结:所以当我们要实现一个功能的时候,查看SpringBoot有没有默认的自动配置类可以实现,再看这个自动配置类中配置了哪些组件,配置类给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这些属性的值。


💡@Conditional注解的使用
作用:@Conditional指定的条件成立,才给容器中添加组件,配置类里面的所有内容才生效。

@Conditional扩展注解作用(判断是否满足当前指定条件)
@ConditionalOnJava系统的java版本是否符合要求
@ConditionalOnBean容器中存在指定Bean
@ConditionalOnMissingBean容器中不存在指定Bean
@ConditionalOnExpression符合指定的SpEL表达式
@ConditionalOnClass存在指定的类
@ConditionalOnMissingClass不存在指定的类
@ConditionalOnMissingClass不存在指定的类
@ConditionalOnSingleCandidate容器中只有一个指定的Bean,或指定的Bean是首选Bean
@ConditionalOnProperty指定的property属性有指定的值
@ConditionalOnResource类路径下是否存在指定资源文件
@ConditionalOnWebApplication系统环境是web环境
@ConditionalOnNotWebApplication系统环境不是web环境
@ConditionalOnjndiJNDI存在指定的项

自动配置类必须在一定的条件下才能生效,一般使用该注解进行控制。
可以在配置文件里配置debug=true属性,来让控制台打印所有生效的自动配置类。


🔫SpringBoot与日志
日志门面 (抽象层)日志实现
SLF4j(Simple Logging Facade for Java)Log4j Logback

SLF4j使用原理
调用日志记录方法,不应该来直接调用日志的实现类,而是调用日志抽象层的方法。

SLF4j使用图解
在这里插入图片描述
SLF4j问题
当程序有多个框架,每个框架有自己的日志实现,如何使用统一日志用SLF4J记录。

将系统中其他日志框架先排除出去
用中间包来替换原有的日志框架
导入slf4j其他的实现

在这里插入图片描述
SpringBoot通过上述原理适配所有的日志框架,底层使用slf4j+logback的方式记录日志,当我们引入其他框架的时候,需要把这个框架依赖的日志框架排除。

日志的使用
SpringBoot对日志进行了默认的配置,可以直接使用

@SpringBootTest
class Springboot01ApplicationTests {
    //得到日志记录器
    Logger logger = LoggerFactory.getLogger(getClass());
    @Test
    void contextLoads() {
        //日志级别由低到高trace<debug<info<warn<error
        logger.trace("trace日志");
        logger.debug("debug日志");
        logger.info("info日志");
        logger.warn("warn日志");
        logger.error("error日志");
    }
}

在这里插入图片描述

日志输出格式:
%d表示日期时间,
%thread表示线程名,
%‐5level:级别从左显示5个字符宽度
%logger{15} 表示logger名字最长15个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符

我们还可以自己指定配置,不使用默认的配置
在类路径下放相应配置文件即可,使用logback-spring.xml配置文件,可以使用SpringBoot的高级Profile功能 。


🔫Spring Web开发

🏎快速使用SpringBoot进行开发

◾创建SpringBoot项目,选中我们所需的模块。
◾SpringBoot默认将所需要的场景配置好了,只需要在配置文件中
编写少量的配置就可以运行
◾编写业务代码

🏎SpringBoot静态资源的映射规则
◾WebJars统一管理静态资源 WebJars官网
/webjars/**:在 classpath:/META-INF/resources/webjars/ 目录下得到静态资源

在WebJars官网找到项目所需的依赖,例如在jQuery、BootStrap等前端组件,然后在pom文件内引入依赖

/**可以访问当前项目在以下的路径保存的所有静态资源

springboot的静态资源文件夹
– classpath:/META‐INF/resources/
– classpath:/resources/
– classpath:/static/
– classpath:/public/
– /:当前项目的根路径

◾静态资源文件夹下的index.html页面是springboot项目的欢迎页
◾静态资源文件夹下的favicon.ico文件是springboot项目的图标


🏎thymeleaf模板引擎
◾引入thymeleaf依赖

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

◾Thymeleaf使用

✔只要将HTML页面放在classpath:/templates/路径下,thymeleaf就能自动渲染。
✔在HTML页面导入thymeleaf的名称空间

<html lang="en" xmlns:th="http://www.thymeleaf.org">

✔实例
controller类将一个mao放入请求域中
取出map的值

✔Thymeleaf语法
th:任意html属性(替换原生属性的值)
在这里插入图片描述
Thymeleaf中内联表达式: [[...]][(...)]中的表达式

表达式
${...} 获取变量值;OGNL
#{...} 获取国际化内容
*{...} 选择表达式,当前对象/变量取值
@{...} 定义url表达式(与th:href一起使用)
~{...} 片段引用表达式


🏎springboot内SpringMVC的自动配置
◾springboot自动配置了许多SpringMVC基本组件,例如视图解析器、转换器
如何修改springboot的默认配置
🎿springboot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(@Bean@Component),如果有就用用户自己配置的组件,如果没有才自动配置(@ConditionalOnMissingBean);如果有的组件可以有多个,则将用户配置的和默认的组合起来。
🎿springboot内有许多的xxxConfigurer帮助我们进行扩展配置。
🎿springboot内有许多的xxxCustomizer帮助我们进行定制配置 。

扩展SpringMVC配置
方法一:编写一个扩展配置类(使用@Configuration注解),实现WebMvcConfigurerSpringMVC配置接口。
如果需要全面接管SpringMVC配置,再加上@EnableWebMvc注解,使得sprintboot的SpringMVC的自动配置失效。

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //直接将/hello请求映射到success页面
        registry.addViewController("/hello").setViewName("success");
    }
}

方法二:在一个配置类里创建一个WebMvcConfigurer对象,并用放入IOC容器中

@Bean
public WebMvcConfigurer MyWebMvcConfigurer(){
    return new WebMvcConfigurer() {
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/").setViewName("login");
            registry.addViewController("/index.html'").setViewName("login");
        }
    };
}

编写拦截器
首先编写一个拦截器类(实现HandlerInterceptor接口)

/**
 * @author XJH
 * 登陆检查拦截器
 */
public class LoginHandlerInterceptor implements HandlerInterceptor {
    Logger logger = LoggerFactory.getLogger(getClass());
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
       Object user=request.getSession().getAttribute("user");
        logger.info("拦截!");
       if(user==null){
           request.setAttribute("msg","没有权限");
           request.getRequestDispatcher("/index.html").forward(request,response);
           return false;
       }else{return true;}
    }
}

然后需要在配置类(WebMvcConfigurer)里重写方法添加拦截器

@Override
public void addInterceptors(InterceptorRegistry registry) {
   // "/**"代表拦截所有请求,excludePathPatterns是过滤以下请求
    registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/","/index.html","/user/login","/webjars/**");
}

🏎 实现国际化
springboot中自动装配好了国际化的组件,我们只需要编写国际化配置文件,然后就可以在页面内使用#{属性名}表达式取出国际化的值
在这里插入图片描述


🏎SpringBoot 错误处理机制与定制错误页面
🌂原理:首先springboot是通过ErrorMvcAutoConfiguration进行错误处理的自动配置。当系统出现4xx或者5xx的错误就会提交/error请求(浏览器请求BasicErrorControllererrorHtml()方法返回modelAndView,APP等客户端error()方法返回JSON数据)

🌂如何定制错误的页面
(1) 有模板引擎的情况:将错误页面命名为错误状态码.html放在模板引擎文件夹里面的error文件夹下,发生此状态码的错误就会来到对应的页面 (使用4xx和5xx作为错误页面的文件名来匹配这种类型的所有错误 )

页面能获取的信息
timestamp:时间戳
status:状态码
error:错误提示
exception:异常对象
message:异常消息
errors:JSR303数据校验的错误

(2) 没有模板引擎则静态资源文件夹下找,如果没有定制错误页面就使用SpringBoot默认的错误提示页面。

🌂定制错误数据
错误页面上能用的数据,或者返回json能用的数据都是通过getErrorAttributes()方法得到的,可以自定义一个ErrorAttributes继承DefaultErrorAttributes类改变返回的错误内容。

🏎配置springboot的嵌入式Servlet容器

◾修改Servlet容器的相关配置

//在配置文件里配置
server.port=8081 
server.context‐path=/springboot

◾注册Servlet三大组件
使用ServletRegistrationBean 对象注册 Servlet
使用FilterRegistrationBean对象注册 Filter
使用ServletListenerRegistrationBean对象注册 Listener

@Configuration
public class MyServerConfig {
    @Bean
    public ServletRegistrationBean myServlet() {
        //MyServlet参数是我们自定义的servlet类
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(), "/Servlet");
        return registrationBean;
    }

    @Bean
    public FilterRegistrationBean myFilter() {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        //MyFilter是我们自定义的filter类
        registrationBean.setFilter(new MyFilter());
        registrationBean.setUrlPatterns(Arrays.asList("/hello", "/Servlet"));
        return registrationBean;
    }

    @Bean
    public ServletListenerRegistrationBean myListener() {
        //MyListener是自己写的监听器类
        return  new ServletListenerRegistrationBean<>(new MyListener());

    }
}

◾将tomcat替换为其他嵌入式Servlet容器
可以扩展的Servlet容器有三种:
在这里插入图片描述
这里以jetty替换tomcat为例:(在pom.xml移除tomcat依赖,加入jetty依赖)

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <exclusions>
          <exclusion>
              <artifactId>spring-boot-starter-tomcat</artifactId>
              <groupId>org.springframework.boot</groupId>
          </exclusion>
      </exclusions>
  </dependency>
<!--引入jetty-->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jetty</artifactId>
  </dependency>

◾与外置的Servlet容器对比

嵌入式Servlet容器:应用打包成可执行的jar
优点:简单、便携
缺点:默认不支持JSP、优化定制比较复杂

外置的Servlet容器:使用外部安装的Tomcat,创建springboot需要将应用设置为以war包的方式打包。

两种方式不同的原理
jar包:执行SpringBoot主类的main方法,启动ioc容器,创建嵌入式的Servlet容器。
war包:启动服务器,服务器启动SpringBoot应用(编写SpringBootServletInitializer的子类,并调用configure方法),启动ioc容器。


🔫SpringBoot的数据访问

Spring Boot默认采用整合Spring Data的方式进行SQL和NOSQL统一处理,添加了大量的自动配置,屏蔽了很多设置。

🔰整合Mybatis
◾添加mybatis启动器依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.2</version>
</dependency>

◾在application.yml文件内配置数据源属性

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: xjh1999
    url: jdbc:mysql://localhost:3306/share_platform?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT%2B8
    type: com.alibaba.druid.pool.DruidDataSource
    schema:
      - classpath:.sql文件路径
    initialization-mode: always

◾数据库建表(schema属性可以自动建表)并且创建对应的JavaBean

◾编写mybatis全局配置文件以及mapper映射文件(mapper文件夹下)
在这里插入图片描述
◾在application.yml文件内配置mybatis配置文件路径

mybatis:
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml

◾编写mapper类
要使用@Mapper或者@MapperScan将接口扫描到容器中

@Mapper
public interface UserMapper {
    public UserInfo getUserById(Integer Id);
}

🕹整合SpringData JPA
◾编写实体类和数据表进行映射,并配置映射关系(使用注解)

@Entity 标注用于实体类声明语句之前,指出该Java 类为实体类,将映射到指定的数据库表。
@Table(name = "表名") 指定该类对应到数据库的表名
@Id 用于声明一个实体类的属性映射为数据表的主键列
@GeneratedValue 用于标注主键的生成策略,例如 IDENTITY:ID自增长的方式
@Column 当实体的属性与其映射的数据库表的列不同名时使用该注解指定属性的列名

◾编写一个Dao接口来操作实体类对应的数据表(实现Repository接口)

CrudRepository :是Repository的子接口,提供CRUD的功能。
PagingAndSortingRepository:是CrudRepository的子接口,添加分页和排序的功能。
JpaRepository:是PagingAndSortingRepository的子接口,增加了一些实用的功能,比如:批量操作等。
JpaSpecificationExecutor:用来做负责查询的接口。
Specification:是Spring Data JPA提供的一个查询规范,要做复杂的查询,只需围绕这个规范来设置查询条件即可。


🔫SpringBoot与缓存

🛸spring缓存抽象注解:
在这里插入图片描述
@Cacheable/@CachePut/@CacheEvict 主要的参数
在这里插入图片描述
其他注解
@Caching:设置方法的复杂缓存规则(内部同时配置多种缓存属性)
@CacheConfig:类的全局缓存注解配置

🛸缓存使用步骤
◾引入spring-boot-starter-cache模块
◾在启动类上使用@EnableCaching开启缓存
◾使用缓存注解
◾切换为其他缓存(默认是使用ConcurrentHashMap,常使用其他的缓存中间件代替)

🛸整合Redis
◾在linux服务器使用docker启动redis
◾引入spring-boot-starter-data-redis (容器内创建RedisCacheManager)
◾在application.yml内配置redis的连接地址
◾可以使用RedisTemplate操作redis

操作字符串:redisTemplate.opsForValue();
操作hash:redisTemplate.opsForHash();
操作list:redisTemplate.opsForList();
操作set:redisTemplate.opsForSet();
操作有序set:redisTemplate.opsForZSet();

◾默认创建的RedisCacheManager是使用RedisTemplate操作缓存的,RedisTemplate又是默认使用JDK序列化机制的,可以在配置类内自定义该类并使用@Bean注册,实现json序列化。


🔫SpringBoot与消息

📠消息服务两个重要概念:
消息代理(message broker)和目的地(destination)

消息发送者发送消息,由消息代理接管消息,消息代理保证消息传递到指定的目的地。

📠消息队列目的地的两种主要形式:

队列(queue):点对点消息通信(point-to-point),消息一旦被消费就会被删除
主题(topic):发布(publish)/订阅(subscribe)消息通信

📠消息队列协议对比:

JMSAMQP
定义Java apiWire-protocol
跨语言
跨平台
Model两种消息模型:Peer-2-Peer ,Pub/sub五种消息模型:direct exchange,fanout exchange,topic change,headers exchange,system exchange (后四种和JMS的pub/sub模型没有太大差别,仅是在路由机制上做了更详细的划分)
支持消息类型多种消息类型:TextMessage,MapMessage,BytesMessage,StreamMessage,ObjectMessagebyte[] 当实际应用时,有复杂的消息,可以将消息序列化后发送。
综合JMS 定义了JAVA API层面的标准,在java体系中,多个client均可以通过JMS进行交互,不需要应用修改代码,但是其对跨平台的支持较差。AMQP定义了wire-level层的协议标准;天然具有跨平台、跨语言特性。

📠Spring的消息
◾spring-jms提供了对JMS的支持
◾spring-rabbit提供了对AMQP的支持
◾需要ConnectionFactory连接工厂的实现来连接消息代理
◾使用JmsTemplate、RabbitTemplate来发送消息
◾使用@JmsListener(JMS)、@RabbitListener(AMQP)注解在方法上监听消息代理发布的消息
◾使用@EnableJms、@EnableRabbit开启支持两种消息队列


🔫SpringBoot与检索

Elasticsearch 面向文档,意味着它存储整个对象或文档(JSON形式)。并且对文档进行索引、检索、排序和过滤​而不是对行列数据,这也是 Elasticsearch 能支持复杂全文检索的原因。

Elasticsearch官方文档地址

◾SpringBoot默认支持两种技术与ES交互

1.Jest(默认不生效,需要导入jest工具包)
2.SpringData ElasticSearch 官方文档


🔫SpringBoot与任务

◾异步任务的两个注解:

@EnableAysnc 在启动类上添加开启异步注解
@Aysnc标记异步的方法或类 (当其它线程调用方法会开启一个新的线程去异步执行)

◾定时任务的两个注解:

@EnableScheduling 在启动类上添加开启定时任务注解
@Scheduled()标记定时任务的方法或类,属性是cron表达式

◾邮件任务

引入spring-boot-starter-mail
在application.yml内配置发送邮件账户
使用JavaMailSender发送邮件


🔫SpringBoot与安全

Spring Security是Spring自带的安全框架
官方文档

◾引入spring-boot-starter-security
◾编写Spring Security的配置类WebSecurityConfigurerAdapter
◾在配置类上使用@EnableWebSecurity注解开启WebSecurity模式


🔫Spring Boot热部署

◾引入依赖

<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-devtools</artifactId> 
</dependency>

◾使用Ctrl+F9重新编译并生效


🔫Spring Boot监控管理

◾引入依赖 spring-boot-starter-actuator
◾使用http请求方式访问监控端点

端点名描述
autoconfig项目自动配置类信息
auditevents审计事件
beans所有Bean的信息
configprops所有配置属性
dump线程状态信息
env环境信息
health应用健康状况
info当前应用信息
metrics应用的各项指标
mappings@RequestMapping映射路径
shutdown远程关闭当前应用(默认关闭)
trace追踪信息(http请求)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值