• spring boot自定义配置


    spring boot配置文件中除了可以配置约定好的属性外,我们也可以在里面添加自己需要的配置信息。主要有两种方式。

    @Value注解

    使用@Value注解是用于逐个的读取自定义的配置,你想用哪个就将所需要的配置引进去。下面举一个例子。

    我们首先在配置文件中添加我们自己的配置。

    #自定义配置
    boot.name=springboot
    boot.location=北京

    然后再新建一个controller来用于访问和读取配置文件中的值。

    package com.example.demo.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
    * @Description: 使用@Value注解读取自定义配置
    * @Author:      haoqiangwang3
    * @CreateDate:  2019/12/30
    */
    @RestController
    public class ConfigInfoController {
    
        @Value("${boot.name}")
        private String name;
    
        @Value("${boot.location}")
        private String location;
    
        @RequestMapping("/config")
        public String config(){
            return "name=" + name + ";location=" + location;
        }
    }

    最后启动项目,并在浏览器中访问http://127.0.0.1:8088/demo/config,结果响应为:

     如果中文响应乱码,需要设置下idea的文件编码为UTF-8。

     @ConfigurationProperties

    次注解用于将整个文件映射成一个对象。我们可以新建一个对象,用于接收配置文件里面的信息。如下:

    package com.example.demo.config;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    @Component
    @ConfigurationProperties(prefix = "boot")
    public class ConfigBo {
        private String name;
    
        private String location;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getLocation() {
            return location;
        }
    
        public void setLocation(String location) {
            this.location = location;
        }
    }

    里面的@ConfigurationProperties中使用的前缀prefix属性,应为我们自定义的配置都是boot开头的,所以根据此特征,将前缀设置成boot。我们这个类还需要加@Component注解,把此类注入到spring容器中,才能使用@ConfigurationProperties功能。

    然后我们修改controller类,将属性配置的实体引进去。

    package com.example.demo.controller;
    
    import com.example.demo.config.ConfigBo;

    import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /** * @Description: 使用注解读取自定义配置 * @Author: haoqiangwang3 * @CreateDate: 2019/12/30 */ @RestController public class ConfigInfoController { @Resource private ConfigBo configBo; @RequestMapping("/configBo") public String configBo(){ return "name=" + configBo.getName() + ";location=" + configBo.getLocation(); } }

    在浏览器中访问http://127.0.0.1:8088/demo/configBo,得到的效果如下:

     可以发现,这两种注解方式得到的效果是相同的。

    注意:不要对同一个配置信息,引入两次。因为spring的加载机制是采用反射扫描的发现机制,在探测到Spring容器中有一个org.springframework.beans.factory.config.PropertyPlaceholderConfigurer的Bean就会停止对剩余PropertyPlaceholderConfigurer的扫描(Spring 3.1已经使用PropertySourcesPlaceholderConfigurer替代PropertyPlaceholderConfigurer了),所以根据加载的顺序,配置的第二个property-placeholder就被没有被spring加载,想引入的属性就不会被引入了。

  • 相关阅读:
    SQLZOO:SELECT from WORLD Tutorial
    Spyder——小技巧+快捷键
    JDK国内镜像
    debian 安装 plymouth 美化开机动画
    docker 国内镜像加速
    有关npm镜像加速的问题 yarn nvm yrm
    调整vscode工具栏侧边栏字体大小
    github的淘宝代理?
    fcitx5 主题设置
    debian testing安装qemu-kvm和virt-manager
  • 原文地址:https://www.cnblogs.com/wanghq1994/p/12118797.html
Copyright © 2020-2023  润新知