携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情
⭐️前面的话⭐️
✉️坚持和努力一定能换来诗与远方!
💭推荐书籍:📚《王道408》,📚《深入理解 Java 虚拟机-周志明》,📚《Java 核心技术卷》
💬算法刷题:✅力扣🌐牛客网
🎈Github
🎈码云Gitee
1 配置高级
- 带属性参数启动 SpringBoot(携带多个属性启动 SpringBoot,属性间使用空格分隔)属性加载优先顺序
(1)命令行
java –jar springboot.jar –-server.port=80
(2)IDEA 中配置
(3)通过编程形式带参数启动 SpringBoot程序,为程序添加运行参数
public static void main(String[] args) {
// 添加参数
String[] arg = new String[1];
arg[0] = "--server.port=8080";
SpringApplication.run(SSMPApplication.class, arg);
}
- 配置文件分类
# SpringBoot中4级配置文件
1. file :config/application.yml 【最高】(运维组长整体调控,副行长类似)(工程路径config目录中配置文件)
2. file :application.yml(运维人员 配置涉密线上环境)(工程路径配置文件)
3. classpath:config/application.yml(开发经理整体调控)(项目类路径config目录中配置文件)
4. classpath:application.yml 【最低】(程序员本机开发与测试👨🏻💻)(项目类路径配置文件)
# 如果yml与properties在不同层级中共存会是什么效果?
类路径application.properties属性是否覆盖文件系统config目录中application.yml属性
# 多层级配置文件间的属性采用叠加并覆盖的形式作用于程序
- 配置文件加载
- 通过启动参数加载配置文件(无需书写配置文件扩展名)
- 通过启动参数加载指定文件路径下的配置文件(可以加载多个)
- 多配置文件常用于将配置进行分类,进行独立管理,或将可选配置单独制作便于上线更新维护
2 多环境开发
- 多环境开发需要设置若干种常用环境,例如开发、生产、测试环境
- 每种环境的区别在于加载的配置属性不同
- 指定启动时使用某种环境
YAML 版
Properties 版
- 配置文件书写
- 主配置文件中设置公共配置(全局)
- 环境分类配置文件中常用于设置冲突属性(局部)
- 配置文件可拆分:可以根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,如下
application-devDB.yml
application-devRedis.yml
application-devMVC.yml
include属性:在激活指定环境的情况下,使用include属性同时对多个环境进行加载使其生效,多个环境间使用逗号分隔
spring:
profiles:
active: dev
include: devDB,devRedis,devMVC
- 其它说明
- 当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效
- 从 Spring2.4 版开始使用
group属性替代include属性,降低了配置书写量,使用 group属性定义多种主环境与子环境的包含关系。多环境开发使用 group 属性设置配置文件分组,便于线上维护管理。
spring:
profiles:
active: dev
group:
"dev": devDB,devRedis,devMVC
"pro": proDB,proRedis,proMVC
"test": testDB,testRedis,testMVC
2.1 Maven 与 SpringBoot多环境兼容
- 两者同时对多环境进行控制时,以Mavn为主。SpringBoot使用
@xxx@占位符读取Maven对应的配置属性值,pom.xml 每次更新需要手动compile方可生效。
3 日志
3.1 日志基础
日志作用
- 编程期调试代码
- 运行期记录信息
- 记录日常运营重要信息(峰值流量、平均响应时长……)
- 记录应用报错信息(错误堆栈)
- 记录运维过程数据(扩容、宕机、报警……)
代码中使用日志工具记录日志
①:添加日志记录操作
@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...";
}
}
日志级别
- 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
- 总结一下
- 日志用于记录开发调试与运维过程消息
- 日志的级别共6种,通常使用4种即可,分别是 DEBUG,INFO, WARN, ERROR
- 可以通过日志组或代码包的形式进行日志显示级别的控制
@Slf4j 注解优化日志对象创建
- 基于
lombok提供的@Slf4j注解为类快速添加日志对象
@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...";
}
}
3.2 日志输出格式控制
# 说明
PID:进程ID,用于表明当前操作所处的进程,当多服务同时记录日志时,该值可用于协助程序员调试程序
所属类/接口名:当前显示信息为SpringBoot重写后的信息,名称过长时,简化包名书写为首字母,甚至直接删除
# 设置日志输出格式
%d:日期
%m:消息
%n:换行
如下
logging:
pattern:
console: "%d - %m%n"
logging:
pattern:
console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"
3.3 日志文件配置
- 设置日志记录到文件&&日志文件详细配置
logging:
file:
name: server.log
logback:
rollingpolicy:
max-file-size: 3KB # 单文件最大值
file-name-pattern: server.%d{yyyy-MM-dd}.%i.log # 文件名