SpringBoot系统整理|运维实用篇|黑马视频

写在前面:本博客主要是记录在学习黑马视频中遇到的问题和一些所思所想,日后忘记了,方便回顾查阅,后续遇到新的知识还会继续进行补充。本系列一共分四篇博客记录,分别是基础篇、运维实用篇、开发实用篇、原理篇。

目录

1. 打包与运行

1.1 程序打包与运行(windows版)

1.2 程序运行(Linux版)

2. 配置高级

2.1 临时属性设置

2.2 配置文件分类

2.3 自定义配置文件

3. 多环境开发

3.1 多环境开发(YAML版)

3.2 多环境开发(Properties版)

3.3 多环境开发控制

4. 日志

4.1 日志基础

4.2 日志输出格式控制

4.3 日志文件


1. 打包与运行

1.1 程序打包与运行(windows版)

1.SpringBoot项目快速启动

①:对SpringBoot项目打包(执行maven构建指令package)

mvn package

②: 运行项目(执行启动指令)

java -jar springboot.jar

ps:打jar包时,可以用这个跳过不想要的执行过程,例如test。

jar 支持命令行启动需要依赖 maven 插件支持,请确认打包时是否具有 SpringBoot 对应的 maven 插件
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

如果没有使用上述的插件支持,则打出来的jar包运行会报错:

命令行启动常见问题及解决方案:
  • Windonws端口被占用
# 查询端口
netstat -ano
# 查询指定端口
netstat -ano |findstr " 端口号 "
# 根据进程 PID 查询进程名称
tasklist |findstr " 进程 PID "
# 根据 PID 杀死任务
taskkill /F /PID " 进程 PID "
# 根据进程名称杀死任务
taskkill -f -t -im " 进程名称 "

1.2 程序运行(Linux版)

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

2. 配置高级

2.1 临时属性设置

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

1. 属性加载优先顺序

 2. 临时属性设置(开发环境)

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

  • 通过编程形式带参数启动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);
}

ps:

  • 这里的args打印输出,其实就是外部追加的参数信息
  • 不携带参数args可以保护程序的安全性,这样就不能通过外部命令行的形式设置参数信息了。
  • 这里的主要目的是为运维人员测试命名是否可用。

2.2 配置文件分类

场景:真实开发中研发人员配置的信息和运维经理配置的信息不一致,此时就需要配置多套配置文件,方便切换。

1. SpringBoot4级配置文件

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

        2级: file application.yml

        3级:classpathconfig/application.yml

        4级:classpathapplication.yml 【最低】

2. 作用:
  •         1级与2级留做系统打包后设置通用属性,1级常用于运维经理进行线上整体项目部署方案调控
  •         3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控
3. 注意
  • 配置文件分为4
    • 项目类路径配置文件:服务于开发人员本机开发与测试
    • 项目类路径config目录中配置文件:服务于项目经理整体调控
    • 工程路径配置文件:服务于运维人员配置涉密线上环境
    • 工程路径config目录中配置文件:服务于运维经理整体调控
  • 多层级配置文件间的属性采用叠加并覆盖的形式作用于程序
  • .properties文件优先级 > yml 文件优先级

2.3 自定义配置文件

1. 通过启动参数加载配置文件(无需书写配置文件扩展名)

  • propertiesyml文件格式均支持 
2. 通过启动参数加载指定文件路径下的配置文件

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

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

4. 注意:

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

3. 多环境开发

3.1 多环境开发(YAML版)

1. 实际开发中有多个环境,有生产环境、开发环境、测试环境等等。

2. 在yml文件中可以通过 三个杠(---)来区分各个环境配置:

  • 第一个配置区域一般为默认配置,配置公共部分和选用哪个配置部分
  • 除公共配置部分,其他配置部分需要进行命名,以便调用。

3. profiles命名格式已经过时,现在已被on-profile取代。

4. 上述配置缺点:

  • 配置都在一个文件中,暴露配置
  • 调用修改不便

5. 将各个区域按照application-命名.yml形式进行文件化

优点:独立配置文件便于线上系统维护更新并保障系统安全性

6. 技巧

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

3.2 多环境开发(Properties版)

1. properties文件多环境配置仅支持多文件格式(没有合并单一文件版本)

2. 技巧

  • 根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如
    • application-devDB.yml
    • application-devRedis.yml
    • application-devMVC.yml
  • 使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔
spring:
    profiles:
        active: dev
        include: devDB,devRedis,devMVC

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

3. 上述模式的缺点:

  • 当active换的时候,include内容页都要换,不方便

4. 使用group属性(常用

  • 从Spring2.4版开始使用group属性替代include属性,降低了配置书写量
  • 使用group属性定义多种主环境与子环境的包含关系
spring:
    profiles:
    active: dev
    group:
        "dev": devDB,devRedis,devMVC
        "pro": proDB,proRedis,proMVC
        "test": testDB,testRedis,testMVC

3.3 多环境开发控制

场景:maven和spring两个的profile冲突了,应该运行谁的?到底是maven依赖springboot还是springboot依赖maven运行的呢?

说明:maven在前运行,springboot基于maven运行。所以以maven的配置为主,springboot的配置为辅

1. Maven与SpringBoot多环境兼容

①:Maven中设置多环境属性

②:SpringBoot中引用Maven属性

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

2. IDEA工具存在的BUG(2021版本一下的可能存在)

将 activeByDefault 切换到其他的环境中后,发现idea仍然运行原来的环境。这时候即使clean也解决不了问题,而应该使用生命周期中的 compile。

<activation> 
    <activeByDefault>true</activeByDefault> 
</activation>

3.注意:

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

4. 日志

4.1 日志基础

1. 日志(log)作用

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

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

①:添加日志记录操作

@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...";
    }
}
  • 日志级别
    • TRACE:运行堆栈信息,使用率低
    • DEBUG:程序员调试代码使用
    • INFO:记录运维过程数据
    • WARN:记录运维过程报警数据 
    • ERROR:记录错误堆栈信息
    • FATAL:灾难信息,合并计入ERROR
②:设置日志输出级别
# 开启debug模式,输出调试信息,常用于检查系统运行状况
    debug: true
# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
    level:
        root: debug
③:设置日志组,控制指定包对应的日志输出级别,也可以直接控制指定包对应的日志输出级别
logging:
# 设置日志组
group:
# 自定义组名,设置当前组中所包含的包
    ebank: com.itheima.controller
level:
    root: warn
    # 为对应组设置日志级别
    ebank: debug
    # 为对包设置日志级别
    com.itheima.controller: debug

3. 优化日志对象创建代码

使用lombok提供的注解@Slf4j简化开发,减少日志对象的声明操作。即可代替下述代码:

private static final Logger log = LoggerFactory.getLogger(BookController.class);
@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...";
    }
}

4.2 日志输出格式控制

  • PID:进程ID,用于表明当前操作所处的进程,当多服务同时记录日志时,该值可用于协助程序员调试程序
  • 所属类/接口名:当前显示信息为SpringBoot重写后的信息,名称过长时,简化包名书写为首字母,甚至直接删除

 1. 设置日志输出格式

logging:
    pattern:
        console: "%d - %m%n"
  • %d:日期
  • %m:消息
  • %n:换行
logging:
    pattern:
        console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"
  • %c : 类名
  • clr() : 颜色
  • 默认右对齐,加 - 号为左对齐
  • %-40.40c后面的.40是控制内容的截取
  • {cyan} 设置颜色

4.3 日志文件

1. 设置日志文件

logging:
    file:
        name: server.log

2. 日志文件详细配置

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

ps:日志文件超过自己设定的值就自动分文件记录。这里上一个文件和下一个文件靠%i来区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记录菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值