工程打包与运行
windows系统
直接使用maven对项目进行打包
jar支持命令行启动需要依赖maven插件支持,打包时须确认是否具有SpringBoot对应的maven插件
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin></plugins>
</build>
直接在cmd窗口中运行
java -jar StudySpringBoot-0.0.1-SNAPSHOT.jar
若没有该插件jar包不能直接在Java中运行,直接运行会报错“没有主清单属性”
使用插件与不使用插件的jar包的描述文件不同(MANIFEST.MF)
Windonws端口被占用解决办法(指令在cmd中运行)
查询端口
netstat -ano
查询指定端口
netstat -ano | findstr "端口号"
根据进程PID查询进程名称
tasklist | findstr "进程PID号"
根据PID杀死任务(-f表示强制杀死)
taskkill /f /pid "进程PID号"
根据进程名称杀死任务(-f表示强制杀死)
taskkill -f -t -im "进程名称"
Liunx系统
基于Linux(CenterOS7)
安装JDK,且版本不低于打包时使用的JDK版本
安装包保存在/usr/local/自定义目录中或$HOME下
其他操作参照Windows版进行
配置高级
临时属性设置
临时属性设置
在启动项目时可以用临时属性
java -jar StudySpringBoot-0.0.1-SNAPSHOT.jar --server.port=80
还可以同时设置多个临时属性
java -jar StudySpringBoot-0.0.1-SNAPSHOT.jar --server.port=80 --logging.level.root=debug
属性加载优先顺序
参看springboot官方文档(序号越大,优先级越高)
临时属性必须是当前boot工程支持的属性,否则设置无效
idea中测试临时属性是否能用
在上图所示的地方添加临时属性即可,若无该内容需要勾选图中Modlfy options中的Overrid configuration properties 即可。(idea版本不同可能会有些差异)
临时参数是通过application中传入的参数改变程序运行时的参数的
@SpringBootApplication
public class Application {//引导类public static void main(String[] args) {// 临时传参以字符的形式存入到了args中// 若下列代码中不传入args参数则临时传参失效SpringApplication.run(Application.class, args); }}
配置文件分类
SpringBoot中4级配置文件:
1级: file :config/application.yml 【最高】
2级: file :application.yml
3级:classpath:config/application.yml
4级:classpath:application.yml 【最低】
1级配置文件需要在jar包所在的文件夹里新建一个名为config的文件夹,将配置文件放到该文件夹里,3级配置文件需要在项目里的resources文件夹里新建一个名为config的文件夹,将配置文件放到该文件夹里。
作用:
1级与2级留做系统打包后设置通用属性,1级常用于运维经理进行线上整体项目部署案调控
3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控
自定义配置文件
通过启动参数加载配置文件(无需书写配置文件扩展名,且properties与yml文件格式均支持)
通过启动参数加载指定文件路径下的配置文件时可以加载多个配置,中间用逗号分开
重要说明:
单服务器项目:使用自定义配置文件需求较低
多服务器项目:使用自定义配置文件需求较高,将所有配置放置在一个目录中,统一管理
基于SpringCloud技术,所有的服务器将不再设置配置文件,而是通过配置中心进行设定,动态加载配置信息
多环境开发
多环境开发(YAML版)
yaml格式中不同环境之间使用---分开
使用profiles来设置环境名称,使用active来设置运行的环境
主配置文件中设置公共配置(全局),环境分类配置文件中常用于设置冲突属性(局部)
# 公共配置
spring:profiles:active: pro
---
# 设置环境
# 生产环境
spring:profiles: pro
server:port: 80
---
# 开发环境
spring:profiles: dev
server:port: 81
---
# 测试环境
spring:profiles: test
server:port: 82
直接使用spring的profiles这种格式已过时,下列格式是推荐格式
spring:config:activate:on-profile: pro
也可以将每一个环境分开写(环境名称写在application后用-连接)
主启动配置文件application.yml
spring:profiles:active: dev
环境分类配置文件application-pro.yml
server:port: 80
环境分类配置文件application-dev.yml
server:port: 81
环境分类配置文件application-test.yml
server:port: 82
多环境开发(Properties版)
与yaml版的很相似,但在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
多环境开发独立配置文件书写技巧:
根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下
application-devDB.ymlapplication-devRedis.ymlapplication-devMVC.yml
使用include属性可以在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔
spring:profiles:active: devinclude: devDB,devRedis,devMVC
当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效
include在用的时候有一些不便之处,从Spring2.4版开始可以使用group属性替代include属性,降低了配置书写量
spring:profiles:active: devgroup:"dev": devDB,devRedis,devMVC"pro": proDB,proRedis,proMVC"test": testDB,testRedis,testMVC
多环境开发控制
Maven与SpringBoot多环境兼容。当Maven与SpringBoot同时对多环境进行控制时,以Maven为主。SpringBoot使用@..@占位符读取Maven对应的配置属性值
<profiles><profile><id>dev_env</id><properties><profile.active>dev</profile.active><!--profile.active只是一个名称--></properties><activation><activeByDefault>true</activeByDefault><!--上列值为true表示使用该环境,若不设置为true默认为false即不会加载--></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@
每次更改环境后都要重新打包才能生效。若使用idea直接运行时pom.xml每次更新需要手动compile才可生效
日志
日志基础
日志(log)作用:
编程期调试代码
运营期记录信息
记录日常运营重要信息(峰值流量、平均响应时长……)
记录应用报错信息(错误堆栈)
记录运维过程数据(扩容、宕机、报警……)
添加日志记录操作:
@RestController
@RequestMapping("/hero")
public class HeroController {private static final Logger log = LoggerFactory.getLogger(HeroController.class);@RequestMapping("/test")public String test() {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:# 自定义组名,设置当前组中所包含的包bank: com.glaty.studyspringboot.Controllerlevel:root: warn# 为对应组设置日志级别bank: debug# 为对包设置日志级别com.glaty.studyspringboot.Controller: debug
每一个controller都要定义一个Logger,可以直接在类上加lombok提供的@Slf4j注解,减少日志对象的声明操作。
@Slf4j
@RestController
@RequestMapping("/hero")
public class HeroController {@RequestMapping("/test")public String test() {System.out.println("springboot is running...");log.debug("debug ...");log.info("info ...");log.warn("warn ...");log.error("error ...");return "springboot is running...";}
}
日志输出格式控制
格式:
PID:进程ID,用于表明当前操作所处的进程,当多服务同时记录日志时,该值可用于协助程序员调试程序
所属类/接口名:当前显示信息为SpringBoot重写后的信息,名称过长时,简化包名书写为首字母,甚至直接删除
格式控制:
%d:日期
%p:日志级别
%t:所属线程
%c:所属类/接口名
%m:消息
%n:换行%clr(){}:颜色,小括号里填要改变颜色的信息,大括号可以省略(省略后里边的内容也要省略)内容填颜色
%16t表示占位大于等于16右对齐,%-40.40c表示左对齐截取后40位(-号表示左对齐)
logging:pattern:console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"
一般当日志格式确定后不会再设置日志格式
日志文件
日志信息一般储存在文件里
设置日志文件
logging:file:name: server.log
日志文件详细配置
logging:file:name: server.loglogback:rollingpolicy:max-file-size: 3KBfile-name-pattern: server.%d{yyyy-MM-dd}.%i.log
max-file-size:设置每个文件的最大大小
file-name-pattern:设置文件的名称(%d为时间,%i为序号从0开始依次加一,)