目录:
Spring boot 项目搭建
1. 通过maven构建项目
1.1 引入spring-boot-starter-parent
通过Spring parent 统一管理Spring版本,将此pom文件作为父类文件进行子项的依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
<relativePath/>
</parent>
<!--项目信息-->
<groupId>cn.test.base</groupId>
<artifactId>test-base</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
1.2 引用需要的Spring相关依赖
eg:
<!--websocket-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<!--test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
通过spring boot parent进行统一的版本控制不用手写版本以避免依赖冲突
1.3 对于非spring的依赖进行统一的版本控制
properties 例如 :
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>1.8</java.version>
<maven-jar-plugin.version>3.1.0</maven-jar-plugin.version>
<jackson.version>2.10.1</jackson.version>
<spring.version>5.0.16.RELEASE</spring.version>
<fastjson2.version>2.0.52</fastjson2.version>
<jedis.version>2.9.3</jedis.version>
</properties>
通过 ${ } 进行引用
${java.version}
1.4 增加打包配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<addResources>true</addResources>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version> <!-- 使用最新的版本 -->
<executions>
<execution>
<id>move-jar-to-target-directory</id>
<phase>package</phase> <!-- 在package阶段执行 -->
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<!--此处可以做一些关于打包的操作,例如移动包到其他位置-->
<copy file="${project.build.directory}/${project.build.finalName}.${project.packaging}"
tofile="${project.basedir}/package/testApplication.jar"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
1.5 创建子项目
eg: 创建common项目
<parent>
<artifactId>test-base</artifactId>
<groupId>cn.test.base</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<!--项目信息-->
<groupId>cn.test.common</groupId>
<artifactId>test-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--如果其他子项目中没有用到通用的依赖,那么下面可以单独对common项目进行添加引用依赖-->
<properties>
<easyexcel.version>3.1.1</zzz.version>
</properties>
<!--例如增加easyexcel依赖-->
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel.version}</version>
</dependency>
</dependencies>
在父项目添加modules模块,进行子项目的加载
<modules>
<module>test-common</module>
</modules>
1.6 配置项(优先级顺序从高到低)
- 命令行参数 (@SpringBootApplication 的 args 参数)
- JVM 参数 (-Dproperty=value)
- Spring Boot 的默认属性
- bootstrap.properties 或 bootstrap.yml
- application.properties 或 application.yml
- configmap 和 secrets (Kubernetes)
- @ConfigurationProperties 注解的类
- 环境变量 (spring.config.location 等)
- 随机值 (@RandomValuePropertySource 等)
编写yml配置文件:
server:
port: 8900
servlet:
encoding:
charset: UTF-8
force: true
enabled: true
logging:
level:
com.example: DEBUG
config: classpath:logback.xml
serial-port:
baud-rate: 9600
read-timeout: 5000
main-thread:
read-timeout: 60000
1.7 日志收集
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_HOME" value="./logs"/>
<property name="LOG_NAME" value="test-common"/>
<!--控制台-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{MM-dd HH:mm:ss.SSS} | %thread |-%-5level %logger{36}:%L - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
</appender>
<!-- 日志文件 -->
<appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/${LOG_NAME}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/${LOG_NAME}-%i.log</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{MM-dd HH:mm:ss.SSS} |-%-5level %logger{36}:%L - %m%n</pattern>
</layout>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="LOGFILE" />
</root>
</configuration>
2.依赖冲突处理
参考博客: https://blog.csdn.net/HcJsJqJSSM/article/details/84337870
此博客已经写的比较详细,如果没有安装maven help也可以通过idea自带的依赖分析进行搜索修改
通过统一的spring parent进行管理理论上可以解决大部分依赖冲突问题,此问题更多出现的情况是需要进行升级部分有严重漏洞的spring相关依赖版本导致的依赖冲突。