Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >7-SpringBoot配置-获取数据

7-SpringBoot配置-获取数据

作者头像
Devops海洋的渔夫
发布于 2022-03-23 07:43:55
发布于 2022-03-23 07:43:55
37200
代码可运行
举报
文章被收录于专栏:Devops专栏Devops专栏
运行总次数:0
代码可运行

7-SpringBoot配置-获取数据

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

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

SpringBoot配置-获取数据

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

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

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

演示案例

1.首先我们创建一个 Controller 用于演示
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
<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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot获取配置中的数据
简介:本文通过案例讲解SpringBoot如何yaml,yml,properties中的数据。
GeekLiHua
2025/01/21
3020
SpringBoot获取配置中的数据
Spring Boot进阶教程——注解大全(建议收藏!)
在Spring Core注解中,主要讨论Spring DI和Spring IOC中使用的Spring核心注释。众所周知,Spring DI和Spring IOC是Spring框架的核心概念。所以介绍org.springframework.beans.factory.annotation 和org.springframework.context.annotation 包中的注解。这两个包中注解有很多,就抽取其中的15个注解。
烂猪皮
2021/01/13
2.5K0
Spring Boot进阶教程——注解大全(建议收藏!)
SpringBoot整合RabbitMQ(九)
在前面的系列文章中详细的介绍了RabbitMQ的技术栈知识,本文章主要详细的介绍SpringBoot整合RabbitMQ。
无涯WuYa
2022/04/27
4160
SpringBoot整合RabbitMQ(九)
17-SpringBoot自动配置-@Import详解
@Enable*底层依赖于@Import注解导入一些类,使用@Import导入的类会被Spring加载到 IOC 容器中。
Devops海洋的渔夫
2022/03/23
3110
17-SpringBoot自动配置-@Import详解
springboot使用rabbitMQ(带回调)
配置文件2:RabbitConstants(主要用于用户名、密码等值从配置文件获取,也可以用@Value方式)
小尘哥
2018/08/15
9730
springboot使用rabbitMQ(带回调)
SpringBoot 配置文件详解
配置文件的作用 : SpringBoot底层都给我们配置好了,但有时候我们需要修改一些默认配置。
jwangkun
2021/12/23
2890
SpringBoot中Spring IOC的运用
上一篇: 《Spring&SpringMVC&SpringBoot》 https://truedei.blog.csdn.net/article/details/115216492
手撕代码八百里
2021/04/20
5230
SpringBoot中Spring IOC的运用
14-SpringBoot自动配置-Condition
我们在前面的篇章基本上已经熟悉了怎么使用SpringBoot,但是呢。对于SpringBoot的一些高级的特性 或者 底层原理还是不是很清楚。
Devops海洋的渔夫
2022/03/23
5700
14-SpringBoot自动配置-Condition
SpringBoot2基础入门 学习(一)
2014 ,martin fowler马丁·福勒 提出的:微服务架构风格 常听的:分布式微服务
Java_慈祥
2024/08/06
1930
SpringBoot2基础入门 学习(一)
第二章,springboot 配置,yaml 语法[通俗易懂]
首先看上图,我们在使用spring initializer快速创建一个项目的后,会自动生成上面的资源文件夹,••••••••
全栈程序员站长
2022/08/09
3350
第二章,springboot 配置,yaml 语法[通俗易懂]
springboot11、redis
资源地址:redis服务(windows版)&amp;redis可视化工具.rar_asp.netcoreredis-.Net文档类资源-CSDN下载
红目香薰
2022/11/30
1990
springboot11、redis
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、
Environment是用来读取应用程序运行时的环境变量的类,可以通过key-value的方式读取application.properties和系统环境变量,命令行输入参数,系统属性等.
刘大猫
2024/11/05
1.8K0
【愚公系列】2023年10月 Java教学课程 163-SpringBoot概述和基本使用
Spring Boot是一个开源的Java框架,用于快速构建基于Spring框架的Web应用程序和微服务。它采用了约定优于配置的原则,提供了自动配置和快速开发功能,使开发人员可以专注于业务逻辑而不是框架配置。Spring Boot还提供了丰富的功能和扩展,例如集成了Spring框架中的各种组件和模块,支持多种数据源、安全性、日志和监控等。Spring Boot还允许开发人员快速构建可部署的独立应用程序,并支持云计算平台和容器化部署。
愚公搬代码
2025/05/28
500
【愚公系列】2023年10月 Java教学课程 163-SpringBoot概述和基本使用
高级框架-SpringBoot【悟空教程】
Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品。无需开发重量级的 Enterprise JavaBean(EJB),Spring 为企业级 Java 开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的 Java 对象(Plain Old Java Object,POJO)实现了 EJB 的功能。
Java帮帮
2018/08/16
2.6K0
高级框架-SpringBoot【悟空教程】
SpringBoot--yml/yaml配置文件
SpringBoot除了properties配置文件,还可以使用yaml配置文件,更为直观。
花猪
2022/02/17
8380
SpringBoot--yml/yaml配置文件
SpringBoot---入门和配置
命令行使用java -jar的命令执行这个jar包即可,记住先要来到当前jar包对应的目录,通过cd 目录路径–》来到对应目录
大忽悠爱学习
2021/11/15
9740
SpringBoot集成JWT详细步骤
JSON Web令牌(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地将信息作为JSON对象传输。由于此信息是经过数字签名的,因此可以进行验证和信任。可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对对JWT进行签名
Blue_007
2023/10/21
7800
SpringBoot集成JWT详细步骤
SpringBoot+RabbitMQ 实现手动消息确认(ACK)
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/09/07
3K0
SpringBoot+RabbitMQ 实现手动消息确认(ACK)
SpringBoot学习笔记(二)——SpringBoot测试JUnit5、 SpringBoot 配置、Spring IoC与自动装配
Spring Test与JUnit等其他测试框架结合起来,提供了便捷高效的测试手段。而Spring Boot Test 是在Spring Test之上的再次封装,增加了切片测试,增强了mock能力。
张果
2022/05/09
4.3K0
SpringBoot学习笔记(二)——SpringBoot测试JUnit5、 SpringBoot 配置、Spring IoC与自动装配
【SpringBoot】SpringBoot核心-外部配置
Spring Boot允许使用properties文件、yaml文件或者命令行参数作为外部配置。
谙忆
2021/01/21
3710
【SpringBoot】SpringBoot核心-外部配置
相关推荐
SpringBoot获取配置中的数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档