Skip to content

进入阿里云项目初始化网址下载项目初始化代码

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.8

spring-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  # 项目名称

不同环境使用不同的配置

  1. 在/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> 标签含义

配置段过滤开关匹配文件核心效果
第一个 resourcetrueapplication.yml开启过滤:打包时解析 application.yml 中的 Maven 变量(如 @spring.profiles.active@),替换为 pom.xml 中 spring.profiles.active 的实际值(如 devOfXys/dev/test/prod)。
第二个 resourcefalseapplication-.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=test

logback日志配置 (多个环境都一致 我只说一个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
参数 / 命令段具体含义
mvnMaven 的核心执行命令,用于调用 Maven 工具执行后续操作
-B全称--batch-mode,批处理模式(非交互模式)。执行时不会等待用户输入,适合在 CI/CD 流水线、脚本中执行,避免因交互提示中断构建
cleanMaven 的 clean 生命周期阶段,作用是删除项目根目录下的target文件夹(编译、打包的产物都在这个文件夹里),清理之前构建的残留文件
packageMaven 的 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通常对应生产环境的配置(如数据库地址、端口、日志级别等)