文章目录
1. 打包与运行
刚开始做开发学习的小伙伴可能在有一个知识上面有错误的认知,我们天天写程序是在Idea下写的,运行也是在Idea下运行的。但是实际开发完成后,我们的项目是不可能运行在自己的电脑上的。
我们以后制作的程序是运行在专用的服务器上的,简单说就是将你做的程序放在一台独立运行的电脑上,这台电脑要比你开发使用的计算机更专业,并且安全等级各个方面要远超过你现在的电脑。
那我们的程序如何放置在这台专用的电脑上呢,这就要将我们的程序先组织成一个文件,然后将这个文件传输到这台服务器上。这里面就存在两个过程,一个是打包的过程,另一个是运行的过程。
1.1 打包
SpringBoot程序是基于Maven创建的,在Maven中提供有打包的指令,叫做package。本操作可以在Idea环境下执行。
mvn package
打包完成之后就会生成一个jar包,在我们工程目录的target文件夹下面
这里需要特别关注两个点
特别关注1:如果你的计算机中没有安装java的jdk环境,是无法正确执行上述操作的,因为程序执行使用的是java指令。
特别关注2:在使用向导创建SpringBoot工程时,pom.xml文件中会有如下配置,这一段配置千万不能删除,否则打包后无法正常执行
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
1.2 运行
找到生成的jar包所在的文件夹,选中文件夹上方的目录地址,输入cmd打开命令行窗口,执行如下指令
java -jar 项目名称(注意空格分隔)
ok,我们的程序就在我们的服务器上跑去来了,而不是在我们的idea里面。
2. 配置高级
2.1 临时属性设置
目前我们的程序包打好了,可以发布了。但是程序包打好以后,里面的配置都已经是固定的了,比如配置了服务器的端口是8080。如果我要启动项目,发现当前我的服务器上已经有应用启动起来并且占用了8080端口,这个时候就尴尬了。难道要重新把打包好的程序修改一下吗?比如我要把打包好的程序启动端口改成80。
SpringBoot提供了灵活的配置方式,如果你发现你的项目中有个别属性需要重新配置,可以使用临时属性的方式快速修改某些配置。方法也特别简单,在启动的时候添加上对应参数就可以了。
java –jar springboot.jar –-server.port=80
如果你发现要修改的属性不止一个,可以按照上述格式继续写,属性与属性之间使用空格分隔。
java –jar springboot.jar –-server.port=80 --logging.level.root=debug
2.2 配置文件分类
SpringBoot提供了配置文件和临时属性的方式来对程序进行配置。其实这个配置文件我们一直在使用,只不过我们用的是SpringBoot提供的4级配置文件中的其中一个级别。4个级别分别是:
- 类路径下配置文件(一直使用的是这个,也就是resources目录中的application.yml文件)
- 类路径下config目录下配置文件
- 程序包所在目录中配置文件
- 程序包所在目录中config目录下配置文件
总体上来说,4种配置文件如果都存在的话,有一个优先级的问题,说白了就是加入4个文件我都有,里面都有一样的配置,谁生效的问题。上面4个文件的加载优先顺序为
- file :config/application.yml 【最高】
- file :application.yml
- classpath:config/application.yml
- classpath:application.yml 【最低】
总结:
- 项目类路径配置文件:服务于开发人员本机开发与测试
- 项目类路径config目录中配置文件:服务于项目经理整体调控
- 工程路径配置文件:服务于运维人员配置涉密线上环境
- 工程路径config目录中配置文件:服务于运维经理整体调控
2.3 yml多文件开发
将所有的配置都放在一个配置文件中,尤其是每一个配置应用场景都不一样,这显然不合理,于是就有了将一个配置文件拆分成多个配置文件的想法。拆分后,每个配置文件中写自己的配置,主配置文件中写清楚用哪一个配置文件就好了。
主配置文件
环境配置文件
application-pro.yml
server:
port: 8081
application-pro.test
server:
port: 8082
总结
-
可以使用独立配置文件定义环境属性
-
独立配置文件便于线上系统维护更新并保障系统安全性
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...";
}
}
代码的时候每个类都要写创建日志记录对象,这个可以优化一下,使用前面用过的lombok技术给我们提供的工具类即可。
基于lombok提供的@Slf4j注解为类快速添加日志对象
//为类快速添加日志对象
@Slf4j
//Rest模式开发
@RestController
@RequestMapping("/books")
public class BookController {
//private static final Logger log = (Logger) LoggerFactory.getLogger(BookController.class);
@GetMapping
public String getById(){
System.out.println("springboot is running");
log.debug("debug info...");
log.error("error info...");
log.info("info info...");
log.warn("warn info...");
return "springboot is running";
}
}
3.2 设置日志输出级别
日志的级别分为6种,分别是:
- TRACE:运行堆栈信息,使用率低
- DEBUG:程序员调试代码使用
- INFO:记录运维过程数据
- WARN:记录运维过程报警数据
- ERROR:记录错误堆栈信息
- FATAL:灾难信息,合并计入ERROR
#设置日志级别,root表示根节点,即整体应用日志级别
logging:
level:
root: debug
一般情况下,开发时候使用DEBUG,上线后使用INFO,运维信息记录使用WARN即可。
3.3 日志输出格式控制
日志已经能够记录了,但是目前记录的格式是SpringBoot给我们提供的,如果想自定义控制就需要自己设置了。先分析一下当前日志的记录格式。
了解日志的记录格式之后,我们就可以自定义日志输出格式了。
logging:
pattern:
console: "%d %clr(%5p) --- [%16t] %c %n"
file:
name: server.log
来看一下我们自定义输出日志的格式
虽然使用上述格式可以将日志记录下来了,但是面对线上的复杂情况,一个文件记录肯定是不能够满足运维要求的,通常会每天记录日志文件,同时为了便于维护,还要限制每个日志文件的大小。下面给出日志文件的常用配置方式:
logging:
logback:
rollingpolicy:
max-file-size: 5KB
file-name-pattern: server.%d{yyyy-MM-dd}.%i.log
#server.2022-04-07.1.log
以上格式是基于logback日志技术设置每日日志文件的设置格式,要求容量到达5KB以后就转存信息到第二个文件中。文件命名规则中的%d标识日期,%i是一个递增变量,用于区分日志文件。