Bootstrap

黑马SpringBoot --实用篇

5.打包与运行

笔记小结

  1. Boot程序打包依赖SpringBoot对应的Maven插件即可打包 出可执行的jar包
  2. 运行jar包使用jar命令进行
  3. Windows与Linux下执行Boot打包程序流程相同,仅需确保 运行环境有效即可

程序为什么要打包

在这里插入图片描述

5.1程序打包与运行(Windows版)

SpringBoot项目快速启动(Windows版)

笔记小结

步骤:

  1. SpringBoot工程可以基于java环境下独立运行jar文件启动服务
  2. SpringBoot工程执行mvn命令package进行打包
  3. 执行jar命令:java –jar 工程名.jar
  1. 对SpringBoot项目打包(执行Maven构建指令package)

    mvn package
    

    也可以使用maven插件

在这里插入图片描述

在这里插入图片描述

  1. 运行项目(执行启动指令)

    java –jar springboot.jar
    

注意:jar支持命令行启动需要依赖maven插件支持,请确认打包时是否具有SpringBoot对应的maven插件(一般通过springboot构建,通常自动保留)

<build>
 <plugins>
     <plugin>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-maven-plugin</artifactId>
     </plugin>
 </plugins>
</build>

示例:

步骤一:项目打包

在这里插入图片描述

注意:maven项目生命周期会将test加入其内,需要跳过

步骤二:运行项目

在项目生产的target目录中进行测试

在这里插入图片描述

在这里插入图片描述

spring-boot-maven-plugin插件作用

可执行jar包目录结构

在这里插入图片描述

BOOT-INF中会多出lib目录,lib目录中包含了运行项目所需要的jar文件

org中会多出运行springboot所需要的工具

jar包描述文件(MANIFEST.MF)

在这里插入图片描述

Start-Class:是项目中的启动类

Man-Cass:是org中的jar启动器工具

命令行启动常见问题及解决方案

  • Windonws端口被占用

在这里插入图片描述

# 查询端口
netstat -ano
# 查询指定端口
netstat -ano |findstr "端口号"
# 根据进程PID查询进程名称
tasklist |findstr "进程PID号"
# 根据PID杀死任务
taskkill /F /PID "进程PID号"
# 根据进程名称杀死任务
taskkill -f -t -im "进程名称"
  • 示例:netstat -ano |findstr “8080”—>tasklist |findstr “进程PID号”—>taskkill /F /PID “进程PID号”

在这里插入图片描述

5.2程序运行(Linux版)(重点)

笔记小结

  1. 上传安装包
  2. 执行jar命令:java –jar 工程名.jar
  • 基于Linux(CenterOS7)
  • 安装JDK,且版本不低于打包时使用的JDK版本
  • 安装包保存在**/usr/local/自定义目录中或$HOME**下
  • 其他操作参照Windows版进行

一般会将文件放置usr或者**$home**目录下

示例:

linux环境:centOS7

步骤一:在usr/local创建app目录

在这里插入图片描述

步骤二:上传项目jar包

在这里插入图片描述

步骤三:安装jdk 1.8(若有jdk,此步骤可跳过)

在usr目录中创建java目录,并上传1.8版本的linux的JDK

在这里插入图片描述

补充:linux环境中配置环境变量需要及时更新 resource资源目录

步骤四:安装mysql

步骤五:后台启动

nohup java -jar springboot_08_ssmp-0.0.1-SNAPSHOT.jar >server.log 2>&1 &

在这里插入图片描述

server.log 2>&1 &日志挂载

补充:

1.关闭该进程

查看该进程

ps -ef | grep "java -jar"

杀死该进程

kill -9 "PID"

#例如
kill -9 32542

2.查看服务器日志

cat server.log

在这里插入图片描述

6.配置高级

笔记小结

  1. SpringBoot在开发和运行环境均支持使用临时参数修改工程配置
  2. SpringBoot支持4级配置文件,应用于开发与线上环境进行配置的 灵活设置
  3. SpringBoot支持使用自定义配置文件的形式修改配置文件存储位置
  4. 基于微服务开发时配置文件将使用配置中心进行管理

6.1临时属性设置

笔记小结

  1. 使用jar命令启动SpringBoot工程时可以使用临时属性替 换配置文件中的属性
  2. 临时属性添加方式:java –jar 工程名.jar –-属性名=值
  3. 多个临时属性之间使用空格分隔
  4. 临时属性必须是当前boot工程支持的属性,否则设置无效

在这里插入图片描述

若端口被占用,需要临时转换端口,可以使用临时属性进行配置

  • 带属性数启动SpringBoot

    java –jar springboot.jar –-server.port=80
    
  • 携带多个属性启动SpringBoot,属性间使用空格分隔

6.1.1属性加载优先顺序

参看https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config

在这里插入图片描述

6.1.2开发环境中

笔记小结

启动SpringBoot程序时,可以选择是否使用命令行属性为 SpringBoot程序传递启动属性

  • 带属性启动SpringBoot程序,为程序添加运行属性

    idea2020版本设置:

在这里插入图片描述

  • 通过编程形式带参数启动SpringBoot程序,为程序添加运行参数

    public static void main(String[] args) {
        String[] arg = new String[1];
        arg[0] = "--server.port=8080";
        SpringApplication.run(SSMPApplication.class, arg);
    }
    
  • 不携带参数启动SpringBoot程序

    public static void main(String[] args) {
        SpringApplication.run(SSMPApplication.class);
    }
    

示例:

public static void main(String[] args) {
    //启动类正常启动程序
    SpringApplication.run(SSMPApplication.class, args);
    //启动类自定义启动程序配置自定义启动参数
    //        String[] arg = new String[1];
    //        arg[0] = "--server.port=8080";
    //        SpringApplication.run(SSMPApplication.class, arg);
    //启动类启动程序不配置携带参数
    SpringApplication.run(SSMPApplication.class);
}

6.2配置文件分类✳

笔记小结

  1. 配置文件分为4种
    • 项目类路径配置文件:服务于开发人员本机开发与测试
    • 项目类路径config目录中配置文件:服务于项目经理整体调控
    • 工程路径配置文件:服务于运维人员配置涉密线上环境
    • 工程路径config目录中配置文件:服务于运维经理整体调控
  2. 多层级配置文件间的属性采用叠加并覆盖的形式作用于程序
  1. SpringBoot中4级配置文件

    1级: file :config/application.yml 【最高】

    2级: file :application.yml

    3级:classpath:config/application.yml

    4级:classpath:application.yml 【最低】

    补充:若同时配置了application.properties,则同一层级的 :pro生效不同层级的,层级高生效。.

  2. 作用:

    • 1级与2级留做系统打包后设置通用属性,1级常用于运维经理进行线上整体项目部署方案调控
    • 3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控

6.3自定义配置文件

笔记小结

  1. 配置文件可以修改名称,通过启动参数设定
  2. 配置文件可以修改路径,通过启动参数设定
  3. 微服务开发中配置文件通过配置中心进行设置
  1. 单服务器项目:使用自定义配置文件需求较低
  2. 多服务器项目:使用自定义配置文件需求较高,将所有配置放置在一个目录中,统一管理
  3. 基于SpringCloud技术,所有的服务器将不再设置配置文件,而是通过配置中心进行设定,动态加载配置信息
  • 通过启动参数加载配置文件(无需书写配置文件扩展名)

在这里插入图片描述

补充:properties与yml文件格式均支持

  • 通过启动参数加载指定文件路径下的配置文件

在这里插入图片描述

补充:properties与yml文件格式均支持

  • 通过启动参数加载指定文件路径下的配置文件时可以加载多个配置

在这里插入图片描述

补充:多配置文件常用于将配置进行分类,进行独立管理,或将可选配置单独制作便于上线更新维护

7.多环境开发

笔记小结

  1. 多环境开发(YAML版)
  2. 多环境开发(Properties版)
  3. Maven与SpringBoot多环境冲突现象解决方案

在这里插入图片描述

7.1多环境开发(YAML版)

笔记小结

  1. 多环境开发需要设置若干种常用环境,例如开发、生产、测试环境
  2. yaml格式中设置多环境使用—区分环境设置边界
  3. 每种环境的区别在于加载的配置属性不同
  4. 启用某种环境时需要指定启动时使用该环境

单文件

# 启动指定环境
spring:
  profiles:
    active: dev

---
#生产环境,生产环境具体参数设定
spring:
  profiles: pro
server:
  port: 80
---
#开发环境,开发环境具体参数设定
spring:
  profiles: dev
server:
  port: 81
---
#测试环境,测试环境具体参数设定
spring:
  profiles: test
server:
  port: 82
---

过时格式:

spring:
  profiles:
    active: pro
---
spring:
  profiles: pro
server:
  port: 80

推荐格式:✳

spring:
  profiles:
    active: pro
---    
spring:
  config:
    activate:
      on-profile: pro

2.多文件

笔记小结

  1. 可以使用独立配置文件定义环境属性
  2. 独立配置文件便于线上系统维护更新并保障系统安全性

在主启动配置文件application.yml

spring:
  profiles:
    active: dev

环境分类配置文件application-pro.yml

server:
  port: 8081

环境分类配置文件application-dev.yml

server:
  port: 8080

环境分类配置文件application-test.yml

server:
  port: 8082 

补充:激活名称以文件中-的后缀名

多环境开发独立配置文件书写技巧(一)

  • 主配置文件中设置公共配置(全局)
  • 环境分类配置文件中常用于设置冲突属性(局部)

7.2多环境开发(Properties版)

笔记小结

  1. properties文件多环境配置仅支持多文件格式

主启动配置文件application.properties

spring.profiles.active=pro

环境分类配置文件application-pro.properties

server.port=80

环境分类配置文件application-dev.properties

server.port=81

环境分类配置文件application-**test.**properties

server.port=82

**多环境开发独立配置文件书写技巧(二)**✳

  • 根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下

    • application-devDB.yml
    • application-devRedis.yml
    • application-devMVC.yml
  • 使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔

    spring:
      profiles:
        active: dev
        include: devDB,devRedis,devMVC
    
  • 注意当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效

  • 使用group属性定义多种主环境与子环境的包含关系

    spring:
      profiles:
        active: dev
        group:
          "dev": devDB,devRedis,devMVC
          "pro": proDB,proRedis,proMVC
          "test": testDB,testRedis,testMVC
    

    补充:多环境开发使用group属性设置配置文件分组,便于线上维护管理

7.3多环境开发控制✳

笔记小结

  1. 当Maven与SpringBoot同时对多环境进行控制时,以Mavn为主, SpringBoot使用**@…@占位符读取Maven**对应的配置属性值
  2. 基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试 工程时pom.xml每次更新需要手动compile方可生效

在这里插入图片描述

springboot依赖于maven,是基于maven来进行相关配置的

Maven与SpringBoot多环境兼容

  1. Maven中设置多环境属性

    <!--Maven中设置多环境属性-->
    <profiles>
        <profile>
            <id>dev_env</id>
            <properties>
                <profile.active>dev</profile.active>
            </properties>
            <!--设置启动的环境-->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>pro_env</id>
            <properties>
                <profile.active>pro</profile.active>
            </properties>
        </profile>
        <profile>
            <id>test_env</id>
            <properties>
                <profile.active>test</profile.active>
            </properties>
        </profile>
    </profiles>
    

    注意:单词拼写 <profile.active>……</profile.active> 不加s

  2. SpringBoot中引用Maven属性

    spring:
      profiles:
        active: @profile.active@
    

    注意:此处对应的名称需要与xml文件中的名称相对应,如图

    在这里插入图片描述

  3. 执行Maven打包指令,并在生成的boot打包文件.jar文件中查看对应信息

示例结果:

在打包好的jar包中名称会对应改变

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

8.日志

笔记小结

  1. 日志基础使用规则
  2. 编辑日志输出格式
  3. 日志文件设置(重点)

8.1日志基础

笔记小结

  1. 日志用于记录开发调试与运维过程消息
  2. 日志的级别共6种,通常使用4种即可,分别是DEBUG,INFO,WARN,ERROR
  3. 可以通过日志组或代码包的形式进行日志显示级别的控制
  4. 基于lombok提供的**@Slf4j注解**为类快速添加日志对象

日志(log)作用

  • 编程期调试代码
  • 运营期记录信息
    • 记录日常运营重要信息(峰值流量、平均响应时长……)
    • 记录应用报错信息(错误堆栈)
    • 记录运维过程数据(扩容、宕机、报警……)
  • 日志级别:fatal>error>warn>info>debug>trace✳
    • FATAL:灾难信息,合并计入ERRO
    • ERROR:记录错误堆栈信息
    • WARN:记录运维过程报警数据
    • INFO:记录运维过程数据
    • DEBUG:程序员调试代码使用
    • TRACE:运行堆栈信息,使用率低

代码中使用日志工具记录日志

  1. 添加日志记录操作

    @RestController
    @RequestMapping("/books")
    public class BookController extends BaseController {
        private static final Logger log = LoggerFactory.getLogger(BookController.class);
        @GetMapping
        public String getById(){
            System.out.println("springboot is running...");
            log.debug("debug ...");
            log.info("info ...");
            log.warn("warn ...");
            log.error("error ...");
            return "springboot is running...";
        }
    }
    
    
  2. 设置日志输出级别

    # 开启debug模式,输出调试信息,常用于检查系统运行状况
    debug: true
    # 设置日志级别,root表示根节点,即整体应用日志级别
    logging:
      level:
        root: debug
    

    debug模式,是程序员调制程序时使用

    debug日志级别(常用),root代表整体应用日志级别,级别范围很大

  3. 设置日志包,控制指定包对应的日志输出级别

    #设置日志级别,com.example.controller表示单独设置包下的日志级别
    logging:
      level:
        root: info
        com.example.controller: debug
    

    设置“com.example.controller”,此包下的日志级别为debug级别。“root”为info级别(整体应用日志级别为info级别)

  4. 设置日志组,也可以直接控制指定包对应的日志输出级别

    #设置日志级别,ebank表示设置组下的日志级别
    logging:
      group:
        ebank: com.example.controller
      level:
        root: info
        ebank: debug
    

    步骤:定义组,设置组级的日志级别

    “ebank”这个名称可以自定义

优化日志对象创建代码✳

使用lombok提供的注解**@Slf4**j简化开发,减少日志对象的声明操作

@Slf4j
@RestController
@RequestMapping("/books")
public class BookController {
    @GetMapping
    public String getById(){
        System.out.println("springboot is running...");
        log.debug("debug info...");
        log.info("info info...");
        log.warn("warn info...");
        log.error("error info...");
        return "springboot is running...";
    }
}

补充:

@Slf4j该注解的作用主要是操作在idea中的控制台中打印的日志信息。该注解相当于代替了以下的代码:private final Logger logger = LoggerFactory.getLogger(当前类名.class);

@Slf4j速记,英文简写 self-justification,自我辩解

8.2日志输出格式控制

笔记小结

日志输出格式设置规则

在这里插入图片描述

  • PID:进程ID,用于表明当前操作所处的进程,当多服务同时记录日志时,该值可用于协助程序员调试程序

  • 所属类/接口名:当前显示信息为SpringBoot重写后的信息,名称过长时,简化包名书写为首字母,甚至直接删除

  • 设置日志输出格式

    logging:
      pattern:
        console: "%d -%m%n"
    
    • %d:日期

    • %m:消息

    • %n:换行

    logging:
      pattern:
        console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"
    

    %clr{cyan}:添加青色显示,例如:%clr(%-40.40c){cyan}

    [%16t]:添加占位符填充

    %-40.40c:左对齐,并占位40,截取40个字符

8.3日志文件 ✳

笔记小结

  1. 日志记录到文件
  2. 日志文件格式设置
  • 设置日志文件

    logging:
      #设置日志保存文件
      file:
        name: server.log
    

    关键词file

  • 日志文件详细配置

    logging:
      #设置日志文件最大容量
      logback:
        rollingpolicy:
          max-file-size: 10MB
          file-name-pattern: server.%d{yyyy-MM-dd}.%i.log
    

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;