spring boot:从yaml配置文件中读取数据的四种方式(spring boot 2.4.3)

作者:神秘网友 发布时间:2021-02-24 13:50:10

spring boot:从yaml配置文件中读取数据的四种方式(spring boot 2.4.3)

一,从配置文件中读取数据有哪些方法

通常有3种用法:

1,直接使用value注解引用得到配置项的值

2, 封装到Component类中再调用:

可以通过value注解或ConfigurationProperties注解两种方式访问

3, 用Environment类从代码中直接访问

生产环境中推荐使用第二种,用一个统一的文件来加载,

而不必写死到代码中,如果配置有变更时可以统一修改也更方便

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

对应的源码可以访问这里获取:https://github.com/liuhongdi/

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,演示项目的相关信息

1,地址:

https://github.com/liuhongdi/yaml

2,功能说明:演示了从yaml配置文件读取数据的方法

3,项目结构:如图:

三,配置文件说明

1,application.yml

#server
server:
  port: 8081
  error:
    include-stacktrace: always
#profile
spring:
  profiles:
    active: prd

2,application-dev.yml

#images
app:
  goods:
    imagesUrlHost: http://127.0.0.1:81/goods
    imagesOrigDir: /data/file/html/goods/images
    imagesTmbDir: /data/file/html/goods/tmb
    extendNames:
      - jpg
      - gif
      - png
      - webp
    extendNames2: jpg,gif,png

3,application-prd.yml

#images
app:
  goods:
    imagesUrlHost: http://file.lhdtest.com/goods
    imagesOrigDir: /data/estore/file/html/goods/images
    imagesTmbDir: /data/estore/file/html/goods/tmb
    extendNames:
        - jpg
        - gif
        - png
        - webp
    extendNames2: jpg,gif,png

四,java代码

1,constant/ConfigValue.java

package com.yaml.demo.constant;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/*
 * 从配置文件中读取的变量
 *  lhd
 *  2020.10.15
 * */
@Component
public class ConfigValue {
    //imagesUrlHost
    @Value("${app.goods.imagesUrlHost}")
    public String imagesUrlHost;

    //imagesOrigDir
    @Value("${app.goods.imagesOrigDir}")
    public String imagesOrigDir;

    //imagesTmbDir
    @Value("${app.goods.imagesTmbDir}")
    public String imagesTmbDir;

    @Value("${app.goods.extendNames2}")
    public String[] extendNames2;
}

2,constant/ConfigProperties.java

package com.yaml.demo.constant;

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

import java.util.List;

/*
 * 从配置文件中读取的变量
 *  lhd
 *  2020.10.15
 * */
@Component
@ConfigurationProperties(prefix = "app.goods")
public class ConfigProperties {
    private String imagesUrlHost;

    public String getImagesUrlHost() {
        return this.imagesUrlHost;
    }

    public void setImagesUrlHost(String imagesUrlHost) {
        this.imagesUrlHost = imagesUrlHost;
    }


    private ListString extendNames;

    public ListString getExtendNames() {
        return this.extendNames;
    }

    public void setExtendNames(ListString extendNames) {
        this.extendNames = extendNames;
    }

}

3,controller/HomeController.java

@Controller
@RequestMapping("/home")
public class HomeController {

    @Resource
    private ConfigValue configValue;

    @Resource
    private ConfigProperties configProperties;

    @Resource
    private Environment environment;

    //从配置文件读取变量imagesUrlHost
    @Value("${app.goods.imagesUrlHost}")
    private String imagesUrlHost;

    //四种方式打印从配置文件中读取到的变量值
    @GetMapping("/home")
    @ResponseBody
    public String home() {

        String res = "第一种方法:直接用value引用:"+imagesUrlHost+":br/";
        res += "第二种方法:封装到Component类中,Value注解:"+configValue.imagesUrlHost+":br/";
        res += "第三种方法:封装到Component类中,ConfigurationProperties注解:"+configProperties.getImagesUrlHost()+":br/";
        res += "第四种方法:environment:"+environment.getProperty("app.goods.imagesUrlHost")+":br/";

        System.out.println("图片类型:extendNames:");
        ListString list = configProperties.getExtendNames();
        for (int i = 0; i  list.size(); i++) {
            String s = (String)list.get(i);
            System.out.println(i+":"+s);
        }

        System.out.println("图片类型2:extendNames2:");
        for (int i = 0; i  configValue.extendNames2.length; i++){
            System.out.println(i+":"+configValue.extendNames2[i]);
        }

        return res;
    }
}

五,测试效果

1,访问:

http://127.0.0.1:8081/home/home

返回:

查看控制台:

六,查看spring boot版本

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.4.3)

spring boot:从yaml配置文件中读取数据的四种方式(spring boot 2.4.3) 相关文章

  1. Springboot 操作Elasticsearch 方式二 【rest-high-level-client】

    操作环境:win10+elasticsearch7.11.1 ,springboot2.1.8+elasticsearch6.7.1客户端 elasticsearch版本是向下兼容的,也就是elasticsearch安装的版本比较高,使用springboot连接ES时,版本低一些也是可以正常使用的 整体目录结构 pom.xml文件添加依赖 propert

  2. SpringBoot整合Swagger2,搭建Restful API在线文档

    1、Swagger2介绍 Swagger又称为"丝袜哥",Swagger是一个功能强大的在线API文档的查阅和测试功能的框架,目前它的版本是2.x,所以称为Swagger2。也正是因为目前互联网时代前后端分离已成趋势,所以Swagger在我们的程序中得到广泛的应用。前后端混在一起,前端

  3. springsecurity入门案例

    springsecurity入门案例 1、导包 dependency groupIdorg.springframework.security/groupId artifactIdspring-security-config/artifactId version5.1.5.RELEASE/version/dependencydependency groupIdorg.springframework.security/groupId artifactIdsprin

  4. Java 第一季 SSM

    1、Spring Bean的作用域之间有什么区别 在spring中,可以在bean的scope属性设置bean的作用域,以决定这个bean是单实例的还是多实例的; 默认情况下,spring只为每个ioc容器声明的bean创建唯一一个实例,整个ioc容器范围内都能共享这个实例,所有后续的getBea

  5. 53 Spring Cloud使用Sleuth在应用中进行日志跟踪

    首先我们需要在跟踪的服务中集成 Sleuth,所有需要跟踪的服务都加上依赖。 SleuthMaven配置代码如下所示。 dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-sleuth/artifactId/dependency 集成完成之后,我们就可以看

  6. springcloud-GateWay使用

    话不多说,直接开干。 1.创建 网关模块。 2.添加依赖 dependencies !-- gateway -- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-gateway/artifactId /dependency dependency groupIdorg.springframework.cloud/gro

  7. Spring的BeanFactoryPostProcessor接口

    接口简介 BeanFactoryPostProcessor 接口是 Spring 初始化 BeanFactory 时对外暴露的扩展点,Spring IoC 容器允许 BeanFactoryPostProcessor 在容器实例化任何 bean 之前读取 bean 的定义,并可以修改它。 BeanDefinitionRegistryPostProcessor 继承自 BeanF

  8. SpringBean的生命周期 以及一些问题总结

    SpringBean的生命周期 一、传统 Bean 的生命周期 new实例化; 可使用了 无引用时,GC回收。 二、Servlet 的生命周期 实例化Servlet对象; init初始化对象; 相应客户端请求service()(doGet()与doPost()); destroy()终止/销毁。 三、Spring Bean的生命周期

  9. Spring Boot demo系列(十):Redis缓存

    1 概述 本文演示了如何在 Spring Boot 中将 Redis 作为缓存使用,具体的内容包括: 环境搭建 项目搭建 测试 2 环境 Redis MySQL MyBatis Plus 3 Redis 安装 Redis 安装非常简单,以笔者的 Manjaro 为例,直接 paru 安装: paru -S redis Ubuntu 、 CentOS 之

  10. Spring简单入门

    目录 1. Spring的优势 2. Spring的体系结构 3. Spring的控制反转-Inversion Of Control 3.1 spring 的 IOC 概述 3.2 spring IOC中工厂的类结构图 3.3 spring配置文件中bean 标签的解析 3.4 bean 的作用范围和生命周期 3.5 实例化 Bean 的三种方式 4. Spring的

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词