zoukankan      html  css  js  c++  java
  • 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加载,想引入的属性就不会被引入了。

  • 相关阅读:
    学习篇之函数就是对象
    @Controller和@RestController的区别
    maven 阿里云 国内镜像 中央仓库
    IntelliJ IDEA使用教程
    解决“无法从套接字读取更多数据”
    at java.util.Arrays.copyOfRange(Arrays.java:3209)导致的java.lang.OutOfMemoryError: Java heap space 错误的解决办法
    maven中引入ojdbc包
    Oralce增加表空间
    Web服务框架发展与REST服务开发
    Oralce解锁表
  • 原文地址:https://www.cnblogs.com/wanghq1994/p/12118797.html
Copyright © 2011-2022 走看看