1.SpringBoot2运维使用篇

基础篇在SSM的博客中

前置准备
① 导入图书管理项目(链接:https://pan.baidu.com/s/1izSGZW6eDiCPdhvO9ZZfzA 提取码:vc5e)

② 建表sql

CREATE DATABASE ssm_db;
USE ssm_db;

-- ----------------------------
-- Table structure for tbl_book
-- ----------------------------
DROP TABLE IF EXISTS `tbl_book`;
CREATE TABLE `tbl_book`  (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `type` VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `name` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `description` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 13 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Records of tbl_book
-- ----------------------------
INSERT INTO `tbl_book` VALUES (1, '计算机理论', 'Spring实战 第5', 'Spring入门经典教程,深入理解Spring原理技术内幕');
INSERT INTO `tbl_book` VALUES (2, '计算机理论', 'Spring 5核心原理与30个类手写实战', '十年沉淀之作,手写Spring精华思想');
INSERT INTO `tbl_book` VALUES (3, '计算机理论', 'Spring 5 设计模式', '深入Spring源码剖析Spring源码中蕴含的10大设计模式');
INSERT INTO `tbl_book` VALUES (4, '计算机理论', 'Spring MVC+MyBatis开发从入门到项目实战', '全方位解析面向Web应用的轻量级框架,带你成为Spring MVC开发高手');
INSERT INTO `tbl_book` VALUES (5, '计算机理论', '轻量级Java Web企业应用实战', '源码级剖析Spring框架,适合已掌握Java基础的读者');
INSERT INTO `tbl_book` VALUES (6, '计算机理论', 'Java核心技术 卷I 基础知识(原书第11版)', 'Core Java11版,Jolt大奖获奖作品,针对Java SE9、1011全面更新');
INSERT INTO `tbl_book` VALUES (7, '计算机理论', '深入理解Java虚拟机', '5个维度全面剖析JVM,大厂面试知识点全覆盖');
INSERT INTO `tbl_book` VALUES (8, '计算机理论', 'Java编程思想(第4版)', 'Java学习必读经典,殿堂级著作!赢得了全球程序员的广泛赞誉');
INSERT INTO `tbl_book` VALUES (9, '计算机理论', '零基础学Java(全彩版)', '零基础自学编程的入门图书,由浅入深,详解Java语言的编程思想和核心技术');
INSERT INTO `tbl_book` VALUES (10, '市场营销', '直播就该这么做:主播高效沟通实战指南', '李子柒、李佳琦、薇娅成长为网红的秘密都在书中');
INSERT INTO `tbl_book` VALUES (11, '市场营销', '直播销讲实战一本通', '和秋叶一起学系列网络营销书籍');
INSERT INTO `tbl_book` VALUES (12, '市场营销', '直播带货:淘宝、天猫直播从新手到高手', '一本教你如何玩转直播的书,10堂课轻松实现带货月入3W+');

③ 修改配置文件中数据库的配置
④ 运行系统,访问:http://localhost/pages/books.html
查看各功能是否能够正常使用

1.工程打包与运行

1.1 windows

① 通过Maven ==> clean清楚数据
在通过Maven ==> package打包
请添加图片描述

打包文件所在位置如图所示
请添加图片描述

③ 通过指令运行jar包

D:\java_works\springboot_books\target>java -jar springboot_08_ssmp-0.0.1-SNAPSHOT.jar

④ 访问:http://localhost/pages/books.html

SpringBoot打包需要打包插件

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

jar包描述文件
MANIFEST.MF(Main-Class是jar启动器,Start-Class为主启动类)

Manifest-Version: 1.0
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Implementation-Title: springboot_08_ssmp
Implementation-Version: 0.0.1-SNAPSHOT
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
Start-Class: com.example.SpringbootBooksApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Build-Jdk-Spec: 1.8
Spring-Boot-Version: 2.5.4
Created-By: Maven Jar Plugin 3.2.0
Main-Class: org.springframework.boot.loader.JarLauncher

命令行启动常见问题及解决方案
Windows端口被占用

#查询端口
netstat -ano

#查询指定端口
netstat -ano | findstr "端口号"

#根据进程PID查询进程名称
tasklist | findstr "进程PID号"

#根据PID杀死任务
taskkill /F /PID "进程PID号"

#根据进程名称杀死任务
taskkill -f -t -im "进程名称"

1.2 Linux

① 打包(同上节)
② 上传到linux(如上传到/usr/local/app包中)
注:linux需要安装java,mysql等

③ 使用指令运行jar包

$ java -jar /usr/local/app/springboot_08_ssmp-0.0.1-SNAPSHOT.jar

④ 本地访问:http://192.168.1.224/pages/books.html

⑤ linux后台启动jar包(保存日志到/usr/local/app/service.log中)

$ nohup java -jar /usr/local/app/springboot_08_ssmp-0.0.1-SNAPSHOT.jar > /usr/local/app/service.log 2>&1 &

⑥ 关闭后台运行的jar包

#搜索运行程序的pid
$ ps -ef |grep "java -jar"
root      3560   726  4 05:16 pts/0    00:00:07 java -jar /usr/local/app/springboot_08_ssmp-0.0.1-SNAPSHOT.jar
root      4735   726  0 05:19 pts/0    00:00:00 grep java -jar

#运行程序的pid为3560
#关闭进程
$ kill -9 3560

2.配置高级

运行时指定端口号(–属性名=值)

$ java -jar /usr/local/app/springboot_08_ssmp-0.0.1-SNAPSHOT.jar --server.port=8080

访问路径:http://192.168.1.224:8080/pages/books.html

携带多个属性启动SpringBoot时,属性使用空格分隔

测试临时参数
方式一
开启编辑
请添加图片描述

若没有找到输入参数的位置,则先勾选功能
请添加图片描述

请添加图片描述

添加需要测试的参数
请添加图片描述

方式二

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootBooksApplication {
    
    

    public static void main(String[] args) {
    
    
        //测试临时参数的方式二
//        String[] arg = new String[1];
//        arg[0] = "--server.port=8081";
//        SpringApplication.run(SpringbootBooksApplication.class, arg);

        //可以在启动boot程序断开读取外部临时配置对应的入口,也就是去掉外部参数的形参
        SpringApplication.run(SpringbootBooksApplication.class);
    }
}

2.1 配置文件4级分类

配置文件分类

  1. file :config/application.yml 【最高】
  2. file :application.yml
  3. classpath:config/application.yml
  4. classpath:application.yml 【最低】

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

2.2 自定义配置文件

① 创建新的springboot项目,勾选Spring Web
② 创建BookController类

package com.example.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

③ 将application.properties改名为ebank.yml,并添加内容

server:
  port: 80

④ 使得自定义配置文件生效
添加临时变量

--spring.config.name=ebank
或
--spring.config.location=classpath:/ebank.yml

多个配置文件则逗号分隔,如果配置相同属性后面的覆盖前面的
--spring.config.location=classpath:/ebank.yml,classpath:/ebank2.yml

自定义配置文件——重要说明
单服务器项目:使用自定义配置文件需求较低
多服务器项目:使用自定义配置文件需求较高,将所有配置放置在一个目录中,统一管理
基于SpringCloud技术,所有的服务器将不在设置配置文件,而是通过配置中心进行设定,动态加载配置信息

3.多环境开发

YAML格式配置文件

#应用环境
#公共配置

spring:
  profiles:
    active: dev
---
#开发环境
spring:
  profiles: dev
server:
  port: 80
---
#生产环境
spring:
  profiles: pro
server:
  port: 81
---
#测试环境
#不过时的写法
spring:
  config:
    activate:
      on-profile: test
server:
  port: 82

也可以分别写三个配置文件application-dev.yml,application-pro.yml,application-test.yml
主配置文件application.yml(properties的配置文件也适用,书写格式需符合properties文件格式)

#选择使用哪个配置文件
spring:
  profiles:
    active: dev

多环境开发独立配置文件书写技巧
根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下
application-devDB.yml
application-devRedis.yml
application-devMVC.yml

使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境使用逗号分隔

spring:
  profiles:
    active: dev
    include:devDB,devRedis,devMVC

注意事项:当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效

从SpringBoot2.4版本开始使用group属性替代include属性,降低了书写量
使用group属性定义多种主环境与子环境的包含关系

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

3.1 多环境开发控制

Maven与SpringBoot多环境兼容
① Maven中设置多环境属性

<!--设置多环境-->
<profiles>
    <profile>
        <id>env_dev</id>
        <properties>
            <project.active>dev</project.active>
        </properties>
    </profile>
    <profile>
        <id>env_pro</id>
        <properties>
            <project.active>pro</project.active>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>env_test</id>
        <properties>
            <project.active>test</project.active>
        </properties>
    </profile>
</profiles>

② SpringBoot中引用Maven属性

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

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

基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试工程时pom.xml每次更新需要手动compile方可生效

4.日志

4.1 日志基础

  • 日志作用
    • 编程调试代码
    • 运营期记录信息
      • 记录日常运营重要信息(峰值流量、平均响应时长……)
      • 记录应用报错信息(错误堆栈)
      • 记录运维过程数据(扩容、宕机、报警……)

代码中使用日志工具记录日志
① 添加日志记录操作

package com.example.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/books")
public class BookController {
    
    
    //创建记录日志的对象
    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 ...";
    }
}

② 设置日志输出级别

# 开启debug模式,输出调试信息,常用于检查系统运行状况
#debug: true

# 设置日志级别,root表示根节点,即整体应用日志界别
logging:
  level:
    root: debug

可以通过日志组或代码包的形式进行日志显示级别的控制

logging:
  level:
    root: info
    #设置某个包的日志级别
#    com.example.controller: debug
    #设置分组,对某个组设置日志级别
    ebank: warn
  #设置分组
  group:
    ebank: com.example.controller,com.example.service,com.example.dao
    iservice: com.alibaba

日志级别
TRACE:运行堆栈信息,使用率低
DEBUG:程序员调试代码使用
INFO:记录运维过程数据
WARN:记录运维过程警告数据
ERROR:记录错误堆栈信息
FATAL:站南信息,合并计入ERROR

快速创建日志对象
手工方式
① 日志创建类

package com.example.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class BaseClass {
    
    
    public  Class clazz;
    public static  Logger log ;

    public BaseClass(){
    
    
        clazz = this.getClass();
        log = LoggerFactory.getLogger(clazz);
    }
}

② 继承BaseClass类自动创建日志

package com.example.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/books")
public class BookController extends BaseClass{
    
    
    //创建记录日志的对象
//    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 ...";
    }
}

注解方式lombok
① 导入lombok依赖坐标

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

② 添加注解@Slf4j

package com.example.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
@RequestMapping("/books")
public class BookController extends BaseClass{
    
    
    @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 ...";
    }
}

4.2 日志输出格式控制

2022-05-30 21:37:07.815  INFO 11380 --- [           main] com.example.Springboot02Application      : Started Springboot02Application in 2.099 seconds (JVM running for 3.314)
日志格式依次为
时间 级别 PID 所属线程 所属类/接口名 日志信息

设置日志输出格式

logging:
  #设置日志模板格式
  pattern:
    console: "%d %clr(%5p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"
#    console: "%d - %m %n"

%d:日期
%m:消息
%n:换行

4.3 日志文件

日志文件设置

logging:
  file:
    name: server.log
  logback:
    rollingpolicy:
      max-file-size: 1KB
      file-name-pattern: server.%d{
    
    yyyy-MM-dd}.%i.log

猜你喜欢

转载自blog.csdn.net/hutc_Alan/article/details/125055581