SpringBoot02 运维篇章
SpringBoot程序的打包与运行
程序的打包
-
其中使用Maven提供的工具,Maven命令
-
在打包之前,可以先clean清除以往打包数据
-
mvn package
程序的运行
-
使用命令 java -jar XXX.jar包
-
遇见问题:
-
XXXX中没有主清单属性
-
是因为META-INF -> MANIFEST.MF文件中
-
缺少主启动类配置或者启动类加载器
-
#主要程序启动类 Start-Class: com.tanshilin.SpringBoot2BasicApplication #启动类加载器 Main-Class: org.springframework.boot.loader.JarLauncher
-
-
解决方法: 在POM->Maven的Plugin中
-
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <configuration> <mainClass>com.tanshilin.SpringBoot2BasicApplication</mainClass> <!-- <skip>true</skip>--> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
-
其中配置标签中,配置为false或注释该行配置
在Linux环境下快速启动
-
使用命令java -jar XXX.jar启动
-
后台启动,使用nohup命令 在后台启动
-
nohup javar -jar SpringBoot2_basic-0.0.1-SNAPSHOT 可以使用 > server.log 命令重定向日志输出
-
关闭应用,无法使用ctrl + c关闭当前终端进程
-
使用命令后
-
ps -a | grep "java -jar ...." #等后置属性描述查询出当前命令 kill -9 3303(终端端口port) 杀死当前进程
配置高级
配置临时属性
-
使用 命令行启动:
-
java -jar XXBoot.jar --server.port=8081 --其他配置=XXX
-
也可以使用IDEA中 Run Configuration配置
-
所传递的临时属性,作为SpringBoot启动类@SpringBootApplication中args参数传入启动类
-
public static void main(String[] args) { SpringApplication.run(SpringBoot2BasicApplication.class, args); }
拒接接收临时参数
-
因此,可以自定义新的arg参数,修改启动类调用配置好的参数;防止外部传入临时参数,更改运行配置。
配置文件分类
-
配置文件加载优先级: properties > yml > yaml
- 分为四种配置文件:加载顺序依次为:
- file :config/application.yml 【最高】
- file :application.yml
- classpath:config/application.yml
- classpath:application.yml 【最低】
自定义配置文件
- 指定配置文件路径:
--spring.config.name=filename
无需文件后缀名 - 指定配置文件名称*
--spring.config.location=classpath:/file
指定配置文件的路径*
多环境开发
-
多环境配置: 单文件配置
- yml版本 单文件配置
- properties版本 单文件配置 配置Profiles – active-profile 进行设置
多文件配置 yml
-
主配置文件
spring: profiles: active: pro # 启动pro
环境配置文件
server: port: 80
环境配置文件因为每一个都是配置自己的项,所以连名字都不用写里面了。那问题是如何区分这是哪一组配置呢?使用文件名区分。
application-pro.yaml
server: port: 80
application-dev.yaml
server: port: 81
-
多环境配置中,多文件组合配置
-
SpringBoot从2.4版开始使用group属性替代include属性,降低了配置书写量。简单说就是我先写好,你爱用哪个用哪个。
spring: profiles: active: dev group: "dev": devDB,devRedis,devMVC "pro": proDB,proRedis,proMVC "test": testDB,testRedis,testMVC
-
使用dev主配置文件,直接合并加载group中dev组合
-
多环境开发使用group属性设置配置文件分组,便于线上维护管理
-
Maven与SpringBoot多环境配置冲突:
-
Maven中配置的多环境选择,占比大于SpringBoot环境配置。
-
可以通过*@属性名@* SpringBoot读取Maven中Properties设置属性值
-
spring: profile: active: @profile.active@
-
这样共同配置,方便运行环境选择,共同维护
-
日志
日志的级别:
-
- 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
日志的导出
-
记录日志到文件中格式非常简单,设置日志文件名即可。
logging: file: name: server.log
虽然使用上述格式可以将日志记录下来了,但是面对线上的复杂情况,一个文件记录肯定是不能够满足运维要求的,通常会每天记录日志文件,同时为了便于维护,还要限制每个日志文件的大小。
下面给出日志文件的常用配置方式:
logging: logback: rollingpolicy: max-file-size: 3KB file-name-pattern: server.%d{yyyy-MM-dd}.%i.log
以上格式是基于logback日志技术设置每日日志文件的设置格式,要求容量到达3KB以后就转存信息到第二个文件中。文件命名规则中的%d标识日期,%i是一个递增变量,用于区分日志文件。