1、基本配置
环境使用的jdk8 spring boot使用的是2.7.9
2、日志管理
spring boot 默认使用的日志是log4j 如果有其他的日志依赖jar希望剔除掉,比如common-logging的依赖直接去除就行
日志的配置文件logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 说明: 1. 文件的命名和加载顺序有关 logback.xml早于application.yml加载,logback-spring.xml晚于application.yml加载
如果logback配置需要使用application.yml中的属性,需要命名为logback-spring.xml 2. logback使用application.yml中的属性
使用springProperty才可使用application.yml中的值 可以设置默认值 -->
<configuration scan="true" scanPeriod="30 seconds">
<!-- 定义日志的根目录 -->
<property name="LOG_HOME" value="logs" />
<!-- 定义日志文件名称 -->
<property name="demo1" value="demo1"/>
<property name="demo2" value="demo2"/>
<property name="demo3" value="demo3"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<!-- DEMO1日志文件输出 -->
<appender name="DEMO1_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${demo1}-%d{yyyy-MM-dd}-%i.log
</fileNamePattern>
<maxFileSize>20MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n
</pattern>
</encoder>
</appender>
<!-- DEMO2日志文件输出 -->
<appender name="DEMO2_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${demo2}-%d{yyyy-MM-dd}-%i.log
</fileNamePattern>
<maxFileSize>20MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n
</pattern>
</encoder>
</appender>
<!-- DEMO3日志文件输出 -->
<appender name="DEMO3_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${demo3}-%d{yyyy-MM-dd}-%i.log
</fileNamePattern>
<maxFileSize>20MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n
</pattern>
</encoder>
</appender>
<!-- ************************LOGGER开始****************************** -->
<!-- 全局日志记录器 -->
<!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
<!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
<!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
<!-- additivity=false 表示匹配之后,不再继续传递给其他的logger -->
<logger name="com.test.demo1" level="DEBUG" additivity="false">
<appender-ref ref="DEMO1_FILE" />
<appender-ref ref="STDOUT" />
</logger>
<logger name="com.test.demo2" level="DEBUG" additivity="false">
<appender-ref ref="DEMO2_FILE" />
<appender-ref ref="STDOUT" />
</logger>
<logger name="com.test.demo3" level="DEBUG" additivity="false">
<appender-ref ref="DEMO3_FILE" />
<appender-ref ref="STDOUT" />
</logger>
</configuration>
3、打包部署(3种方式)
1)直接打包jar
spring boot 默认的打成的是jar ,依赖和配置文件都在里面
启动脚本
#/bin/bash
project="demo"
datetime=$(date +"%Y-%m-%d_%H-%M-%S")
filename="all_${project}_${datetime}.log"
touch "logs/${filename}"
echo "-----${filename}"
nohup java -Dlogging.config=./logback.xml -jar ${project}-1.0.0-SNAPSHOT.jar > logs/${filename} 2>&1 &
关闭脚本
#!/bin/bash
project="demo"
# 设置要停止的 JAR 文件名称
JAR_FILE="${project}-1.0.0-SNAPSHOT.jar"
# 查找正在运行的 Java 进程
JAVA_PID=$(ps aux | grep ${JAR_FILE} | grep -v grep | awk '{print $2}')
# 检查是否找到了进程 ID
if [ -z "${JAVA_PID}" ]; then
echo "未找到正在运行的 ${JAR_FILE} 进程。"
else
echo "找到正在运行的 ${JAR_FILE} 进程,进程ID为 ${JAVA_PID}。"
# 停止该进程
kill ${JAVA_PID}
echo "已停止进程 ${JAVA_PID}。"
fi
2) 依赖外置
pom打包插件
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<finalName>demo</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/resources/assembly.xml</descriptor>
</descriptors>
<outputDirectory>${project.build.directory}/out/</outputDirectory>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 打包成jar文件,并指定lib文件夹以及resources资源文件夹 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.at21.demo.DemoApplication</mainClass>
<!--依赖前缀 -->
<classpathPrefix>lib/</classpathPrefix>
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<Class-Path>resources/</Class-Path>
</manifestEntries>
</archive>
<!-- jar包里面不包含配置文件-->
<excludes>
<exclude>/application.yml</exclude>
<exclude>/bin</exclude>
<exclude>/bin/*</exclude>
<exclude>/**.*</exclude>
<exclude>**/*.java</exclude>
</excludes>
</configuration>
</plugin>
assembly.xml
<assembly
xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
<id>distribution</id>
<!--输出格式 zip 最终结果生成zip -->
<formats>
<!-- <format>tar.gz</format>-->
<format>dir</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<!--设置需要输出文件 -->
<fileSets>
<fileSet>
<directory>src/main/resources/bin</directory>
<outputDirectory>/</outputDirectory>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>src/main/resources/</directory>
<outputDirectory>/resources</outputDirectory>
<includes>
<include>*.*</include>
</includes>
<excludes>
<exclude>assembly.xml</exclude>
</excludes>
<fileMode>0644</fileMode>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<!--依赖包的输出目录 -->
<outputDirectory>/lib</outputDirectory>
<scope>runtime</scope>
<excludes>
<exclude>${project.groupId}:${project.artifactId}</exclude>
</excludes>
</dependencySet>
<dependencySet>
<!--jar包的输出目录 -->
<outputDirectory>/</outputDirectory>
<includes>
<include>${project.groupId}:${project.artifactId}</include>
</includes>
</dependencySet>
</dependencySets>
</assembly>
3) 打包成war
修改pom文件将jar 改成war ,打成war之后,放到Tomcat的webapp下面即可
4、接口文档
接口使用swagger
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
swagger 配置文件
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @Author: zk
* @DateTime: 2024-06-28 18:11:00
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.test"))
.paths(PathSelectors.any())
.build();
}
}
使用swagger的接口配置
@Slf4j
@RestController
@Api(tags = "接口log3")
public class TestLog3Controller {
@GetMapping("/log3")
@ApiOperation("接口log3")
public Object test() {
log.info("-----接口log3-----");
return ResultUtils.success("/aa/test3");
}
}