描述
打包时把resource/activity-config.json文件分离到jar包同级目录下config/activity-config.json后,通过@Value("classpath:activity-config.json") private Resource activityConfigRes;方式,获取不到json里面的内容。
解决办法:不用注解,改用System.getProperty("user.dir") + "/config/activity-config.json";这种方式读取配置文件中的内容。
String filePath = System.getProperty("user.dir")
+ "/config/activity-config.json";
InputStream in = new BufferedInputStream(new FileInputStream(filePath));
String areaData = IOUtils.toString(in, Charset.forName("UTF-8"));
ObjectMapper mapper = new ObjectMapper();
ActivityConfig config = mapper.readValue(areaData, ActivityConfig.class);
如何加载jar包外部json配置文件实现步骤
第一步
在resource目录下创建json配置文件activity-config.json

第二步
打包时从jar包中分离出配置文件到与jar包同级的文件夹config下。
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!--跳过测试-->
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<!--指定启动类-->
<mainClass>**.**.Application</mainClass>
</manifest>
</archive>
<!--指定classes目录-->
<!--<classesDirectory>src/main/java</classesDirectory>-->
<outputDirectory>${project.package.directory}/${project.artifactId}</outputDirectory>
<!--排除classes目录下不需要打包的文件-->
<excludes>
<!--<exclude>META-INF/**</exclude>-->
<exclude>application.properties</exclude>
<exclude>*.json</exclude>
<exclude>logback-spring.xml</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>compile</includeScope>
<!--复制依赖jar到指令目录-->
<outputDirectory>${project.package.directory}/${project.artifactId}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!--复制资源文件到指定目录-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.package.directory}/${project.artifactId}/config/</outputDirectory>
<resources>
<resource>
<!--资源文件的目录-->
<directory>src/main/resources/</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
第三步
读取配置文件内容,转换成对象
try {
String filePath = System.getProperty("user.dir")
+ "/config/activity-config.json";
InputStream in = new BufferedInputStream(new FileInputStream(filePath));
String areaData = IOUtils.toString(in, Charset.forName("UTF-8"));
logger.info("读取活动配置文件:" + areaData);
ObjectMapper mapper = new ObjectMapper();
ActivityConfig config = mapper.readValue(areaData, ActivityConfig.class);
} catch (Exception e) {
e.printStackTrace();
}
如果要用到IOUtils,需要在pom文件中导入下面的配置。
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
本文介绍了当Spring Boot应用打包后,如何处理activity-config.json配置文件不在jar包内的情况。通过手动分离配置文件到jar同级目录,并提供了一种非注解方式读取json内容的方法,包括在指定目录创建json文件、打包时分离配置文件及程序中读取配置文件内容的步骤。
1万+

被折叠的 条评论
为什么被折叠?



