一.简介
构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件。
src/main/java这个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes目录中。
但是src/main/resouces这个目录中的其他文件都会被忽略掉,这个目录中的文件会被复制到target/classes目录中。
打包插件默认会把target/classes这个目录中的所有内容打入到jar包或者war包中。
二.实现效果
把配置文件放在指定位置
启动时修改指定位置的配置文件
重启项目配置文件就可以生效。
三.log4j2为例实现步骤
(1)防止启动时使用了打包到jar包的配置文件 在打包时指定 不把log4j2配置文件打包到jar
<build>
<finalName>api</finalName>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<excludes>
<exclude>log4j2.xml</exclude>
</excludes>
</resource>
</resources>
</build>
(2)将log4j2配置文件放在指定位置
<build>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>copy-res</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<!-- 指定需要处理的资源 -->
<includes>
<include>log4j2.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
</execution>
<!-- <execution> -->
<!-- 处理多个资源 -->
<!-- </execution> -->
</executions>
</plugin>
</build>
(3)启动脚本 使用-Dlog4j.configurationFile=./log4j2.xml设置找配置文件的位置
nohup java -XX:+UseConcMarkSweepGC -Xmx2048m -Xms1024m -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:./logs/java_gc.log -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs/ -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Dlog4j.configurationFile=./log4j2.xml -jar api.jar --spring.profiles.active=${confName} --isJar=true > nohup.out & > /dev/null 2>&1 &
网上的资料显示 启动时会默认找jar包的/classes目录中找配置文件 找不到会找jar包同级目录下的配置文件 我把配置放在jar同级目录会报错
ERROR StatusLogger No log4j2 configuration file found.
Using default configuration: logging only errors to the console.
需要使用-Dlog4j.configurationFile=./log4j2.xml设置找配置文件的位置 才能正确生效。已经指定配置加载位置,可以不要步骤(1)
(4)启动命令直接使用nohup java -cp 代替 nohup java -jar 。使用-cp 和 -classpath 一样,用来统一指定配置路径,打包时先排除默认的配置文件 不然两个配置文件 可能会随机加载一个