springboot-加载配置文件-多种类型

       在咱们开发的不少项目当中,多多少少都会有一些特别的信息,这些信息不会写到数据库,而是配置在文件里面。这类数据在被应用初始化完成以后,会加载到程序中,咱们能够在程序的各个地方引用,来进行与业务相关联的其余操做。
今天要说的就是如何加载这些信息,咱们以springboot项目为例,分别加载三种结构数据:普通属性、对象、数组。java

首先,建立一个普通的springboot项目spring

在该项目中建立了两个配置文件 (后缀名分别为:properties、yaml;只要名称为application,都会被加载),分别用三个类来装填;数据库

1、普通属性加载数组

    1.配置文件:springboot

    2.java代码:app

package com.knowledge.knowledgeinboot.config.InitArgs;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @Author chengxp
 * @Description 一个或多个分开的属性
 */
@Component("singleProperty")
public class SingleProperty {

    private static String udpAddressIp;

    private static int udpAddressPort;

    /**
     * get 方法使用静态,以便于获取
     * @return
     */
    public static String getUdpAddressIp() {
        return udpAddressIp;
    }

    /**
     * 1.若将该注解加到静态变量上,不会被加载;
     * 2.访问修饰符修饰为私有便可,spring在加载时,能找获得;
     * @param udpAddressIp
     */
    @Value("${udpAddress.ip}")
    private void setUdpAddressIp(String udpAddressIp) {
        this.udpAddressIp = udpAddressIp;
    }

    /**
     * get 方法使用静态,以便于获取
     * @return
     */
    public static int getUdpAddressPort() {
        return udpAddressPort;
    }

    //若将该注解加到静态变量上,不会被加载
    @Value("${udpAddress.port}")
    private void setUdpAddressPort(int udpAddressPort) {
        this.udpAddressPort = udpAddressPort;
    }
}

2、对象加载ide

    1.配置文件:this

    2.java代码:code

package com.knowledge.knowledgeinboot.config.InitArgs;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * @Author chengxp
 * @Description 加载配置文件中配置的对象数据
 */
@Configuration
@ConfigurationProperties("udp-address")
public class ObjProperty {

    private static String ip;
    private static int port;
    private static String desc;

    public void setIp(String ip) {
        this.ip = ip;
    }

    private void setPort(int port) {
        this.port = port;
    }

    private void setDesc(String desc) {
        this.desc = desc;
    }

    public static String getIp() {
        return ip;
    }

    public static int getPort() {
        return port;
    }

    public static String getDesc() {
        return desc;
    }
}

3、数组加载对象

    1.配置文件:

    2.java代码:

package com.knowledge.knowledgeinboot.config.InitArgs;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;

/**
 * @Author chengxp
 * @Description 数组属性,加载在在yaml中的多个值.
 */
@Configuration
@ConfigurationProperties("device-arr")
public class ArrayProperty {

    private static List<Device> devices;

    public static List<Device> getDevices() {
        return devices;
    }

    /**
     * 这里不能修饰为 私有的,私有的没法完成数据注入
     * @param devices
     */
    public void setDevices(List<Device> devices) {
        this.devices = devices;
    }

    @Data
    public static class Device {

        private String ip;
        private String port;
        private String type;
        private String position;
    }
}

4、最后再建立一个启动类,来输出以上配置

package com.knowledge.knowledgeinboot.listener;

import com.knowledge.knowledgeinboot.config.InitArgs.ArrayProperty;
import com.knowledge.knowledgeinboot.config.InitArgs.ObjProperty;
import com.knowledge.knowledgeinboot.config.InitArgs.SingleProperty;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @Author chengxp
 * @Description
 */
@Slf4j
@Component
public class SpringInitListener implements ApplicationListener<ContextRefreshedEvent> {
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {

        String udpIp = SingleProperty.getUdpAddressIp();
        int udpPort = SingleProperty.getUdpAddressPort();

        //单个属性输出
        log.info("SingleProperty:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
        log.info("init args udpIp: " + udpIp);
        log.info("init args udpPort: " + udpPort);
        log.info("---------------------------------------------");

        //对象输出
        log.info("ObjProperty:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
        log.info("init args udpIp: " + ObjProperty.getIp());
        log.info("init args udpPort: " + ObjProperty.getPort());
        log.info("init args desc: " + ObjProperty.getDesc());
        log.info("---------------------------------------------");

        //数组输出
        log.info("Array:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
        List<ArrayProperty.Device> objPropertys = ArrayProperty.getDevices();
        for(int i = 0;i < objPropertys.size(); i++){

            log.info("objPropertys index: " + i);
            log.info("init args ip: " + objPropertys.get(i).getIp());
            log.info("init args port: " + objPropertys.get(i).getPort());
            log.info("init args type: " + objPropertys.get(i).getType());
            log.info("init args position: " + objPropertys.get(i).getPosition());
            log.info("---------------------------------------------");
        }
    }
}

输出结果:

相关文章
相关标签/搜索