SpringBoot运维实用篇
1. 打包与运行
- 对SpringBoot项目打包(执行Maven构建指令package)。
mvn package
- 通过命令行执行启动命令。
java -jar springboot.jar
- jar支持命令行启动需要依赖maven插件支持,确认打包时具有SpringBoot对应的Maven插件。
<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>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.cqut.SpringBootPro02Application</mainClass>
<!-- <skip>true</skip>-->
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
-
通过生成SpringBoot框架,pom生成模板默认打包会跳过主类,打包后的jar包会出现没有主清单属性。将
<!--<skip>true</skip>-->
注释掉或者改成false。 -
进入目录,命令行中可以使用
Tab
进行自动补全文件名。 -
命令行启动,windows端口被占用,通过查看端口,杀死对应占用端口号。
# 查看端口 netstat -ano # 查询指定端口 netstat -ano |findstr "端口号" # 根据进程PID查询进程名称 tasklist |findstr "进程PID号" # 根据PID杀死任务 taskkill /F /PID "进程PID号" # 根据进程名称杀死任务 taskkill -f -t -im "进程名称"
2. 配置高级
2.1. 临时属性设置
- 带属性参数启动SpringBoot。
- 携带多个属性启动SpringBoot,属性间使用空格隔开。
java -jar springboot.jar --server.port=80 --属性值=值
- 临时属性必须是当前boot工程支持的属性,否则设置无效。
- 使用jar命令启动springboot工程时可以使用临时属性替换配置文件中属性,具体属性加载优先顺序可参考官方文档。
@SpringBootApplication
public class SpringBootPro02Application {
public static void main(String[] args) {
SpringApplication.run(SpringBootPro02Application.class, args);
}
}
- 启动类通过形参
String[] args
来接收命令行传递过来的参数,再将参数设置传递,实现命令行属性的设置。可以将run
方法的参数args
删掉,这样命令行的参数就不会起作用了。
2.2. 配置文件分类
-
SpringBoot中4级配置文件
- 1级:file:config/application.yml**[最高]**
- 2级:file:application.yml
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3PBrfxHs-1688966460380)(E:\学习笔记\Java\SpringBoot学习笔记.assets\image-20230710093633283.png)]
- 3级:classpath:config/application.yml
- 4级:classpath:application.yml**[最低]**
-
作用:
- 1级和2级留作系统打包后设置通用属性,1级常用作运维经理进行线上整体项目部署方案调控
- 3级和4级系统开发阶段设置通用属性,3级常用作项目经理进行整体项目属性调控
2.3. 自定属性配置文件
- 通过启动参数加载配置文件(无需书写配置文件扩展名)
- 通过启动参数加载指定文件路径下的配置文件时可以加载多个配置,以最后加载的配置文件会叠加覆盖前面的配置文件信息。
- 自定义配置文件——重要说明
- 单服务器项目:使用自定义配置文件需求较低。
- 多服务器项目:使用自定义配置文件需求较高,将所有配置放置在一个目录中,统一管理。
- 基于SpringCloud技术,所有的服务器将不再设置配置文件,而是通过配置中心进行设定,动态加载配置信息。
3. 多环境开发
3.1. 多环境(YAML)版本
spring:
profiles:
active: dev # 指定哪一个环境生效
---
server:
port: 81
spring:
config:
activate:
on-profile: pro # 生产环境
---
server:
port: 82
spring:
config:
activate:
on-profile: dev # 开发环境
---
server:
port: 83
spring:
config:
activate:
on-profile: test # 测试环境
3.2. 多文件版本
- yaml和properties多文件配置一致。
多环境并发独立配置文件
spring:
profiles:
active: dev
group:
"dev": devDB,devRedis,devMVC
"pro": proDB,proRedis,proMVC
"test": testDB,testRedis,testMVC
- 当主环境dev与组中其他环境有相同属性时,主环境属性失效。
- 其他环境中有相同属性时,最后加载的环境属性生效。
3.3. 多环境开发控制
- 当Maven与SpringBoot同时对多环境进行控制时,以Maven为主,SpringBoot使用
@..@
占位符读取Maven对应的配置属性值
<profiles>
<profile>
<!--开发环境-->
<id>env_dev</id>
<properties>
<profile.active>dev</profile.active>
</properties>
</profile>
<profile>
<!--生产环境-->
<id>env_pro</id>
<properties>
<profile.active>pro</profile.active>
</properties>
<!--指定默认开启-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
spring:
profiles:
active: @profile.active@
group:
"dev": devDB,devRedis,devMVC
"pro": proDB,proRedis,proMVC
"test": testDB,testRedis,testMVC
- 运行可能出现以下错误信息
Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token
found character '@' that cannot start any token. (Do not use @ for indentation)
in 'reader', line 28, column 20:
defaultZone: @eurekaDefaultZone@
需要加上过滤器来解决字符@
的问题
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<!--开启过滤,用指定的参数替换directory下的文件中的参数-->
<filtering>true</filtering>
</resource>
</resources>
</build>
4. 日志
4.1. 日志基础操作
- 添加日志记录操作
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class BookController {
private static final Logger log = LoggerFactory.getLogger(BookController.class);
public void method(){
log.info("info");
log.error("error");
log.debug("debug");
log.warn("warn");
}
}
-
注意导入包的类型。
-
设置日志输出级别。
-
设置日志组,控制指定包对应的日志输出级别,也可以直接控制指定包对应的日志输出级别。
# 开启debug模式,输出调试信息,常用于检查系统运行状况
debug: true
# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
level:
root: debug
# 为对应的组设置日志级别
test1: warn
test2: debug
# 为对应包设置日志级别
com.cqut.controller: debug
# 设置日志组
group:
# 自定义组名,设置当前组中所包含的包
test1: com.cqut.controller,com.cqut.service
test2: com.cqut.dao
-
一共有6种日志记录,常用4种:
info
、warn
、error
、debug
。 -
使用lombok提供的注解
@Slf4j
简化开发,减少日志对象的声明操作
@RestController
@Slf4j
public class BookController {
public void method(){
log.info("info");
}
}
4.2. 日志输出格式控制
- PID:进程ID,用于表示当前操作所处的进程,当多服务同时记录日志时,该值可用于协助程序员调试程序
logging:
pattern:
console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"
符号 | 作用 |
---|---|
%d | 输出日期 |
%clr() | 显示颜色 |
%p | 输出日志级别 |
数字 | 控制占位宽度 |
-数字 | 左对齐 |
.数字 | 表示限制输出长度 |
%clr(){颜色} | 选择颜色 |
%m | 消息 |
%n | 换行 |
4.3. 日志文件
# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
file:
name: server.log
logback:
rollingpolicy:
max-file-size: 4KB
file-name-pattern: server.%d{yyyy-MM-dd}.i%.log
4.3. 日志文件
# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
file:
name: server.log
logback:
rollingpolicy:
max-file-size: 4KB
file-name-pattern: server.%d{yyyy-MM-dd}.i%.log
可能是错的,测试没有通过。