SpringBoot配置文件之三种加载方式

最近在做一个项目中,需要通过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加载配置文件的知识,希望大佬们多多指正。

今天周五了,祝大家周末愉快~~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值