zoukankan      html  css  js  c++  java
  • springboot ConfigurationProperties

    springboot可以使用ConfigurationProperties将配置映射为对象,假设有一个服务器列表的配置,服务器拥有ip,端口,名字三个属性,配置文件如下:

    servers.ips[0]=127.0.0.1
    servers.ports[0]=9090
    servers.names[0]=Server1
    servers.ips[1]=127.0.0.2
    servers.ports[1]=9092
    servers.names[1]=Server2

    可以创建映射对象并添加@ConfigurationProperties注解与配置文件相关联

    @ConfigurationProperties("servers")
    public class Servers {
        private List<String> ips;
        private List<Integer> ports;
        private List<String> names;
    
        public void setIps(List<String> ips) {
            if (null != this.ips) {
                return;
            }
            this.ips = ips;
        }
    
        public void setPorts(List<Integer> ports) {
            if (null != this.ports) {
                return;
            }
            this.ports = ports;
        }
    
        public void setNames(List<String> names) {
            if (null != this.names) {
                return;
            }
            this.names = names;
        }
    
        public String getIp(int index) {
            return ips.get(index);
        }
    
        public Integer getPort(int index) {
            return ports.get(index);
        }
    
        public String getName(int index) {
            return names.get(index);
        }
    
        public int count() {
            return ips.size();
        }
    }

    在数据不为空时,不允许set数据,并且不提供getter方法以防止对数据进行修改

    为了使配置映射可以被扫描到,需要在@Configuration所注解的类中,添加@EnableConfigurationProperties(Servers.class),可以直接使用@Autowired引用配置类

    代码示例如下:

    @RestController
    @EnableAutoConfiguration
    @Configuration(proxyBeanMethods = false)
    @EnableConfigurationProperties(Servers.class)
    public class HelloWorld {
    
        @Autowired
        private Servers servers;
    
        @RequestMapping("/")
        String listServers() {
            int count = servers.count();
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < count; i++) {
                sb
                        .append(servers.getIp(i))
                        .append(" ~ ")
                        .append(servers.getPort(i))
                        .append(" ~ ")
                        .append(servers.getName(i))
                        .append("<br/>");
            }
            return sb.toString();
        }
    
        public static void main(String[] args) {
            SpringApplication app = new SpringApplication(HelloWorld.class);
            app.run(args);
        }
    }

    访问http://localhost:8080/可以看到所有的服务器数据:

    127.0.0.1 ~ 9090 ~ Server1
    127.0.0.2 ~ 9092 ~ Server2
  • 相关阅读:
    css选择器解析规则
    swiper轮播图包含视频或图片
    css实现文字选中变色
    swiper鼠标滚轮事件
    C语言中,关于相除的问题
    输入测试字符型数据的组数,再输入字符型数据,排坑
    C语言中,字符型数字与常数型数字的加减实现
    C语言的指针用法:输入一堆字符,把非字母的删去。
    C语言中倒序输出你输入的数。
    C语言中,嵌套的if语句的一些经验...
  • 原文地址:https://www.cnblogs.com/yytxdy/p/12759788.html
Copyright © 2011-2022 走看看