springBoot02-运维-使用篇
一、打包和运行
1、直接打包:
- 跳过测试,要不然会执行测试里面的文件。
- 打包
2、打包报错:没有主清单属性:
是因为没有使用SpringBoot提供的maven插件
使用SpringBoot提供的maven插件可以将工程打包成可执行jar包
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
3、win端口占用如何解决?
# 查询端口
netstat -ano
# 查询指定端口
netstat -ano |findstr "端口号"
# 根据进程PID查询进程名称
tasklist |findstr "进程PID号"
# 根据PID杀死任务
taskkill /F /PID "进程PID号"
# 根据进程名称杀死任务
taskkill -f -t -im "进程名称"
4、Linux运行Jar包
- 将项目打包成jar包,然后放到Linux当中。Linux必须安装java、mysql
- 创建mysql连接,并且创建库。主机ip地址:Linux的ip地址。
- 后台启动,并指定日志文件(或者默认):
nohup java -jar springboot.jar >service.log 2>&1 &
- windows在页面查看:linux的ip地址加端口号
- 关闭:
查看pid:ps -ef | grep “java.jar”
关闭pid:kill -9 进程号
二、配置高级
1、临时属性(不重要)
1.带参数启动jar时
-
带属性数启动SpringBoot,将端口号设为8888
java –jar springboot.jar –-server.port=8888
-
属性优先级:
https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config
2.开发环境:
- 方法一:等同于方法二
- 方法二:
public static void main(String[] args) {
String[] arg = new String[1];
arg[0] = "--server.port=8080";
SpringApplication.run(SSMPApplication.class, arg);
//可以在启动boot程序时断开读取外部临时配置对应的入口,
//也就是去掉读取外部参数的形参
SpringApplication.run(SSMPApplication.class);
}
2、配置文件的四级分类:(重要)
- 多层级配置文件的属性采用叠加并覆盖的形式作用于程序
级别分类:
SpringBoot中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级常用于项目经理进行整体项目属性调控。 -
file:将项目打包后,在jar包下创建.yml文件,或者创建config/yml文件
3、自定义配置文件路径、名字
将一些配置文件更改名字后,再让其生效。
单服务器项目:使用自定义配置文件需求较低
多服务器项目:使用自定义配置文件需求较高,将所有配置放置在一个目录中,统一管理
基于SpringCloud技术,所有的服务器将不再设置配置文件,而是通过配置中心进行设定,动态加载配置信息
三、多环境开发
1、统一yml文件,不同的生产环境
spring:
profiles:
active: pro
---
spring:
profiles: pro
server:
port: 80
---
spring:
profiles: dev
server:
port: 81
---
spring:
profiles: test
server:
port: 82
2、不同的yml文件
- yml文件格式, 一定是注重格式:applicaiton-pro.yml 其中的“-”不要忘了。
主配置文件中设置公共配置(全局)
环境分类配置文件中常用于设置冲突属性(局部)
3、多环境分组管理
根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下
- 使用group属性定义多种主环境与子环境的包含关系
使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔
spring:
profiles:
active: dev
group:
"dev": devDB,devRedis,devMVC
"pro": proDB,proRedis,proMVC
"test": testDB,testRedis,testMVC
当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效。最后加载的覆盖前面加载的。例如上述goup的“dev”的:devMVC 会覆盖前面的devDB/devRedis
4、多环境开发控制
Spring在基于maven运行,所以说主要配置maven,让spring读取maven。
在xml设定好规则,然后yml文件去xml去读取即可。
<profiles>
<profile>
<id>dev_env</id>
<properties>
<profile.active>dev</profile.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</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>
spring:
profiles:
active: @profile.active@
-
当打包后:查看yml文件时,以及是在maven设定好的优先启动文件。并非是:
@profile.active@
而是相对应的:dev -
基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试工程时pom.xml,每次更新需要手动compile方可生效
四、日志:
1、日志基础
-
编程期调试代码
-
运营期记录信息:
记录日常运营重要信息(峰值流量、平均响应时长……)
记录应用报错信息(错误堆栈)
记录运维过程数据(扩容、宕机、报警……) -
日志级别:
TRACE:运行堆栈信息,使用率低
DEBUG:程序员调试代码使用
INFO:记录运维过程数据
WARN:记录运维过程报警数据
ERROR:记录错误堆栈信息
FATAL:灾难信息,合并计入ERROR
# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
level:
root: debug
- 使用lombok提供的注解@Slf4j简化开发,减少日志对象的声明操作
2、日志输出格式控制
3、开启文件记录日志
日志文件详细配置:
#开启日志文件
logging:
file:
name: server.log
#分文件记录、滚动的日志:1.文件名字 2.文件大小,超过则自动创建下一个文件
logback:
file-name-pattern:
# server.2020-01-01.0.log 百分d是日期,i:是第几个文件
max-file-size: server.%d{yyyy-MM-dd}.%i.log
rollingpolicy: 4KB