Springboot学习笔记——2

Springboot学习笔记------2

一、打包与运行

1.1、程序打包与运行(windows版)

  1. 对SpringBoot项目打包(执行Maven构建指令package)

  2. 运行项目(在cmd中执行启动指令)

    java -jar springboot.jar

jar支持命令行启动需要依赖maven插件支持,请确认打包时是否具有SpringBoot对应的maven插件

xml 复制代码
<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
</build>

1.2、打包插件

  • 使用SpringBoot提供的maven插件可以将工程打包成可执行jar包
xml 复制代码
<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
</build>

jar包描述文件(MANIFEST.MF)

  • 普通工程

    Manifest-Version: 1.0
    Implementation-Title: springboot_08_ssmp
    Implementation-Version: 0.0.1-SNAPSHOT
    Build-Jdk-Spec: 1.8
    Created-By: Maven Jar Plugin 3.2.0

  • 基于spring-boot-maven-plugin打包的工程

    Manifest-Version: 1.0
    Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
    Implementation-Title: springboot_08_ssmp
    Implementation-Version: 0.0.1-SNAPSHOT
    Spring-Boot-Layers-Index: BOOT-INF/layers.idx
    Start-Class: com.itheima. SSMPApplication
    Spring-Boot-Classes: BOOT-INF/classes/
    Spring-Boot-Lib: BO0T-INF/lib/
    Build-Jdk-Spec: 1.8
    Spring-Boot-Version: 2.5.4
    Created-By: Maven Jar Plugin 3.2.0
    Main-Class: org.springframework.boot.loader.JarLauncher

  • Windows端口被占用

powershell 复制代码
#查询端口
netstat -ano
#查询指定端口
netstat -ano |findstr "端口号"
#根据进程PID查询进程名称
tasklist lfindstr "进程PID号"
# 根据PID杀死任务
taskkill /F /PID "进程PID号"
# 根据进程名称杀死任务
taskkill -f -t -im "进程名称"

1.3、Boot工程快速启动(Linux版)

  • 基于Linux ( CenteroS7)
  • 安装JDK,且版本不低于打包时使用的JDK版本
  • 安装包保存在/usr/local/自定义目录中或$HOME下
  • 其他操作参照windows版进行

二、配置高级

2.1、临时属性设置

  • 带属性启动Springboot
powershell 复制代码
java -jar springboot.jar --server.port=80
  • 携带多个属性启动Springboot,属性间使用空格分隔
  • 临时属性必须是当前boot工程支持的属性,否则设置无效
    属性加载优先顺序
    参看属性加载优先顺序文档
  • 带属性启动SpringBoot程序,为程序添加运行属性
  • 通过编程形式带参数启动SpringBoot程序,为程序添加运行参数
java 复制代码
@SpringBootApplication
public class SsmpApplication {
	public static void main(String[] args) {
		//可以通过设置一个字符串数组的方式定义参数
		String[] arg =  new  String[1];
		arg[0] = "--server.port=8082";
		SpringApplication.run(SsmpApplication.class, arg);
	}
}
  • 不携带参数启动SpringBoot程序
java 复制代码
@SpringBootApplication
public class SsmpApplication {
	public static void main(String[] args) {
		//可以在启动boot程序时断开读取外部临时配置对应的入口,也就是去掉读取外部参数的形参
		SpringApplication.run(SsmpApplication.class);
	}
}

2.2、配置程序四级分类

  1. SpringBoot中4级配置文件
    1级: file : config/application. yml
    2级: file : application.yml
    3级: classpath : config/application.yml
    4级: classpath : application.yml
  2. 作用:
    • 1级与2级留做系统打包后设置通用属性,1级常用于运维经理进行线上整体项目部署方案调控
    • 3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控

2.3、自定义配置文件

  • 通过启动参数加载配置文件(无需书写配置文件扩展名)
  • 通过启动参数加载指定文件路径下的配置文件时可以加载多个配置

    注意事项:

多配置文件常用于将配置进行分类,进行独立管理,或将可选配置单独制作便于上线更新维护

重要说明

  • 单服务器项目:使用自定义配置文件需求较低
  • 多服务器项目:使用自定义配置文件需求较高,将所有配置放置在一个目录中,统一管理
  • 基于SpringCloud技术,所有的服务器将不再设置配置文件,而是通过配置中心进行设定,动态加载配置信息

三、多环境开发

3.1、多环境开发(YAML版)

yml 复制代码
#应用环境
spring:
  profiles:
    active: pro
---
#设置环境
#生产环境
spring:
  config:
    activate:
      on-profile: pro
server:
  port: 80
---
#开发环境
spring:
  config:
    activate:
      on-profile: dev
server:
  port: 81
---
#测试环境
spring:
  config:
    activate:
      on-profile: test
server:
  port: 82

3.2、多环境开发文件版(YAML版)

  1. 主启动配置文件application.yml
yml 复制代码
#应用环境
spring:
  profiles:
    active: dev
  1. 配置分类配置文件application-pro.yml
yml 复制代码
server:
  port: 80
  1. 配置分类配置文件application-dev.yml
yml 复制代码
server:
  port: 81
  1. 配置分类配置文件application-test.yml
yml 复制代码
server:
  port: 82
  • 主配置文件中设置公共配置(全局)
  • 环境分类配置文件中常用于设置冲突属性(局部)

3.3、多环境开发文件版(properties版)

  1. 主启动配置文件application.properties

    spring.profiles.active=pro

  2. 配置分类配置文件application-pro.properties

yml 复制代码
server.port=9080
  1. 配置分类配置文件application-dev.properties
yml 复制代码
server.port=9081
  1. 配置分类配置文件application-test.properties
yml 复制代码
server.port=9082

3.4、多环境分组管理

  • 根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下

    • application-devDB.yml
    • application-devRedis.yml
    • application-devMVC.yml
  • 使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔

yml 复制代码
spring:
	profiles:
		active:
		include: devDB,devRedis,devMVC

注意事项:

当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效

  • 从SpringBoot2.4版开始使用group属性替代include属性,降低了配置书写量
  • 使用group属性定义多种主环境与子环境的包含关系
yml 复制代码
spring:
  profiles:
    active: dev
    group:
      "dev": devMVC,devDB,devRedis
      "pro": proMVC,proDB,proRedis

3.5、多环境开发控制

  1. Maven中设置多环境
xml 复制代码
<profiles>
	<profile>
		<id>env_dev</id>
		<properties>
			<profile.active>dev</profile.active>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
		</properties>
	</profile>
	<profile>
		<id>env_pro</id>
		<properties>
			<profile.active>pro</profile.active>
		</properties>
	</profile>
	<profile>
		<id>env_test</id>
		<properties>
			<profile.active>test</profile.active>
		</properties>
	</profile>
</profiles>
  1. SpringBoot中引用Maven属性
yml 复制代码
spring:
  profiles:
    active: @profile.active@
  1. 执行Maven打包指令,并在生成的boot打包文件.jar文件中查看对应信息
  • 当Maven与SpringBoot同时对多环境进行控制时,以Maven为主,SpringBoot使用@...@占位符读取Maven对应的配置属性值
  • 基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试工程时pom.xml每次更新需要手动compile方可生效

四、日志

4.1、日志基础

  • 日志(log)作用
    • 编程期调试代码
    • 运行期记录信息
      • 记录日常运营重要信息(峰值流量、平均响应时长......)
      • 记录应用报错信息(错误堆栈)
      • 记录运维过程数据(扩容、宕机、报警......)
  1. 添加日志记录操作
java 复制代码
@RestController
@RequestMapping("/books")
public class bookController {
    //创建记录日志的对象
    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
  1. 设置日志输入级别
yml 复制代码
# 开启debug模式,输出调试信息。常用于检查系统运行情况
debug:true
# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
  level:
    root: info
  1. 设置日志组,控制指定包对应的日志输出级别,也可以直接控制指定包对应的日志输出级别
yml 复制代码
logging:
  #设置分组
  group:
    ebank: com.smulll.controller,com.smulll
    iservice: com.fasterxml
  level:
    root: info
    #设置某个包的日志级别
    com.smulll.controller: debug
    #设置分组,对某个分组设置日志级别
    ebank: debug

4.2、快速创建日志对象

  • 引入lombok的依赖
xml 复制代码
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>
  • 使用lombok提供的注解@slf4j简化开发,减少日志对象的声明操作
java 复制代码
@Slf4j
@RestController
@RequestMapping("/books")
public class bookController { @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...";
    }
}

4.3、日志输入格式控制

  • PID:进程ID,用于表明当前操作所处的进程,当多服务同时记录日志时,该值可用于协助程序员调试程序
  • 所属类/接口名:当前显示信息为SpringBoot重写后的信息,名称过长时,简化包名书写为首字母,甚至直接删除
  • 设置日志输出格式
yml 复制代码
logging:
  pattern:
    console: 
  • %d:日期
  • %m:消息
  • %n:换行
yml 复制代码
logging:
  pattern:
    console: "%d %clr(%5p) ---[%16t] %clr(%-40.40c){cyan} : %m %n"

4.4、文件记录日志

  • 设置日志文件
yml 复制代码
logging:
#设置日志文件
  file:
    name: server.log
  • 日志文件详细设置
yml 复制代码
logging:
#设置日志文件
  file:
    name: server.log
  logback:
    rollingpolicy:
      file-name-pattern: server.%d{yyyy-MM-dd}.%i.log
      max-file-size: 5KB
相关推荐
巴伦是只猫1 小时前
【机器学习笔记Ⅰ】11 多项式回归
笔记·机器学习·回归
程序员张32 小时前
Maven编译和打包插件
java·spring boot·maven
灵犀学长3 小时前
EasyExcel之SheetWriteHandler:解锁Excel写入的高阶玩法
spring boot·excel
zwjapple4 小时前
docker-compose一键部署全栈项目。springboot后端,react前端
前端·spring boot·docker
DKPT4 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
巴伦是只猫6 小时前
【机器学习笔记Ⅰ】13 正则化代价函数
人工智能·笔记·机器学习
DuelCode7 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
优创学社27 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
好好研究7 小时前
学习栈和队列的插入和删除操作
数据结构·学习
幽络源小助理7 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring