【记录】springboot使用@PropertySource读取资源文件的一些记录

几个月之前,领导给个需求,需要一个记录业务映射的资源文件,然后在代码中读取这个资源文件进行使用,将来不同的项目会对这个映射进行不同的修改。

百度之后得到了使用@PropertySource来读取资源文件的方法,于是第一版代码出现:

@Data
@Configuration
@PropertySource(value = {"classpath:mymapping.properties"}, encoding = "utf-8", ignoreResourceNotFound = true)
@ConfigurationProperties(prefix = "mymap")
public class MyMappingConfig {

    private Map<String, String> userMap = new HashMap<>();
}

配置文件如下:

mymap.userMap .wang=www
mymap.userMap .li=lll
mymap.userMap .zhang=zzz

@Data:插件lombok注解,自动弄上get和set方法
@Configuration:注册为spring组件
@PropertySource:记录读取资源文件,value表示读取classpath下(即resources文件夹下)名为mymapping.properties的资源文件,ignoreResourceNotFound设置为true,表示可以跳过资源文件不存在的情况,不设置这个的话,启动会报错找不到资源文件。
@ConfigurationProperties:设置prefix = "mymap"为前缀,读取前缀为mymap的内容。

然后定义和配置文件中相同的变量名userMap,这样后面设置的wang=www等三个内容就会被加载进这个map中。
使用时直接注入,然后用get方法获得这个map就行了:

@Autowired
private MyMappingConfig myMappingConfig ;

这版代码使用了几个月,后面需要给其他项目上线的时候出了问题:因为这个配置中读取资源文件的路径写死为jar包下的classpath,所以每次对资源文件进行修改时都要在jar包里修改,不太方便。于是第二版代码诞生:

@Data
@Configuration
@PropertySource(value = {"classpath:mymapping.properties", "file:${config.path}//mymapping.properties"}, encoding = "utf-8", ignoreResourceNotFound = true)
@ConfigurationProperties(prefix = "mymap")
public class MyMappingConfig {

    private Map<String, String> userMap = new HashMap<>();
}

在application.properties中增加配置:

#mapping映射文件存放路径
config.path=C:/

增加一个配置,并且修改了@PropertySource的写法,增加了一个"file:${config.path}//mymapping.properties"的路径,表示读取C盘根目录下面的该文件。
实际操作的时候,后面配置的读取的文件会覆盖先配置的读取的文件中key相同的内容。
比如classpath下配置的是wang=www,C盘下配置的是wang=ggg,那么读进来的是后面的wang=ggg,key相同的情况下,后面的会覆盖前面的。
这样就不用每次都到jar包下进行文件的修改了。

记录一下

你可能感兴趣的:(java)