欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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加载配置文件的知识,希望大佬们多多指正。

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