SpringBoot配置文件之三种加载方式
程序员文章站
2022-05-02 11:41:25
...
最近在做一个项目中,需要通过java连接ssh获取linux服务器中指定录下的文件中的一些内容,需要用到一些服务器和路径的配置,所以在这里总结一下加载配置文件的方式:
1. 第一种 application.properties
canal.monitor.exe.command=echo `grep 'canal.instance.master.address' instance.properties | cut -d = -f 2`;echo `grep 'canal.instance.defaultDatabaseName' instance.properties | cut -d = -f 2`;echo `grep 'canal.instance.filter.regex' instance.properties | cut -d = -f 2`;cat meta.dat | awk -F '[:,"}]' '{for(i=1;i<=NF;i++){if($i == "timestamp") print $(i+2)}}'
用@Value的方式取值:
@Value("${canal.monitor.exe.command}")
private String exeCmd;
2. 第二种 自定义的配置文件 projectPath.properties
canal.config.172_16_116_44.ent_advertise_statistics=/home/eagle/canal/canal-1.1.2/conf/instance_ent_advertise_statistics
canal.config.172_16_116_134.callcenter=/home/spark/canal/canal-1.1.2/conf/instance_callcenter
canal.config.172_16_116_134.crm_order=/home/spark/canal/canal-1.1.2/conf/instance_crm_order
canal.config.172_16_116_134.deposit=/home/spark/canal/canal-1.1.2/conf/instance_deposit
canal.config.172_16_116_134.ent=/home/spark/canal/canal-1.1.2/conf/instance_ent
canal.config.172_16_116_134.ent_advertise=/home/spark/canal/canal-1.1.2/conf/instance_ent_advertise
canal.config.172_16_116_134.ent_advertise_data=/home/spark/canal/canal-1.1.2/conf/instance_ent_advertise_data
canal.config.172_16_116_134.exercise=/home/spark/canal/canal-1.1.2/conf/instance_exercise
canal.config.172_16_116_134.greatbear=/home/spark/canal/canal-1.1.2/conf/instance_greatbear
canal.config.172_16_116_134.greatbear_im=/home/spark/canal/canal-1.1.2/conf/instance_greatbear_im
canal.config.172_16_116_134.hadiths=/home/spark/canal/canal-1.1.2/conf/instance_hadiths
canal.config.172_16_116_134.ndragnet=/home/spark/canal/canal-1.1.2/conf/instance_ndragnet
canal.config.172_16_116_134.ndragnet_wechat=/home/spark/canal/canal-1.1.2/conf/instance_ndragnet_wechat
canal.config.172_16_116_134.refund=/home/spark/canal/canal-1.1.2/conf/instance_refund
canal.config.172_16_116_134.social=/home/spark/canal/canal-1.1.2/conf/instance_social
canal.config.172_16_116_134.social_stat=/home/spark/canal/canal-1.1.2/conf/instance_social_stat
canal.config.172_16_116_134.sunlandsim_online=/home/spark/canal/canal-1.1.2/conf/instance_sunlandsim_online
canal.config.172_16_116_134.tiku=/home/spark/canal/canal-1.1.2/conf/instance_tiku
canal.config.172_16_116_134.ucenter_statistic_and_log=/home/spark/canal/canal-1.1.2/conf/instance_ucenter_statistic_and_log
canal.config.172_16_116_134.workorder=/home/spark/canal/canal-1.1.2/conf/instance_workorder
这种配置很常见,就是我们并不知道配置文件有多少,比如随着业务的增加,我们可能需要新增业务的服务器和所在路径地址,此时我们需要用Map把这些文件全部读进来:
/**
* @author ZhàoCèShèng
*/
@Data
@Component
@ConfigurationProperties(prefix = "canal") // canal就是我们配置文件的前缀
@PropertySource("classpath:projectPath.properties") // classpath就是resources目录(target/classes/目录)
public class ProjectPathConfig {
private Map<String, String> config = new HashMap<>(); // 这里需要注意,配置文件中我们key的前缀是canal.config, 这里canal的作用说过了,config的作用是作为Map的引用变量使用, 此处一定要对应起来否则配置文件不能映射到当前Map中
public Map<String, String> getConfigMap() {
return config;
}
}
3. 第三种 自定义的配置文件 serverInfo.properties
172_16_116_44.ip=172.16.116.44
172_16_116_44.username=*****
172_16_116_44.password=***********
172_16_116_44.port=*****
172_16_116_134.ip=172.16.116.134
172_16_116_134.username=*****
172_16_116_134.password=******
172_16_116_134.port=*****
这种服务器的配置也很常见,比如linux服务器或者mysql连接等等,key的后缀都是一样的:ip地址、用户名、密码、端口等等,我们读取的方式使用java自带的ResourceBundle:
@Autowired
private ProjectPathConfig config;
// 获取src根目录下的serverInfo.properties文件, 这里需要注意的是serverInfo.properties必须在src根目录下, 即resources目录下
ResourceBundle rb = ResourceBundle.getBundle("serverInfo");
Map<String, String> configMap = config.getConfigMap(); // 举个例子:Map中存的元素的其中之一是: {172_16_116_44.ent_advertise_statistics=/home/eagle/canal/canal-1.1.2/conf/instance_ent_advertise_statistics}
for (Map.Entry<String, String> entry : configMap.entrySet()) {
String key = entry.getKey(); // 172_16_116_44.ent_advertise_statistics
String path = entry.getValue(); // /home/eagle/canal/canal-1.1.2/conf/instance_ent_advertise_statistics
String[] split = key.split("\\."); // 172_16_116_44.ent_advertise_statistics按照点号分割
String ipPre = split[0]; // 172_16_116_44
String ip = rb.getString(ipPre + ".ip"); // 172_16_116_44.ip
String username = rb.getString(ipPre + ".username"); // 172_16_116_44.username
String password = rb.getString(ipPre + ".password"); // 172_16_116_44.password
String port = rb.getString(ipPre + ".port"); // 172_16_116_44.port
// 其他逻辑
...
}
4. 以上是我在本次项目中学到的一些关于springboot加载配置文件的知识,希望大佬们多多指正。
今天周五了,祝大家周末愉快~~~
推荐阅读
-
js前端实现图片懒加载(lazyload)的两种方式
-
jquery实现异步加载图片(懒加载图片一种方式)
-
c#两种方式调用google地球,调用COM API以及调用GEPLUGIN 与js交互,加载kml文件,dae文件。将二维高德地图覆盖到到三维谷歌地球表面。
-
详解bootstrap的modal-remote两种加载方式【强化】
-
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
-
手把手教你Dubbo与SpringBoot常用两种方式整合
-
JavaScript判断图片是否加载完成的三种方式
-
(仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画
-
SpringBoot加载子模块配置文件的方法
-
JS异步加载的三种实现方式