前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >7-SpringBoot配置-获取数据

7-SpringBoot配置-获取数据

作者头像
Devops海洋的渔夫
发布2022-03-23 15:43:55
3490
发布2022-03-23 15:43:55
举报
文章被收录于专栏:Devops专栏

7-SpringBoot配置-获取数据

在上一篇中,我们已经知道了SpringBoot的配置文件如何设置。并且知道不单单可以配置 SpringBoot 框架定义的参数,还可以设置我们自定义的参数。

那么本章节,我们就来看看如何获取配置的参数。

SpringBoot配置-获取数据

SpringBoot配置-获取数据的三种方式

  • @Value 通过注解获取配置参数
  • Evironment 通过环境变量获取参数
  • @ConfigurationProperties 通过配置注解获取参数

下面我们来逐步演示这三种方式。

演示案例

1.首先我们创建一个 Controller 用于演示
代码语言:javascript
复制
package com.lijw.springbootinit;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class HelloController {

    @RequestMapping
    public String hello(){
        return "hello SpringBoot....";
    }
}

使用浏览器访问:http://localhost:8082/hello

@Value 读取配置的演示

1.首先在配置文件 application.yml 配置自定义参数,如下:
代码语言:javascript
复制
server:
  port: 8082

name: libai

person:
  name: ${name}
  age: 35

address:
  - beijing
  - shenzhen

msg1: 'hello \n world'  # 单引忽略转义字符
msg2: "hello \n world"  # 双引识别转义字符
2.编写 Controller 使用 @Value 获取参数
代码语言:javascript
复制
package com.lijw.springbootinit;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class HelloController {

    // #获取普通配置
    @Value("${name}")
    private String name;

    // 获取对象属性
    @Value("${person.name}")
    private String name2;

    // 获取数组
    @Value("${address[0]}")
    private String address1;

    //获取纯量
    @Value("${msg1}")
    private String msg1;

    @Value("${msg2}")
    private String msg2;

    @RequestMapping
    public String hello(){
        System.out.println("name: " + name);
        System.out.println("person.name: " + name2);
        System.out.println("address1: " + address1);
        System.out.println("msg1: " + msg1);
        System.out.println("msg2: " + msg2);
        return "hello SpringBoot....";
    }
}

请求Crontroller查看打印的信息如下:

Evironment 读取配置的演示

1.使用 Evironment 获取配置参数
代码语言:javascript
复制
package com.lijw.springbootinit;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class HelloController {

    // #获取普通配置
    @Value("${name}")
    private String name;

    // 获取对象属性
    @Value("${person.name}")
    private String name2;

    // 获取数组
    @Value("${address[0]}")
    private String address1;

    //获取纯量
    @Value("${msg1}")
    private String msg1;

    @Value("${msg2}")
    private String msg2;

    @Autowired
    private Environment env;

    @RequestMapping
    public String hello(){
        System.out.println("name: " + name);
        System.out.println("person.name: " + name2);
        System.out.println("address1: " + address1);
        System.out.println("msg1: " + msg1);
        System.out.println("msg2: " + msg2);

        System.out.println("--------------------");
        System.out.println("env name: " + env.getProperty("name"));
        System.out.println("env person.name: " + env.getProperty("person.name"));
        System.out.println("env address1: " + env.getProperty("address[1]"));
        System.out.println("env msg1: " + env.getProperty("msg1"));
        System.out.println("env msg2: " + env.getProperty("msg2"));

        return "hello SpringBoot....";
    }
}

@ConfigurationProperties 读取配置的演示

注意:prefix一定要写,如果不写,则会根据属性读取配置文件中存在的key

1.创建 Persion 类,添加 @ConfigurationProperties 注解
代码语言:javascript
复制
package com.lijw.springbootinit;


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Component // 设置为组件
@ConfigurationProperties(prefix = "person") // 配置读取数据,前缀为 person
public class Person {

    private String name;
    private Integer age;
    private String[] address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String[] getAddress() {
        return address;
    }

    public void setAddress(String[] address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + Arrays.toString(address) +
                '}';
    }
}
2.在 Controller 读取person 的值
代码语言:javascript
复制
package com.lijw.springbootinit;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class HelloController {

    @Autowired
    private Person person;

    @RequestMapping
    public String hello(){

        System.out.println(person);

        return "hello SpringBoot....";
    }
}

好了,这样我们就已经通过定义 Person 类,以及配置 @ConfigurationProperties(prefix = "person") 读取到配置文件里面的数据了。

3.配置 SpringBoot Configuration Annotation Processor

但是我们可以发现编辑器上出现这个提示信息:

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

添加依赖如下:

4.删除其他配置文件,设置提示信息

此时,我们编写配置文件,发现没有提示了?

这需要我们删除其他配置文件,避免冲突,如下:

保留一个配置文件即可。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 7-SpringBoot配置-获取数据
    • SpringBoot配置-获取数据
      • SpringBoot配置-获取数据的三种方式
      • 演示案例
      • @Value 读取配置的演示
      • Evironment 读取配置的演示
      • @ConfigurationProperties 读取配置的演示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档