spring中很多配置文件与静态文件都放在resources目录下。
资源文件
资源文件是Java代码中要使用的文件。代码在执行的时候会到指定位置去查找这些文件。若希望把其他目录中的资源也复制到classes目录中,这时就需要在Pom.xml文件中做修改了。
- 把resources目录下的xml文件配置在外(不打包进jar包);
- 把java目录下properties和xml打包进jar包;
<build>
.......
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.xml</exclude>
</excludes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
......
</build>
读取资源文件
resources目录下的文件可通过ClassPathResource来方便地读取:
// File file = ResourceUtils.getFile("classpath:test/example.txt");
ClassPathResource resPath = new ClassPathResource("test/example.txt");
InputStream input = resPath.getInputStream();
// ...
input.close();
nonFilteredFileExtension
maven打包项目的时候,可在pom.xml配置文件里可以配置对项目进行统一编码,但是部分文件可能不需要进行重新编码,例如: 证书文件;重新编码后可能导致证书不可用。
对于不能重新编码的文件,可通过nonFilteredFileExtension在pom文件中排除。
<build>
.......
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>pem</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
......
</build>
配置文件
application配置文件中配置,可方便地通过配置类进行读取(通过@Value设定映射项):
@Component
@Data
public class AppConfig {
@Value("${main.server.address}")
private String serverAddr;
@Value("${main.appkey}")
private String appKey;
}
配置文件读取顺序
SpringBoot配置文件可以放置在多种路径下,不同路径下的配置优先级有所不同。可放置目录(优先级从高到低,高优先级会覆盖低优先级):
- file:./config/ (jar包当前项目路径config目录下);
- file:./ (jar包当前项目路径下);
- classpath:/config/ (类路径config目录下);
- classpath:/ (类路径config下).
中文处理
直接从application.properites(@Value)中加载时,编码默认是ISO-8859-1;要能正确识别中文,需要:
- 自定义.properties文件(非application.properites),读取时可设定编码格式(@PropertySource(encoding = “UTF-8”));
- 使用.yml文件(默认使用UTF-8加载);
以resources下test…properites为例:
test.url=https://test.com/api
test.appId=abcd1234
text.name=中文乱码测试
映射类:
@Component
@PropertySource(value = "classpath:/test.properties", encoding = "UTF-8")
@ConfigurationProperties(prefix = "test")
@Data
public class TestConfig {
private String url;
private String appId;
private String name;
}