笔记小结
- Boot程序打包依赖SpringBoot对应的Maven插件即可打包 出可执行的jar包
- 运行jar包使用jar命令进行
- Windows与Linux下执行Boot打包程序流程相同,仅需确保 运行环境有效即可
程序为什么要打包
SpringBoot项目快速启动(Windows版)
笔记小结
步骤:
- SpringBoot工程可以基于java环境下独立运行jar文件启动服务
- SpringBoot工程执行mvn命令package进行打包
- 执行jar命令:java –jar 工程名.jar
对SpringBoot项目打包(执行Maven构建指令package)
mvn package
也可以使用maven插件
运行项目(执行启动指令)
java –jar springboot.jar
注意:jar支持命令行启动需要依赖maven插件支持,请确认打包时是否具有SpringBoot对应的maven插件(一般通过springboot构建,通常自动保留)
<build> <plugins> <plugin> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-maven-pluginartifactId> plugin> plugins> build>
示例:
步骤一:项目打包
注意:maven项目生命周期会将test加入其内,需要跳过
步骤二:运行项目
在项目生产的target目录中进行测试
spring-boot-maven-plugin插件作用
可执行jar包目录结构
BOOT-INF中会多出lib目录,lib目录中包含了运行项目所需要的jar文件
org中会多出运行springboot所需要的工具
jar包描述文件(MANIFEST.MF)
Start-Class:是项目中的启动类
Man-Cass:是org中的jar启动器工具
命令行启动常见问题及解决方案
# 查询端口
netstat -ano
# 查询指定端口
netstat -ano |findstr "端口号"
# 根据进程PID查询进程名称
tasklist |findstr "进程PID号"
# 根据PID杀死任务
taskkill /F /PID "进程PID号"
# 根据进程名称杀死任务
taskkill -f -t -im "进程名称"
笔记小结
- 上传安装包
- 执行jar命令:java –jar 工程名.jar
一般会将文件放置usr或者**$home**目录下
示例:
linux环境:centOS7
在usr目录中创建java目录,并上传1.8版本的linux的JDK
补充:linux环境中配置环境变量需要及时更新 resource资源目录
nohup java -jar springboot_08_ssmp-0.0.1-SNAPSHOT.jar >server.log 2>&1 &
server.log 2>&1 &日志挂载
补充:
1.关闭该进程
查看该进程
ps -ef | grep "java -jar"
杀死该进程
kill -9 "PID" #例如 kill -9 32542
2.查看服务器日志
cat server.log
笔记小结
- SpringBoot在开发和运行环境均支持使用临时参数修改工程配置
- SpringBoot支持4级配置文件,应用于开发与线上环境进行配置的 灵活设置
- SpringBoot支持使用自定义配置文件的形式修改配置文件存储位置
- 基于微服务开发时配置文件将使用配置中心进行管理
笔记小结
- 使用jar命令启动SpringBoot工程时可以使用临时属性替 换配置文件中的属性
- 临时属性添加方式:java –jar 工程名.jar –-属性名=值
- 多个临时属性之间使用空格分隔
- 临时属性必须是当前boot工程支持的属性,否则设置无效
若端口被占用,需要临时转换端口,可以使用临时属性进行配置
带属性数启动SpringBoot
java –jar springboot.jar –-server.port=80
携带多个属性启动SpringBoot,属性间使用空格分隔
参看https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config
笔记小结
启动SpringBoot程序时,可以选择是否使用命令行属性为 SpringBoot程序传递启动属性
带属性启动SpringBoot程序,为程序添加运行属性
idea2020版本设置:
通过编程形式带参数启动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);
}
示例:
public static void main(String[] args) {
//启动类正常启动程序
SpringApplication.run(SSMPApplication.class, args);
//启动类自定义启动程序配置自定义启动参数
// String[] arg = new String[1];
// arg[0] = "--server.port=8080";
// SpringApplication.run(SSMPApplication.class, arg);
//启动类启动程序不配置携带参数
SpringApplication.run(SSMPApplication.class);
}
笔记小结
- 配置文件分为4种
- 项目类路径配置文件:服务于开发人员本机开发与测试
- 项目类路径config目录中配置文件:服务于项目经理整体调控
- 工程路径配置文件:服务于运维人员配置涉密线上环境
- 工程路径config目录中配置文件:服务于运维经理整体调控
- 多层级配置文件间的属性采用叠加并覆盖的形式作用于程序
SpringBoot中4级配置文件
1级: file :config/application.yml 【最高】
2级: file :application.yml
3级:classpath:config/application.yml
4级:classpath:application.yml 【最低】
补充:若同时配置了application.properties,则同一层级的 :pro生效,不同层级的,层级高则生效。.
作用:
笔记小结
- 配置文件可以修改名称,通过启动参数设定
- 配置文件可以修改路径,通过启动参数设定
- 微服务开发中配置文件通过配置中心进行设置
补充:properties与yml文件格式均支持
补充:properties与yml文件格式均支持
补充:多配置文件常用于将配置进行分类,进行独立管理,或将可选配置单独制作便于上线更新维护
笔记小结
- 多环境开发(YAML版)
- 多环境开发(Properties版)
- Maven与SpringBoot多环境冲突现象解决方案
笔记小结
- 多环境开发需要设置若干种常用环境,例如开发、生产、测试环境
- yaml格式中设置多环境使用—区分环境设置边界
- 每种环境的区别在于加载的配置属性不同
- 启用某种环境时需要指定启动时使用该环境
单文件
# 启动指定环境
spring:
profiles:
active: dev
---
#生产环境,生产环境具体参数设定
spring:
profiles: pro
server:
port: 80
---
#开发环境,开发环境具体参数设定
spring:
profiles: dev
server:
port: 81
---
#测试环境,测试环境具体参数设定
spring:
profiles: test
server:
port: 82
---
过时格式:
spring:
profiles:
active: pro
---
spring:
profiles: pro
server:
port: 80
推荐格式:✳
spring:
profiles:
active: pro
---
spring:
config:
activate:
on-profile: pro
2.多文件
笔记小结
- 可以使用独立配置文件定义环境属性
- 独立配置文件便于线上系统维护更新并保障系统安全性
在主启动配置文件application.yml
spring:
profiles:
active: dev
环境分类配置文件application-pro.yml
server:
port: 8081
环境分类配置文件application-dev.yml
server:
port: 8080
环境分类配置文件application-test.yml
server:
port: 8082
补充:激活名称以文件中-的后缀名
多环境开发独立配置文件书写技巧(一)
笔记小结
- 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
**多环境开发独立配置文件书写技巧(二)**✳
根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下
使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔
spring:
profiles:
active: dev
include: devDB,devRedis,devMVC
注意:当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效
使用group属性定义多种主环境与子环境的包含关系
spring:
profiles:
active: dev
group:
"dev": devDB,devRedis,devMVC
"pro": proDB,proRedis,proMVC
"test": testDB,testRedis,testMVC
补充:多环境开发使用group属性设置配置文件分组,便于线上维护管理
笔记小结
- 当Maven与SpringBoot同时对多环境进行控制时,以Mavn为主, SpringBoot使用**@…@占位符读取Maven**对应的配置属性值
- 基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试 工程时pom.xml每次更新需要手动compile方可生效
springboot依赖于maven,是基于maven来进行相关配置的
Maven与SpringBoot多环境兼容
Maven中设置多环境属性
<profiles>
<profile>
<id>dev_envid>
<properties>
<profile.active>devprofile.active>
properties>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
profile>
<profile>
<id>pro_envid>
<properties>
<profile.active>proprofile.active>
properties>
profile>
<profile>
<id>test_envid>
<properties>
<profile.active>testprofile.active>
properties>
profile>
profiles>
注意:单词拼写
…… 不加s
SpringBoot中引用Maven属性
spring:
profiles:
active: @profile.active@
注意:此处对应的名称需要与xml文件中的名称相对应,如图
执行Maven打包指令,并在生成的boot打包文件.jar文件中查看对应信息
示例结果:
在打包好的jar包中名称会对应改变
笔记小结
- 日志基础使用规则
- 编辑日志输出格式
- 日志文件设置(重点)
笔记小结
- 日志用于记录开发调试与运维过程消息
- 日志的级别共6种,通常使用4种即可,分别是DEBUG,INFO,WARN,ERROR
- 可以通过日志组或代码包的形式进行日志显示级别的控制
- 基于lombok提供的**@Slf4j注解**为类快速添加日志对象
日志(log)作用
代码中使用日志工具记录日志
添加日志记录操作
@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...";
}
}
设置日志输出级别
# 开启debug模式,输出调试信息,常用于检查系统运行状况
debug: true
# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
level:
root: debug
debug模式,是程序员调制程序时使用
debug日志级别(常用),root代表整体应用日志级别,级别范围很大
设置日志包,控制指定包对应的日志输出级别
#设置日志级别,com.example.controller表示单独设置包下的日志级别
logging:
level:
root: info
com.example.controller: debug
设置“com.example.controller”,此包下的日志级别为debug级别。“root”为info级别(整体应用日志级别为info级别)
设置日志组,也可以直接控制指定包对应的日志输出级别
#设置日志级别,ebank表示设置组下的日志级别
logging:
group:
ebank: com.example.controller
level:
root: info
ebank: debug
步骤:定义组,设置组级的日志级别
“ebank”这个名称可以自定义
优化日志对象创建代码✳
使用lombok提供的注解**@Slf4**j简化开发,减少日志对象的声明操作
@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...";
}
}
补充:
@Slf4j该注解的作用主要是操作在idea中的控制台中打印的日志信息。该注解相当于代替了以下的代码:private final Logger logger = LoggerFactory.getLogger(当前类名.class);
@Slf4j速记,英文简写 self-justification,自我辩解
笔记小结
日志输出格式设置规则
PID:进程ID,用于表明当前操作所处的进程,当多服务同时记录日志时,该值可用于协助程序员调试程序
所属类/接口名:当前显示信息为SpringBoot重写后的信息,名称过长时,简化包名书写为首字母,甚至直接删除
设置日志输出格式
logging:
pattern:
console: "%d -%m%n"
%d:日期
%m:消息
%n:换行
logging:
pattern:
console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"
%clr{cyan}:添加青色显示,例如:%clr(%-40.40c){cyan}
[%16t]:添加占位符填充
%-40.40c:左对齐,并占位40,截取40个字符
笔记小结
- 日志记录到文件
- 日志文件格式设置
设置日志文件
logging:
#设置日志保存文件
file:
name: server.log
关键词file
日志文件详细配置
logging:
#设置日志文件最大容量
logback:
rollingpolicy:
max-file-size: 10MB
file-name-pattern: server.%d{yyyy-MM-dd}.%i.log