Loading

SpringBoot入门及深入

摘自:https://www.cnblogs.com/antLaddie/p/14253334.html

一:SpringBoot简介

  当前互联网后端开发中,JavaEE占据了主导地位。对JavaEE开发,首选框架是Spring框架。在传统的Spring开发中,需要使用大量的与业务无关的XML配置才能使Spring框架运行起来,这点备受许多开发者诟病。随着Spring4.x发布,Spring已经完全脱离XML,只使用注解就可以运行项目。为了进一步简化Spring应用的开发,SpringBoot诞生了。它是由Pivotal团队提供的全新框架,其设计目的是简化Spring应用的搭建及开发过程,并迎合时下流行的分布式微服务设计思想,越来越多企业在使用SpringBoot

1:设计初衷

  SpringBoot为我们开发者提供了一种更快速、体验更好的开发方式,我们可以开箱即用,无需像写Spring那样配置各种XML文件,虽然Spring3.0时引入了基于java的配置,但是编写这些配置无疑是在浪费大量时间,其实SpringBoot还内置Tomcat

2:核心功能

复制代码
一:独立的运行Spring
    SpringBoot 可以以jar包形式独立运行,运行一个SpringBoot项目只需要通过java -jar xx.jar来运行
二:内置Servlet容器
    Spring Boot可以选择内嵌Tomcat、jetty或者Undertow,这样我们无须以war包形式部署项目
三:简化Maven配置
    SpringBoot提供了一系列的start pom来简化Maven的依赖加载,例如,当你使用了spring-boot-starter-web
四:自动装配
    SpringBoot会根据在类路径中的jar包,类、为jar包里面的类自动配置Bean,这样会极大地减少我们要使用的配置。
当然,SpringBoot只考虑大多数的开发场景,并不是所有的场景,若在实际开发中我们需要配置Bean,而SpringBoot
没有提供支持,则可以自定义自动配置 五:准生产的应用监控 SpringBoot提供基于http ssh telnet对运行时的项目进行监控 六:无代码生产和xml配置 SpringBoot不是借助与代码生成来实现的,而是通过条件注解来实现的,这是Spring4.x提供的新特性
复制代码

Spring Boot只是Spring本身的扩展,使开发,测试和部署更加方便

3:本文开发环境需求

  SpringBoot 2.4.1正式发行版,要求Java8并且兼容Java15;对应的Spring版本是5.3.2;而且要求Maven 3.3+ 但是最好使用3.5.4稳定版本,而Servlet容器的版本为Tomcat9.0(Servlet Version 4.0)、Jetty 9.4(Servlet Version 3.1)、Undertow 2.0(Servlet Version 4.0)  

 二:SpringBoot入门搭建

1:手动搭建案例

  我们以一个简单的SpringBoot案例来突显出Spring的繁琐,我接下来将使用SpringBoot来实现一个简单的带Controller的案例

第一步:使用IDEA构建一个普通的Maven项目
第二步:在构建好的maven工程中对pom文件修改
第三步:编写启动引导类
第四步:编写Controller
第五步:访问(默认8080端口) 以本案例http://localhost:8080/index/test
 pom.xml里面添加相应坐标
 启动引导类编写
 Controller编写

2:使用Spring Initializr快速搭建

 自动创建的Maven坐标说明

三:SpringBoot基本分析

1:坐标中starters分析及依赖管理

  starter是依赖关系的整理和封装。是一套依赖坐标的整合,可以让导入应用开发的依赖坐标更方便。利用依赖传递的特性帮我们把一些列指定功能的坐标打包成了一个starter,我们只需要导入starter即可,无需导入大量坐标;每个Starter包含了当前功能下的许多必备依赖坐标这些依赖坐标是项目开发,上线和运行必须的。同时这些依赖也支持依赖传递。如下Starter:

复制代码
<!--导入WEB开发Starter-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
 spring-boot-starter-web内部封装的一些列坐标
复制代码

封装成各个Starter的好处就是让我们更加专注于业务开发,无需关心依赖导入,依赖冲突,及依赖的版本

问:为什么导入的一些Starter不需要写版本呢?

  不指定版本是因为maven有依赖传递的特性,可推测starter在父级定义了并锁定了版本;spring-boot-dependencies.xml 文件可以给大家一个答案;继承关系为 spring-boot-starter-parent.xml ==> spring-boot-dependencies.xml 这里面锁定了我们常用的坐标及Stater

编写SpringBoot项目继承spring-boot-starter-parent的好处和特点

①:默认编译Java 1.8
②:默认编码UTF-8
③:通过spring-boot-denpendencies的pom管理所有公共Starter依赖的版本
④:spring-boot-denpendencies通过Maven的依赖传递和版本锁定特性来实现版本管理
⑤:随用随取,不用继承父类所有的starter依赖。

POM文件中的Maven插件功能

复制代码
<build>
  <plugins>
        <!-- 作用:将一个SpringBoot的工程打包成为可执行的jar包 -->
      <plugin>
          <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
  </plugins>
</build>
复制代码

补充:可选择的启动器官网介绍,需要则查询这个手册

 2:自动配置(AutoConfiguration)分析

  所有我们要配置的项目Pivotal团队的开发人员,帮我们写好了,怎么实现的,主要是通过@Configuration实现 SpringBoot采用约定大于配置设计思想,将所有可能遇到的配置信息提前配置好,写在自动配置的jar包中。每个Starter基本都会有对应的自动配置。SpringBoot帮我们将配置信息写好,存放在一个jar包中:spring-boot-autoconfigure-2.4.1.jar;jar包里,存放的都是配置类,让配置类生效的"规则类"

复制代码
接下来我来介绍一个我们常见的配置类
一:找到项目的External Libraries
二:查找Maven:org.springframework.boot:spring-autoconfigue:2.4.1
三:内部有个spring-boot-autoconfigue-2.4.1.jar
四:点击org ==> web ==> servlet ==> ServletWebServerFactoryAutoConfiguration类

@Configuration(proxyBeanMethods = false)  //代表是个配置类 SpringBoot为我们提供的每个配置类都有此注解
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnClass(ServletRequest.class)
@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(ServerProperties.class)
@Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class,
        ServletWebServerFactoryConfiguration.EmbeddedTomcat.class,
        ServletWebServerFactoryConfiguration.EmbeddedJetty.class,
        ServletWebServerFactoryConfiguration.EmbeddedUndertow.class })
public class ServletWebServerFactoryAutoConfiguration { ... }

补充:我们回到之前点击META-INF ==> spring.factories 这里面配置的是SpringBoot的全部配置类
补充:我们回到之前点击META-INF ==> spring-configuration-metadata.json 这里面配置着各种配置类的信息参数
复制代码

问:SpringBoot提供这么多配置类,难道是程序运行后就全部导入吗?

  不会全部导入,只会根据当前项目的需求选择性的装配所需的配置类,这也是SpringBoot的自动装配一大特性;我们也可以设想一下,一次性装配全部配置类,那该多慢呀;

问:SpringBoot怎么知道程序运行后就自动装配呢?

  我们找到SpringBoot入口函数,点开 @SpringBootApplication 注解会发现里面有个 @EnableAutoConfiguration 这个注解就是开启自动配置的

问:开启自动装配后,它咋知道要加载指定配置呢?那么多配置类呢

  我们继续看上面的 ServletWebServerFactoryAutoConfiguration 配置类

复制代码
@Configuration(proxyBeanMethods = false)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
//配置类能否被自动装配主要看 @ConditionalOnClass注解 
//此注解是否可以加载到一个叫 ServletRequest.class文件,一旦存在则自动装配
@ConditionalOnClass(ServletRequest.class)
@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(ServerProperties.class)
@Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class,
        ServletWebServerFactoryConfiguration.EmbeddedTomcat.class,
        ServletWebServerFactoryConfiguration.EmbeddedJetty.class,
        ServletWebServerFactoryConfiguration.EmbeddedUndertow.class })
public class ServletWebServerFactoryAutoConfiguration { ... }
复制代码

  有了自动配置后,那么基本全部采用默认配置(这也就是为啥说约定大于配置的思想);那么要修改默认配置也是可以的,我们只需在配置文件配置指定的参数即可 官方全部可配置属性  如下常见配置:

复制代码
# 端口配置
server.port=8888
# 配置context-path项目访问根路径
server.servlet.context-path=/demo
# 开启debug模式,详细日志输出,用于开发的一种设置 默认是false
debug=true
# 配置日志  logging.level.{指定包下的日志}=debug
logging.level.cn.xw=debug
复制代码

 四:SpringBoot的配置文件

  SpringBoot是约定大于配置的,配置都有默认值。如果想修改默认配置,可以使用application.properties或application.yml或application.yaml自定义配置。SpringBoot默认从Resource目录加载自定义配置文件。application.properties是键值对类型;application.yml是SpringBoot中一种新的配置文件方式,在使用自定义配置时名称一定要为application,因为是提前约定好的,而且三个后缀名的文件都写上是有个先后顺序,后面可覆盖前面

<includes>
     <include>**/application*.yml</include>
     <include>**/application*.yaml</include>
     <include>**/application*.properties</include>
</includes>
 三种类型文件的配置方式

1:yml/yaml配置文件语法及使用

   YML文件格式是YAML(YAML Aint Markup Language)编写的文件格式。可以直观被电脑识别的格式。容易阅读,容易与脚本语言交互。可以支持各种编程语言(C/C++、Ruby、Python、Java、Perl、C#、PHP)。以数据为核心,比XML更简洁。扩展名为.yml或.yaml  官方网站  在线properties转yml

复制代码
1:大小写敏感
2:数据值前边必须有空格,作为分隔符
3:使用缩进表示层级关系
4:缩进不允许使用tab,只允许空格
5:缩进的空格数不重要,只要相同层级的元素左对齐即可
6:"#"表示注释,从这个字符一直到行尾,都会被解析器忽略。
7:数组和集合使用 "-" 表示数组每个元素
复制代码
 yml基本格式写法

2:配置文件与配置类属性映射

(1):java配置获取基本的配置文件信息.properties类型

 基本数据获取.properties

(2):java配置获取基本的配置文件信息并注入.yml/.yaml类型

复制代码
1、使用注解@Value映射
  @value注解将配置文件的值映射到Spring管理的Bean属性值,只能映射基本数据类型
2、使用注解@ConfigurationProperties映射
  通过注解@ConfigurationProperties(prefix=''配置文件中的key的前缀")可以将配置文件中的配置自动与实体进行映射。
  使用@ConfigurationProperties方式必须提供Setter方法,使用@Value注解不需要Setter方法
注:使用@ConfigurationProperties要在主函数上开启@EnableConfigurationProperties
复制代码
 POJO实体类
 application.yml配置文件
复制代码
//通过web的方式加载程序运行
@RestController //结合@ResponseBody 和 @Controller 两注解 @RequestMapping("/index") public class IndexController { //注入 @Autowired private Student student; @RequestMapping("/test") public String testMethod() { System.out.println(student.toString()); //Student{ // id=1001, // name='张三', // address='安徽六安', // hobbys=[baseball, basketball, volleyball], // score={yuwen=[66, 88], shuxue=[85, 99]}, // teachers={yuwenTeacher=Teacher{name='张老师', message='教语文'}, // shuxueTecher=Teacher{name='李老师', message='教数学'}}} return "Hello !!"; } }
复制代码

 五:SpringBoot与其它技术集成

 1:SpringBoot集成MyBatis  建表语句

  集成Mybatis完成查询全部

(1):使用注解方式完成集成

 pom.xml文件
 resources下的application.yml配置文件
 POJO、Mapper、Service、Controller文件

注:使用http://localhost:8080/student/findAll访问,还有就是Mapper文件夹里面的代码一定要写在主函数类当前包及其子包下,如果不在则需要在入口类添加@MapperScan或者@MapperScans注解扫描一下,这个是mybatis提供的

(2):使用Mapper.xml映射完成集成

 更改application.yml
 在resources下创建mapper/StudentMapper.xml

删除之前在Mapper使用注解的SQL语句删除,只留方法

 2:Spring Boot 集成 Redis

  springBoot集成Redis后,以上个案例的基础上做个查询学生缓存,如果第一次查询则缓存到redis服务器里,然后从redis读取数据返回到客户端

 <!--导入redis启动器-->
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
 更改StudentController

3:Spring Boot 集成定时器

     使用SpringBoot完成一个简易的定时器,每5秒输出一下当前的时间到控制台;

  首先在入口函数类上面加@EnableScheduling注解,代表开启定时器

 编写定时器类

4:Spring Boot 集成Test单元测试

复制代码
<!--测试启动start-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
复制代码
复制代码
//@RunWith(SpringRunner.class) 在老版的SpringBoot项目需要这个
//2.2.0.RELEASE以后,springboot测试类不再需要@Runwith的注解
@SpringBootTest //注明为SpringBoot测试类 class DemomybatissApplicationTests { //注入StudentService对象 @Autowired private StudentService studentService; @Test void contextLoads() { System.out.println(studentService.findAll()); } }
复制代码

5:Spring Boot 发送HTTP请求

  要在SpringBoot内部发送HTTP请求就得用到RestTemplate模板,它是Rest的HTTP客户端模板工具类;对基于HTTP客户端进行了封装;还实现了对象与JSON的序列化与反序列化;不限定客户端类型,目前常用的3种客户端都支持:HttpClient、OKHttp、JDK原生URLConnection(默认方式)

 入口函数类更改
 编写RestTemplate发送Http请求测试类

6:扩展

  SpringBoot除了上面几个集成外还集成 MongoDB、ElasticSearch、Memcached、邮件服务:普通邮件、模板邮件、验证码、带Html的邮件、RabbitMQ消息中间件、Freemarker或者Thymeleaf等等

 六:SpringBoot打包部署

   启动方式有两种,一种是打成jar直接执行,另一种是打包成war包放到Tomcat服务下,启动Tomcat

1:打成Jar包部署运行

  注:pom文件里的<packaging>jar</packaging>必须为jar,默认就是jar

复制代码
/**
 * 第一步:使用IDEA工具把写的代码通过maven的package打包
 * 第二步:找到打包后的target文件夹里面,把xxx.jar包扔给测试
 * 第三步:自己测试的话使用cmd执行下面命令,前提得检查自己的pom.xml文件中是否有springboot的maven插件
 * java -jar  xxxx.jar
 * 补充:在运行的时候传递参数 通过main函数的args接收
 * java -jar  xxxx.jar --server.port=8888
 * 补充:在运行的时候配置jvm参数,使占用更少的内存
 * java -Xmx80m -Xms20m -jar xxxx.jar
 */
复制代码

 2:打成War包部署运行

  注:pom文件里的<packaging>war</packaging>必须为jar,默认就是war

复制代码
创建一个类如:ServletInitializer.java,继承 SpringBootServletInitializer ,覆盖 configure(),
把启动类 Application 注册进去。外部 Web 应用服务器构建 Web Application Context 的时候,
会把启动类添加进去。

//如下代码创建的类 除了类名和注册的启动类不一样,其它是固定写法
//WEB-INF/web.xml
public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        //DemoApplication是自己当前项目的主函数
        return builder.sources(DemoApplication.class);
    }
}
复制代码

七:SpringBoot热部署

  我们在之前每次写完代码之后都要重新部署运行,这样特别浪费时间,其实SpringBoot是支持热部署的,但是我们得有相对应的参数配置,导入坐标

复制代码
检查当前的pom.xml必须有此配置才可以,然后正常启动运行即可
<!--工具 用于设置热部署,optional必须为true--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>
复制代码

当我们的代码写文运行后,后期更改了代码无需重写部署,只需要按CTRL+F9(Build Project),这是快速构建项目,或点击有上角的锤子;

如果还觉得麻烦,那就设置,一旦更改代码,IDEA失去焦点就自动构建代码,我们要设置一下IDEA配置

 八:SpringBoot配置文件深入

1:多环境配置文件

  我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发dev、测试test、生产pro等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。

(1):单文件的多环境配置

 单个application.yml配置文件完成多环境配置  不推荐

(2):多文件的多环境配置 

 多文件配置多环境 推荐

(3):profile激活方式

   在上面我介绍了使用配置文件来指定配置环境:spring.profiles.active=xx;可是这个是有局限性的,除了这种方式激活还要另外2种

配置文件:  再配置文件中配置:spring.profiles.active=dev
虚拟机参数:在VM options 指定:-Dspring.profiles.active=dev
命令行参数:java –jar xxx.jar --spring.profiles.active=dev
优先级:命令行参数 > 虚拟机参数 > 配置文件

2:松散绑定

  不论配置文件中的属性值是短横线、驼峰式还是下换线分隔配置方式,在注入配置时都可以通过短横线方式取出值;使用范围:properties文件、YAML文件、系统属性

 松散绑定配置文件介绍

3:配置路径及其加载顺序

4:外部配置加载顺序  官方文档

  外部加载顺序就是说在程序运行时加载外部的配置信息的顺序,如我们常用的命令行下指定额外信息 java -jar  xxx.jar --server.port=8888

 中文介绍

 5:修改配置文件位置及默认名称

  我们知道配置文件只能以application.yml/properties来定义,但是名称不一样是可以指定具体文件名,也可以把配置文件放入其它位置并指定都是可以的;指定的方式我以cmd下指定参数 java -jar xxx.jar  --xxx  -xxx 方式指定,或在IDEA里面指定-xxx参数

# 自定义配置文件名称
--spring.config.name=myApplication
# 指定配置文件存储位置 或 指定配置文件存储位置及配置文件名称
--spring.config.location=classpath:/myconfig/myApplication.yml
注:多个配置参数以空格隔开 --xxx -xxx

 九:SpringBoot监听器

  我们知道JavaEE包括13门规范,其中Servlet规范包括三个技术点:Servlet、Listener、Filter;而本章介绍的是监听器,监听器就是监听某个对象的状态变化;SpringBoot中的监听器有很多种:如下

①:CommandLineRunner 应用程序启动完成后
②:ApplicationRunner 应用程序启动完成后

③:ApplicationContextInitializer 程序运行初始化前
④:SpringApplicationRunListener 多功能监听器

1:对开发者有益的监听器

 CommandLineRunner 监听器使用
 ApplicationRunner 监听器使用

2:对框架开发者有意义的监听器 功能多

 ApplicationContextInitializer 监听器使用
 SpringApplicationRunListener 监听器使用
 使用ApplicationContextInitializer/SpringApplicationRunListener监听器必看 配置一些信息才可使用

 十:自动配置实现分析

  我们在导入spring-boot-starter-web启动器无需其它配置就可以之间用,还有我们导入spring-boot-starter-data-redis启动器后可以直接使用@Autowired直接注入RedisTemplate对象,很奇怪吧,这就是SpringBoot自动配置特性,在下几节我慢慢引入

 1:@Import注解进阶

  当我们需要导入某个类到spring容器中去,但spring恰好无法扫描到这个类,而我们又无法修改这个类(jar包形式)。我们就可以通过@import(xxx.class)是将这个类导入到spring容器中

(1):直接导入

复制代码
//配置类  springConfig
@Configuration
@Import(value={DateConfig.class})  //直接导入
public class SpringConfig { }

//普通类,里面有个@Bean注入方法  DateConfig
//被任何一个配置类引用,当前自己类也变为子配置类
public class DateConfig {
    //创建时间对象放入容器
    @Bean
    public Date createDate() { return new Date(); }
}
复制代码

(2):通过配置类导入

复制代码
@Configuration
public class SpringConfig {
    //创建时间对象放入容器
    @Bean
    public Date createDate() { return new Date(); }
}

@SpringBootApplication
@Import(value={SpringConfig.class}) //导入配置类
public class LintenerDemoApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(LintenerDemoApplication.class, args);
        //打印时间对象
        System.out.println(run.getBean(Date.class));
    }
}
复制代码

(3):通过ImportSelector接口实现类导入  高级方式

 使用ImportSelector接口

 2:@Configuration注解进阶

  相对这个注解大家肯定不陌生,只要是Spring注解配置类都有这玩意;其实只要添加@Configuration注解的类里面可以衍生出各种条件注解供我们使用,前提只能在注解类下使用,它就是@Conditional条件注解,这个条件注解又衍生出各种详细的条件注解

注:@EnableAutoConfiguration 其本质是 @Import 和 @Configuration的组合

复制代码
一:class类条件
    @ConditionalOnClass == 存在指定类条件
    @ConditionalOnMissingClass == 不存在指定类条件
二:属性条件
    @ConditionalOnProperty == 属性条件,还可以为属性设置默认值
三:Bean条件
    @ConditionalOnBean == 存在Bean条件
    @ConditionalOnMissingBean == 不存在Bean条件
    @ConditionalOnSingleCondidate == 只有一个Bean条件
四:资源条件
    @ConditionalResource == 资源条件
五:Web应用条件
    @ConditionalOnWebApplication == web应用程序条件
    @ConditionalOnNotWebApplication == 不是web应用程序条件
六:其他条件
    @ConditionalOneExpression == EL表达式条件
    @ConditionalOnJava == 在特定的Java版本条件
复制代码

   @Configuration还有一些加载顺序的方式

1:@AutoConfigureBefore==在那些自动配置之前执行
2:@AutoConfigureAfter==在那些自动配置之后执行
3:@AutoConfigureOrder==自动配置顺序

 (1):@ConditionalOnClass  与 @ConditionalOnProperty 介绍

复制代码
@ConditionalOnClass注解属性介绍
    Class<?>[] value():以类的class形式的数组
    String[] name():以类的全路径名的字符串数组

@ConditionalOnProperty注解属性介绍
    value 和 name:数组,获取对应property名称的值,它们只能存在其中一个
    prefix:配置属性名称的前缀,比如spring.http.encoding
    havingValue:可与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才加载配置
    matchIfMissing:缺少该配置属性时是否可以加载。如果为true,没有该配置属性时也会正常加载;反之则不会生效
复制代码
 案例讲解注解
 RedisTemplate自动注入分析

 十一:自定义auto-Configuration及starter

   我们平常导入是第三方mybatis-spring-boot-starter启动器都是由第三方提供给,特点就是以mybatis开头,那下面我们自定义starter也得是自定义名称开头,我们要自定义auto-Configuraction并使用必备的四个角色功能主体框架、自动配置模块、starter模块、开发者引用

复制代码
1:定制自动配置必要内容
    autoconfiguration模块,包含自动配置代码。自定义 *-spring-boot-autoconfigure。
    starter模块。自定义 *-spring-boot-starter
2:自动配置命名方式
    官方的Starters
        spring-boot-starter-*  如:spring-boot-starter-web
    非官方的starters
        *-spring-boot-starter  如:mybatis-spring-boot-starter
3:SpringBoot起步依赖,Starter Dependencies
复制代码

   接下来我要创建一个第三方模块,功能主体模块是一个图形打印模块,根据配置文件的不同打印出不同的图案,还要就是一个自动配置模块和starter模块咯,最后由我来在普通的springboot应用中调用这个自定义的自动配置

(1):功能主体模块

 功能主体代码 模块名:graphic-printing

(2):自动配置模块

 自动配置代码 模块名:graphic-spring-boot-autoconfigure
 在resources下创建META-INF文件夹,并在下面创建spring.factories配置

(3):stater模块

 stater模块 模块名:graphic-spring-boot-starter

  注:此模块啥都不用,只要pom.xml文件即可

(3):开发者引用

 开发者模块 模块名:test001

 十二:切换内置web应用服务器

复制代码
SpringBoot的web环境中默认使用tomcat作为内置服务器,其实还提供了另外2种内置服务器供我们选择,我们可以很方便的进行切换。
1:Tomcat:这个是使用最广泛但性能不太好的web应用服务器  默认
2:Jetty:Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。
3:Undertow: 是红帽公司开发的一款基于 NIO 的高性能 Web 嵌入式服务器

  Tomcat方式:Tomcat started on port(s): 8080 (http) with context path ''
  Jetty方式:Jetty started on port(s) 8080 (http/1.1) with context path '/'
  Undertow方式:Undertow started on port(s) 8080 (http)

复制代码
 切换为Jetty
 切换Undertow

 十三:SpringBoot生产级监控

  SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、配置属性、日志信息等

 1:项目集成Actuator监控服务

  其实导入健康服务特别简单,任何一个SpringBoot只需要加入一个监控启动器则可开启监控服务,然后项目正常运行即可

<!--监控服务Actuator启动器-->
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>

  保存SpringBoot导入监控坐标后启动程序,在程序运行的情况下访问 http://localhost:8080/actuator 则可监控程序

 

 补充:默认只可以监控这几项,其实可以监测很多模块

 监控应用endpoint

常用application.properties配置

复制代码
# 暴露所有的监控点
management.endpoints.web.exposure.include=*
# 定义Actuator访问路径
management.endpoints.web.base-path=/act
# 开启endpoint 关闭服务功能  访问关闭路径只能发送post请求才可关闭
management.endpoint.shutdown.enabled=true
复制代码

 

 

 

 

 

 

 

 

 

33333333333

  • 配置文件: 再配置文件中配置:spring.profiles.active=dev
  • 虚拟机参数:在VM options 指定:-Dspring.profiles.active=dev
  • 命令行参数:java –jar xxx.jar --spring.profiles.active=dev
 
好文要顶 关注我 收藏该文  
posted @ 2021-01-12 15:42  Sam Xiao  阅读(1)  评论(0)    收藏  举报