springboot如何引入外部yml配置文件

下面是关于“springboot如何引入外部yml配置文件”的完整攻略。

1.准备工作

在开始之前,确保您已经安装了jdk、maven以及您喜欢的文本编辑器或IDE工具。

2. 创建新的Spring Boot项目

首先在命令行中输入下面的命令,创建一个新的Spring Boot项目。

$ mvn archetype:generate -DgroupId=com.example -DartifactId=demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

在这里,我们选择了使用“maven-archetype-quickstart”原型来创建项目。

3. 引入外部yml配置文件

接下来,我们需要在项目中引入外部yml配置文件。

3.1 配置文件命名规则

通常情况下,我们将配置文件以“application.yml”或“application.properties”的名称存放在“src/main/resources”目录下。但是,为了引入外部yml配置文件,我们需要遵循一定的命名规则:

1.首先,我们需要确保存放配置文件的文件夹在classpath下。如果您的配置文件位于C:\config\application.yml,那么您需要在启动命令中添加-cp参数,以将该文件夹添加至classpath:

$ java -cp C:\config\ -jar demo.jar

或者在需要创建外部配置文件的项目中,将C:\config\application.yml 直接放到工程目录下。

2.其次,我们需要按照命名规则命名配置文件。如果您的应用程序的名称是“myapp”,那么您需要将配置文件命名为“myapp.yml”或“myapp.yaml”。

在本例中,为了演示引入外部yml配置文件,我们将创建一个名为“student”的Spring Boot应用程序,并将配置文件命名为“student.yml”。

3.2 添加配置文件依赖

接下来,我们需要添加一个配置文件依赖项,以便我们可以在代码中引用它。

在pom.xml文件中添加以下依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-yaml</artifactId>
</dependency>

3.3 创建配置类

我们需要一些SpringBoot配置来扫描外部的yml配置文件并将其加载到运行时环境中。

创建一个新的类YamlPropertySourceFactory

package com.example.demo.config;

import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertySourceFactory;

import java.io.IOException;

/**
 * yml自定义加载器
 */
public class YamlPropertySourceFactory implements PropertySourceFactory {
    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
        Resource resource1 = resource.getResource();
        YamlPropertySourceLoader loader = new YamlPropertySourceLoader();
        PropertySource<?> propertySource = loader.
                load(resource1.getFilename(), resource.getResource()).get(0);
        return propertySource;
    }
}

3.4 配置文件信息存储类

接下来,我们需要创建一个用于存储配置文件信息的类。

package com.example.demo.model;

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

@Component
@ConfigurationProperties(prefix = "student")
public class StudentConfigModel {
    private String name;
    private Integer age;

    //省略getter setter
}

在这里,我们使用了@Component注解将该类声明为Spring Bean,并使用@ConfigurationProperties注解来指示将配置文件中以“student”前缀开始的属性值自动注入该类中。

具体的,如下的yml配置文件内容,name和age的属性值将自动注入到该类对应的属性中。

student:
  name: Tom
  age: 21

3.5 配置和使用

最后,我们需要在Spring Boot应用程序中配置这个类并使用它。

application.ymlstudent.yml中添加以下配置:

spring:
  profiles:
    active: dev

接着在application-dev.yml或者别的自己创建的文件中添加:

student:
  name: Tim
  age: 19

我们需要在Spring Boot应用程序的配置文件中添加以下代码:

spring:
  profiles:
    active: dev

management:
  endpoints:
    web:
      exposure:
        include: '*'

spring.config.import:
  - optional:classpath:/config/
  - optional:classpath:/

student:
  name: 李四
  age: 18

在这里,我们配置了激活“dev”配置文件,以及引入/config文件夹下的配置文件。

在我们需要使用配置的类中,我们可以使用@Value注解或者@Autowired将其注入到其他bean中。

package com.example.demo.services;

import com.example.demo.config.YamlPropertySourceFactory;
import com.example.demo.model.StudentConfigModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertySourceFactory;
import org.springframework.stereotype.Component;

import java.io.IOException;

@Component
public class StudentService {
    @Autowired
    private Environment env;

    @Autowired
    private StudentConfigModel studentConfigModel;

    @Value("${student.name}")
    private String name;

    public void printConfig() {
        System.out.println("通过@Value注入的name:" + name);
        System.out.println("StudentConfigModel的name:" + studentConfigModel.getName());
        System.out.println("Environment的name:" + env.getProperty("student.name"));
    }
}

通过以上配置,我们就可以使用注入的方式,来得到自定义yml文件中的值。

这里我们提供了两个示例:

  1. 使用@Value注入配置值:使用该注解,注入值比较直接,但是只能针对非复杂类型的属性进行注入,如果属性过多,也比较繁琐。

  2. 使用自定义的StudentConfigModel类,使用该类,对自定义的配置文件属性值进行绑定注入,相比1而言,比较明了,但是需要新创建一个类绑定属性。

  3. 使用Environment来获取另外一种注入方式,可以灵活得到多个配置文件的信息,同时也能针对非复杂类型/复杂类型的属性进行注入的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot如何引入外部yml配置文件 - Python技术站

(1)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • cad备份文件在哪里

    下面我将为您详细讲解如何备份CAD文件。 备份CAD文件的常用方法 在CAD软件内,备份文件有两种常用的方法: 复制文件 打开CAD软件后,选择要备份的文件,右键点击,选择“复制”,再右键点击要复制到的目录,选择“粘贴”。或者使用快捷键Ctrl+C和Ctrl+V进行复制和粘贴。这种方法适用于单个文件的备份。 存储文件 打开CAD软件后,选择“文件” – “另…

    其他 2023年4月16日
    00
  • mysql5.0版本下载地址集合

    MySQL 5.0版本下载地址集合攻略 MySQL是一种流行的开源关系型数据库管理系统,MySQL 5.0版本是其较旧的版本之一。在本攻略中,我将为您提供MySQL 5.0版本的下载地址集合,并提供两个示例说明。 下载地址集合 您可以从以下来源之一下载MySQL 5.0版本: 官方网站:您可以访问MySQL官方网站(https://www.mysql.com…

    other 2023年8月4日
    00
  • 基于Qt实现可拖动自定义控件

    下面是基于Qt实现可拖动自定义控件的完整攻略。 1. 编写自定义控件 首先,我们需要编写自定义控件,这个控件可以是任何类型的Qt控件,比如QWidget或QLabel等。下面以QWidget为例,代码如下: class MyWidget : public QWidget { public: MyWidget(QWidget *parent = nullptr…

    other 2023年6月26日
    00
  • python中super().__init__()作用详解

    下面我将详细讲解一下 “python中super().init()作用详解” 的相关知识。 什么是super().init()方法? 在Python中,当我们定义一个子类(派生类)时,如果需要对其父类(基类)的属性或方法进行调用,我们通常使用 super() 函数。super() 函数返回一个临时的对象,通过该对象可以调用父类中的方法。 而对于 super(…

    other 2023年6月27日
    00
  • minikube addons enable ingress 启动错误

    下面是关于启动minikube addons enable ingress时出现错误的完整攻略,包括错误原因、解决方法和两个示例说明。 错误原因 在启动minikube addons enable ingress时,可能会出现以下错误: Error enabling addons ingress: Error enabling addon ingress: …

    other 2023年5月6日
    00
  • 基于Java语言实现Socket通信的实例

    关于“基于Java语言实现Socket通信的实例”的攻略,下面会提供详细的步骤以及示例说明。 目录 简介 环境搭建 编写客户端 编写服务器端 示例说明 总结 简介 Socket(套接字)是一种用于在不同程序之间传递数据的机制。在Java中,可以通过java.net.Socket类实现Socket通信,建立服务器和客户端之间的连接。在这个攻略中,我们将会演示如…

    other 2023年6月27日
    00
  • 暗黑3魔法师巅峰怎么加点 魔法师巅峰加点属性优先级

    下面简要介绍一下关于“暗黑3魔法师巅峰怎么加点 魔法师巅峰加点属性优先级”的攻略: 暗黑3魔法师巅峰加点方式 第一步:懂得一些巅峰基础知识 在进行巅峰加点前,我们需要先了解到什么是“巅峰系统”。巅峰系统是50级以后的一个系统,可以提供魔法师更多的属性加成和技能点,使魔法师更加强大。在巅峰系统中,我们需要将点数投入到巅峰技能中,常见的巅峰技能有以下几种: 巨型…

    other 2023年6月27日
    00
  • 6款实用的硬盘、ssd固态硬盘、u盘、储存卡磁盘性能测试工具

    6款实用的硬盘、SSD固态硬盘、U盘、储存卡磁盘性能测试工具 为了更好地测试硬盘、SSD固态硬盘、U盘和储存卡等存储设备的性能,提高存储设备的管理效率,有必要了解一些性能测试工具。本文将介绍6款实用的硬盘、SSD固态硬盘、U盘和储存卡磁盘性能测试工具。 1. Crystaldiskmark Crystaldiskmark是一款用于测试硬盘和SSD固态硬盘性能…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部