SpringBoot运维篇

工程打包与运行

windows系统

        直接使用maven对项目进行打包

        jar支持命令行启动需要依赖maven插件支持,打包时须确认是否具有SpringBoot对应的maven插件

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>>

        直接在cmd窗口中运行

java -jar StudySpringBoot-0.0.1-SNAPSHOT.jar

        若没有该插件jar包不能直接在Java中运行,直接运行会报错“没有主清单属性”

        使用插件与不使用插件的jar包的描述文件不同(MANIFEST.MF)

Windonws端口被占用解决办法(指令在cmd中运行)

        查询端口

netstat -ano

        查询指定端口

netstat -ano | findstr "端口号"

        根据进程PID查询进程名称

tasklist | findstr "进程PID号"

        根据PID杀死任务(-f表示强制杀死)

taskkill /f /pid "进程PID号"

        根据进程名称杀死任务(-f表示强制杀死)

taskkill -f -t -im "进程名称"

 Liunx系统

        基于Linux(CenterOS7)

        安装JDK,且版本不低于打包时使用的JDK版本

        安装包保存在/usr/local/自定义目录中或$HOME下

        其他操作参照Windows版进行

配置高级

临时属性设置

临时属性设置

        在启动项目时可以用临时属性

java -jar StudySpringBoot-0.0.1-SNAPSHOT.jar --server.port=80

        还可以同时设置多个临时属性

java -jar StudySpringBoot-0.0.1-SNAPSHOT.jar --server.port=80 --logging.level.root=debug

         属性加载优先顺序

                参看springboot官方文档(序号越大,优先级越高)

        临时属性必须是当前boot工程支持的属性,否则设置无效

idea中测试临时属性是否能用 

         在上图所示的地方添加临时属性即可,若无该内容需要勾选图中Modlfy options中的Overrid configuration properties 即可。(idea版本不同可能会有些差异)

        临时参数是通过application中传入的参数改变程序运行时的参数的

@SpringBootApplication
public class Application {
    //引导类

    public static void main(String[] args) {
        // 临时传参以字符的形式存入到了args中
        // 若下列代码中不传入args参数则临时传参失效
        SpringApplication.run(Application.class, args);  
    }

}

配置文件分类

SpringBoot中4级配置文件:

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

        2级: file :application.yml

        3级:classpath:config/application.yml

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

        1级配置文件需要在jar包所在的文件夹里新建一个名为config的文件夹,将配置文件放到该文件夹里,3级配置文件需要在项目里的resources文件夹里新建一个名为config的文件夹,将配置文件放到该文件夹里。

作用:

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

        3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控

自定义配置文件

        通过启动参数加载配置文件(无需书写配置文件扩展名,且propertiesyml文件格式均支持)

        通过启动参数加载指定文件路径下的配置文件时可以加载多个配置,中间用逗号分开

重要说明:

        单服务器项目:使用自定义配置文件需求较低

        多服务器项目:使用自定义配置文件需求较高,将所有配置放置在一个目录中,统一管理

        基于SpringCloud技术,所有的服务器将不再设置配置文件,而是通过配置中心进行设定,动态加载配置信息

多环境开发

多环境开发(YAML版)

        yaml格式中不同环境之间使用---分开

        使用profiles来设置环境名称,使用active来设置运行的环境

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

# 公共配置
spring:
  profiles:
    active: pro
---
# 设置环境
# 生产环境
spring:
  profiles: pro
server:
  port: 80
---
# 开发环境
spring:
  profiles: dev
server:
  port: 81
---
# 测试环境
spring:
  profiles: test
server:
  port: 82

        直接使用spring的profiles这种格式已过时,下列格式是推荐格式

spring:
 config:
  activate:
   on-profile: pro

也可以将每一个环境分开写(环境名称写在application后用-连接)

        主启动配置文件application.yml

spring:
 profiles:
  active: dev

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

server:
 port: 80

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

server:
 port: 81

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

server:
 port: 82

多环境开发(Properties版)

        与yaml版的很相似,但在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与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效 

        include在用的时候有一些不便之处,从Spring2.4版开始可以使用group属性替代include属性,降低了配置书写量

         使用group属性定义多种主环境与子环境的包含关系:
spring:
  profiles:
    active: dev
    group:
      "dev": devDB,devRedis,devMVC
      "pro": proDB,proRedis,proMVC
      "test": testDB,testRedis,testMVC
        多环境开发使用group 属性设置配置文件分组,便于线上维护管理

多环境开发控制

        Maven与SpringBoot多环境兼容。当Maven与SpringBoot同时对多环境进行控制时,以Maven为主。SpringBoot使用@..@占位符读取Maven对应的配置属性值

        Maven中设置多环境属性:
<profiles>
    <profile>
        <id>dev_env</id>
        <properties>
            <profile.active>dev</profile.active>
            <!--profile.active只是一个名称-->
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
            <!--上列值为true表示使用该环境,若不设置为true默认为false即不会加载-->
        </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>
        SpringBoot中引用 Maven 属性:
spring:
  profiles:
    active: @profile.active@

        每次更改环境后都要重新打包才能生效。若使用idea直接运行时pom.xml每次更新需要手动compile才可生效

日志

日志基础

日志(log)作用:

        编程期调试代码

        运营期记录信息

                记录日常运营重要信息(峰值流量、平均响应时长……)

                记录应用报错信息(错误堆栈)

                记录运维过程数据(扩容、宕机、报警……)

        添加日志记录操作:

@RestController
@RequestMapping("/hero")
public class HeroController {

    private static final Logger log = LoggerFactory.getLogger(HeroController.class);

    @RequestMapping("/test")
    public String test() {
        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:
    # 自定义组名,设置当前组中所包含的包
    bank: com.glaty.studyspringboot.Controller
  level:
    root: warn
    # 为对应组设置日志级别
    bank: debug
    # 为对包设置日志级别
    com.glaty.studyspringboot.Controller: debug

        每一个controller都要定义一个Logger,可以直接在类上加lombok提供的@Slf4j注解,减少日志对象的声明操作。

@Slf4j
@RestController
@RequestMapping("/hero")
public class HeroController {

    @RequestMapping("/test")
    public String test() {
        System.out.println("springboot is running...");
        log.debug("debug ...");
        log.info("info ...");
        log.warn("warn ...");
        log.error("error ...");
        return "springboot is running...";
    }
}

日志输出格式控制

格式:

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

格式控制:

        %d:日期

        %p:日志级别

        %t:所属线程

        %c:所属类/接口名

        %m:消息
        %n:换行

        %clr(){}:颜色,小括号里填要改变颜色的信息,大括号可以省略(省略后里边的内容也要省略)内容填颜色

        %16t表示占位大于等于16右对齐,%-40.40c表示左对齐截取后40位(-号表示左对齐)

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

        一般当日志格式确定后不会再设置日志格式

日志文件

        日志信息一般储存在文件里

设置日志文件

logging:
  file:
    name: server.log

日志文件详细配置

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

 max-file-size:设置每个文件的最大大小

file-name-pattern:设置文件的名称(%d为时间,%i为序号从0开始依次加一,)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/793968.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TCP协议的三次握手和四次挥手(面试)

三次握手 首先可以简单的回答&#xff1a; 1、第一次握手&#xff1a;客户端给服务器发送一个 SYN 报文。 2、第二次握手&#xff1a;服务器收到 SYN 报文之后&#xff0c;会应答一个 SYNACK 报文。 3、第三次握手&#xff1a;客户端收到 SYNACK 报文之后&#xf…

redis介绍与布署

redis remote dictionary server&#xff08;远程字典服务器&#xff09; 是一个开源的&#xff0c;使用c语言编写的非关系型数据库&#xff0c;支持内存运行并持久化&#xff0c;采用key-value的存储形式。 单进程模型意味着可以在一台服务器上启动多个redis进程&#xff0c;…

利用js实现图片压缩功能

图片压缩在众多应用场景中扮演着至关重要的角色&#xff0c;尤其是在客户端上传图片时。原始图片往往体积庞大&#xff0c;直接上传不仅消耗大量带宽资源&#xff0c;还可能导致上传速度缓慢&#xff0c;严重影响用户体验。因此&#xff0c;在图片上传至服务器前对其进行压缩处…

uni-app iOS上架相关App store App store connect 云打包有次数限制

相册权限 uni-app云打包免费有次数 切换一个账号继续

[人工智能]对未来建筑行业的影响

作者主页: 知孤云出岫 目录 引言1. 人工智能在建筑行业的应用场景1.1 设计阶段1.2 施工阶段1.3 运营和管理 2. 关键技术2.1 机器学习2.2 计算机视觉2.3 自然语言处理2.4 大数据分析 3. 实际案例分析3.1 案例1&#xff1a;利用GAN生成建筑设计方案3.2 案例2&#xff1a;利用计算…

实验03 黑盒测试方法(因果图、决策表)

知识点 决策表法 决策表概念&#xff1a;一种分析多逻辑条件下不同操作的工具。在所有的黑盒测试方法中&#xff0c;基于决策表&#xff08;也称判定表&#xff09;的测试是最为严格、最具有逻辑性的测试方法。优点&#xff1a;能够全面列举所有可能情况&#xff0c;避免遗漏…

Qt项目中添加自定义文件夹,进行整理归类

Qt项目中添加文件夹进行归类 1、在windows的工程目录下创建一个文件夹&#xff0c;如widgets 2、将.h 、.cpp、.ui文件拷贝到windows该文件夹widgets 3、在qt工程中&#xff0c;根目录右键&#xff0c;选择添加现有文件&#xff0c;批量选择 .h 、.cpp、.ui文件之后&#xf…

[数字图像处理]基础知识整理(部分,持续更新)

程序中描述一副图像&#xff0c;已知其横向纵向的像素个数即可&#xff08;&#xff09; 灰度直方图能反映一副图像各个灰度级像素占图像的面积比&#xff08;√&#xff09; 从程序编写的角度看&#xff0c;描述一副图像的基本属性通常包括其分辨率&#xff0c;即图像的宽度…

1、项目目录设计

文章目录 前言一、项目目录设计 前言 本项目我们将会完成一个Go项目开发框架&#xff0c;该项目不会包含具体的CRUD业务代码&#xff0c;而是从头搭建一个工作中实用的开发框架。让开发者能够熟悉整个项目的搭建流程&#xff0c;能够独立完成项目从0到1的搭建&#xff0c;而且…

数据结构实操代码题~考研

作者主页: 知孤云出岫 目录 数据结构实操代码题题目一&#xff1a;实现栈&#xff08;Stack&#xff09;题目二&#xff1a;实现队列&#xff08;Queue&#xff09;题目三&#xff1a;实现二叉搜索树&#xff08;BST&#xff09;题目四&#xff1a;实现链表&#xff08;Linked…

LayoutLMv2:视觉丰富文档理解的多模态预训练

文本和布局的预训练由于其有效的模型架构和大规模未标记扫描/数字出生文档的优势&#xff0c;在各种视觉丰富的文档理解任务中被证明是有效的。我们提出了具有新的预训练任务的LayoutLMv2架构&#xff0c;以在单个多模态框架中对文本、布局和图像之间的交互进行建模。具体而言&…

网络编程学习之tcp

按下*&#xff08;星号&#xff09;可以搜索当前光标下的单词。 Tcp编程的过程 打开网络设备 Bind&#xff1a;给服务地址把ip号和端口号连接进去 Tcp是有状态的 Listen是进入监听状态&#xff0c;看有没有客户端来连接服务器 Tcp比udp消耗过多资源 Upd类似于半双工&#…

Qt图形与图片(Qt位置相关函数、Qt基础图形的绘制、双缓冲机制、显示SVG格式图片)

此篇文章介绍几种主要位置函数及其之间的区别&#xff0c;以及各种与位置相关函数的使用场合&#xff1b;然后&#xff0c;通过一个简单绘图工具实例&#xff0c;介绍利用QPainter和QPainterPath两种方法绘制各种基础图形&#xff1b;最后&#xff0c;通过几个实例介绍如何利用…

Golang | Leetcode Golang题解之第230题二叉搜索树中第K小的元素

题目&#xff1a; 题解&#xff1a; type MyBst struct {root *TreeNodenodeNum map[*TreeNode]int // 统计以每个结点为根结点的子树的结点数&#xff0c;并存储在哈希表中 }// 统计以 node 为根结点的子树的结点数 func (t *MyBst) countNodeNum(node *TreeNode) int {if…

达梦数据库dm8安装步骤及迁移

目录 前言: 一、安装部署 1、下载 2、创建用户及安装目录 3、挂载下载的镜像 4、环境配置 5、安装 二、基本使用 1、DM工具使用 2、兼容性配置 2.1 兼容GBK字符集编码 2.2 兼容UTF-8字符集编码 3、创建用户和密码,表空间 4、整理数据库配置 5、启动脚本设置 …

基于YOLOV8的数粒机视觉计数解决方案

一:行业背景调查 随着全球市场商品大规模工业化生产技术的大规模发展,其中对各类产品生产包装以及原材料供给有了更多精准计数的要求,这些要求主要分布在一些产量较大,产品颗粒较小,单个成本较高的商品中,近几年主要从医药包装领域和接插件包装领域开始对产品包装中的计…

ENSP实现防火墙区域策略与用户管理

目录 实验拓扑与要求​编辑 交换机与防火墙接口的配置 交换机&#xff1a; 创建vlan 接口配置 防火墙配置及接口配置 防火墙IP地址配置 云配置​编辑​编辑​编辑 在浏览器上使用https协议登陆防火墙&#xff0c;并操作 访问网址&#xff1a;https://192.168.100.1:844…

弥合人类与人工智能的知识差距:AlphaZero 中的概念发现和迁移(1)

文章目录 一、摘要二、简介三、相关工作3.1 基于概念的解释3.2 强化学习中生成解释3.3 国际象棋与人工智能 四、什么是概念&#xff1f;五、发掘概念5.1 挖掘概念向量5.1.1 静态概念的概念约束5.1.2 动态概念的概念约束 5.2 过滤概念 一、摘要 人工智能&#xff08;AI&#xff…

2023年全国大学生电子信息竞赛E题——自动追踪系统(stm32和openmv+普通舵机)完美解决第四问

当时做的时候&#xff0c;当时看别人开源的23年的题&#xff0c;感觉一头雾水。两个字没思路。确实只有做了才会有思路。我这里清晰的整理出来思路。 1.第一问的复位问题就是写一个函数&#xff0c;如果按键按下&#xff0c;就进入&#xff0c;再按下就退出 当然这个复位是写死…

git提交大文件服务500

错误如图 需保证git服务端能接收大文件 修改项目下.git文件中的config文件&#xff0c;加入 [http] postBuffer 524288000