方式一、Spring中通过@PropertySource({"classpath:/config/supportVersion.properties"})
来指定文件后,再通过@Value("${versions}")
的方式来进行注入。
方式二、通过Properties类来加载文件后,再通过该类的方法来进行获取。
但是,存在两个问题,方式一的话,如果说我们的配置文件增加了字段之后,我们还需要手动再添加一个@Value把新的值也注入进来,对于一些需要更新的配置文件来说,比较麻烦。
方式二的话,也能实现这种可变的Properties文件,但是,如果我们项目时打成jar包,并且该文件存在于jar包的话,获取文件路径也是比较麻烦的一一件事情。
那么如果遇到文件存在于jar包,并且内容可变的情况,我们怎么让配置文件注入呢?
类似于下面这个配置文件,a是大版本,a1是小版本,如果说需要增加一个大版本的话,就需要手动再添加一个@value去注入,比较麻烦
versions =a,b,c,d
a = a1,a2,....
b = b1,b2,...
c = c1,c2,...
...
我们可以用Environment来实现
@Component
@PropertySource({"classpath:/config/supportVersion.properties"})
public class SupportVersionConfig {
@Value("${versions}")
private String versions;
@Autowired
private Environment environment;
public Map getVersions(){
HashMap<String, List<String>> map = new HashMap<>();
List<String> versionList = Arrays.asList(versions.split(","));
for (String version : versionList) {
map.put(version, Arrays.asList(environment.getProperty(version).split(",")));
}
System.out.println("map:" + map);
return map;
}
}