Appearance
进入阿里云项目初始化网址下载项目初始化代码
txt
网址:https://start.aliyun.com/
表单项选择
项目构建方式:Maven
开发语言:Java
Spring Boot版本:2.6.13
项目基本信息:
Group:com.example
Artifact:xys1
高级选项
项目名称:xys1
项目描述:Demo project for Spring Boot
基础包:com.example.xys1
打包方式:jar
Java版本:8 (可选19 17 11 8)
应用架构:单模块
下载对应的代码zip解压后用idea打开,idea配置Java版本为1.8spring-boot中的web项目
pom.xml文件中引入web项目依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>核心配置 在 src/main/resources 下创建配置文件 application.yml
# application.yml 示例
server:
port: 8888 # 项目启动端口,默认8080,可自定义(如8888)
servlet:
context-path: /api # 项目访问上下文路径,访问地址变为 http://localhost:8888/api/xxx
# Spring 基础配置(可选)
spring:
application:
name: xys1 # 项目名称不同环境使用不同的配置
- 在/pom.xml中新增以下代码
txt
<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>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.example.xys1.Xys1Application</mainClass>
<!-- jar包,这里必须是false -->
<skip>false</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<filtering>true</filtering><!-- 开启「资源过滤」—— Maven 打包时,会扫描文件内容,将其中的 Maven 变量(如 ${spring.profiles.active}、@spring.profiles.active@)替换为 pom.xml 中定义的实际值 例如<spring.profiles.active>devOfXys</spring.profiles.active>-->
<directory>src/main/resources</directory>
<includes>
<include>application.yml</include>
</includes>
</resource>
<resource>
<filtering>false</filtering>
<directory>src/main/resources</directory>
<includes>
<include>application-*.yml</include>
<include>logback-*.xml</include>
</includes>
</resource>
</resources>
</build>
<!-- Maven 的多环境配置功能 -->
<profiles>
<!-- 本地开发环境 -->
<profile>
<id>devOfXys</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<spring.profiles.active>devOfXys</spring.profiles.active>
</properties>
</profile>
<!-- 线上开发环境 -->
<profile>
<id>dev</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
</profile>
<!-- 测试环境 -->
<profile>
<id>test</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<spring.profiles.active>test</spring.profiles.active>
</properties>
</profile>
<!-- 生产环境 -->
<profile>
<id>prod</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
</profile>
</profiles><resources> 标签含义
| 配置段 | 过滤开关 | 匹配文件 | 核心效果 |
|---|---|---|---|
| 第一个 resource | true | application.yml | 开启过滤:打包时解析 application.yml 中的 Maven 变量(如 @spring.profiles.active@),替换为 pom.xml 中 spring.profiles.active 的实际值(如 devOfXys/dev/test/prod)。 |
| 第二个 resource | false | application-.yml、logback-.xml | 关闭过滤:application-devOfXys.yml、logback-prod.xml 等文件原样复制,不解析任何变量(避免这些文件中的 ${xxx} 被 Maven 错误替换) |
<profiles> 标签含义
| Profile ID | 环境类型 | 默认激活 | 变量值 | 作用 |
|---|---|---|---|---|
| devOfXys | 本地开发 | 是 | spring.profiles.active=devOfXys | 本地开发默认用,打包时无需加 -P,自动设置变量为 devOfXys |
| dev | 线上开发 | 否 | spring.profiles.active=dev | 打包线上开发环境:mvn package -Pdev,变量值设为 dev |
| test | 测试环境 | 否 | spring.profiles.active=test | 打包测试环境:mvn package -Ptest,变量值设为 test |
| prod | 生产环境 | 否 | spring.profiles.active=prod | 打包生产环境:mvn package -Pprod,变量值设为 prod |
在 src/main/resources 下创建以下文件(和 application.yml 同级):
resources/
├── application.yml # 公共配置(所有环境都用)
├── application-devOfXys.yml # 本地开发环境(自己电脑用)
├── application-dev.yml # 线上开发环境(开发服务器)
├── application-test.yml # 测试环境(测试服务器)
└── application-prod.yml # 生产环境(正式服务器)在 src/main/resources/application.yml 文件中加入以下代码
spring:
profiles:
active: @spring.profiles.active@激活指定环境(3 种常用方式)
方式 1:使用默认环境(devOfXys) 直接运行启动类或 mvn spring-boot:run,Maven 会默认激活 devOfXys,Spring Boot 自动加载 application-devOfXys.yml。
方式 2:Maven 命令指定环境(推荐)
# 激活测试环境
mvn spring-boot:run -Ptest
# 激活生产环境
mvn spring-boot:run -Pprod
# 打包时指定环境(打生产环境的包)
mvn clean package -Pprod方式 3:运行 Jar 包时指定环境(覆盖 Maven 配置)
即使打包时用了 -Pprod,也可以通过命令行覆盖为测试环境
java -jar demo-web.jar --spring.profiles.active=testlogback日志配置 (多个环境都一致 我只说一个dev环境)
在 src/main/resources/application-dev.yml 文件中添加代码
logging:
config: classpath:logback-dev.xml并 src/main/resources/logback-dev.xml 写入代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<!-- 全局变量:日志文件存放根路径(应用运行目录下的logs文件夹) -->
<property name="log.path" value="logs"/>
<!-- 全局变量:日志输出格式模板(含时间、级别、追踪ID、线程、代码位置等关键信息) -->
<property name="log.pattern" value="[%d{HH:mm:ss.SSS}] [%level{5}] [traceId:%X{traceId:-NO_TRACE_ID}] [%thread] [%logger-%method-%line] - %msg%n"/>
<!-- 定义名为console的控制台输出器:所有日志输出到控制台(开发调试用) -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 配置日志编码器:使用全局定义的log.pattern格式输出日志 -->
<encoder>
<!-- UTF-8,解决中文乱码 -->
<charset>UTF-8</charset>
<!-- 引用全局日志格式模板,保证控制台日志格式统一 -->
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 定义名为log-all的滚动文件输出器:存储 INFO 及以上 -->
<appender name="log-all" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 指定实时写入的日志文件路径:日志先输出到logs/log-all/log-all.log -->
<file>${log.path}/log-all/log-all.log</file>
<!-- 配置滚动策略:采用大小+时间组合滚动(解决单文件过大/按时间清理) -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 滚动后日志文件名格式:日期+大小序号(如log-all.2026-02-09.0.log) -->
<fileNamePattern>${log.path}/log-all/log-all.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 单个日志文件大小上限:达到2MB时自动切割生成新文件 -->
<maxFileSize>2MB</maxFileSize>
<!-- 日志文件保留时长:仅保留最近60天的日志,超过自动删除 -->
<maxHistory>60</maxHistory>
<!-- 日志文件总大小上限:所有日志文件合计不超过5GB,防止磁盘占满 -->
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<!-- 配置日志编码器:使用全局定义的log.pattern格式输出日志 -->
<encoder>
<charset>UTF-8</charset>
<!-- 引用全局日志格式模板,保证日志格式统一 -->
<pattern>${log.pattern}</pattern>
</encoder>
<!-- 阈值过滤器:保留INFO及以上级别日志(INFO/WARN/ERROR) -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 过滤阈值:INFO(包含INFO及更高优先级日志) -->
<level>INFO</level>
</filter>
</appender>
<!-- 定义名为log-error的滚动文件输出器:专门存储ERROR级别系统日志 -->
<appender name="log-error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 指定实时写入的日志文件路径:日志先输出到logs/log-error/log-error.log -->
<file>${log.path}/log-error/log-error.log</file>
<!-- 配置滚动策略:采用大小+时间组合滚动(解决单文件过大/按时间清理) -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 滚动后日志文件名格式:日期+大小序号(如log-error.2026-02-09.0.log) -->
<fileNamePattern>${log.path}/log-error/log-error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 单个日志文件大小上限:达到2MB时自动切割生成新文件 -->
<maxFileSize>2MB</maxFileSize>
<!-- 日志文件保留时长:仅保留最近60天的日志,超过自动删除 -->
<maxHistory>60</maxHistory>
<!-- 日志文件总大小上限:所有日志文件合计不超过5GB,防止磁盘占满 -->
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<!-- 配置日志编码器:使用全局定义的log.pattern格式输出日志 -->
<encoder>
<charset>UTF-8</charset>
<!-- 引用全局日志格式模板,保证日志格式统一 -->
<pattern>${log.pattern}</pattern>
</encoder>
<!-- 配置级别过滤器:仅筛选ERROR级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤目标级别:只处理ERROR级别日志 -->
<level>ERROR</level>
<!-- 匹配级别时操作:接收(记录)ERROR级别日志 -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配级别时操作:拒绝(不记录)非ERROR级别日志 -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 管控com.cy包下所有类的日志级别:仅输出INFO及以上级别(屏蔽DEBUG/TRACE) -->
<logger name="com.example.xys1" level="info"/>
<!-- 管控Spring框架(org.springframework包)日志级别:仅输出WARN及以上级别(屏蔽INFO/DEBUG) -->
<logger name="org.springframework" level="warn"/>
<!-- 根日志器:全局默认日志规则,级别为INFO(仅输出INFO及以上级别日志) -->
<root level="info">
<!-- 引用console Appender:全局日志默认输出到控制台(开发调试用) -->
<appender-ref ref="console"/>
<!-- 引用log-all Appender:全局INFO级别及以上级别的日志输出到log-all.log文件 -->
<appender-ref ref="log-all"/>
<!-- 引用log-error Appender:全局ERROR级别日志输出到log-error.log文件 -->
<appender-ref ref="log-error"/>
</root>
</configuration>打包
打包命令
sh
mvn -B clean package -Dmaven.test.skip=true -Dautoconfig.skip -P prod| 参数 / 命令段 | 具体含义 |
|---|---|
| mvn | Maven 的核心执行命令,用于调用 Maven 工具执行后续操作 |
| -B | 全称--batch-mode,批处理模式(非交互模式)。执行时不会等待用户输入,适合在 CI/CD 流水线、脚本中执行,避免因交互提示中断构建 |
| clean | Maven 的 clean 生命周期阶段,作用是删除项目根目录下的target文件夹(编译、打包的产物都在这个文件夹里),清理之前构建的残留文件 |
| package | Maven 的 package 生命周期阶段,作用是将项目编译后的代码打包成可分发的格式(如 JAR、WAR、EAR 包),打包产物会放在target目录下 |
| -Dmaven.test.skip=true | 通过系统属性跳过 Maven 的测试阶段:1. 不会编译测试代码2. 不会执行单元测试(如 JUnit 测试)生产打包时常用,避免测试失败导致打包中断 |
| -Dautoconfig.skip | 自定义的系统属性(非 Maven 原生),作用是跳过项目中自定义的 “自动配置检查” 逻辑(通常是项目自身定义的配置,比如配置文件校验、环境变量检查等)注:如果写成-Dautoconfig.skip=true会更规范,省略=true时 Maven 默认视为 true |
| -P prod | 激活 Maven 的prod环境 Profile(配置文件)。Profile 是 Maven 中用于区分不同环境(开发 / 测试 / 生产)配置的机制,prod通常对应生产环境的配置(如数据库地址、端口、日志级别等) |
