SpringBoot扩展外部化配置的原理解析

下面我为你详细讲解“SpringBoot扩展外部化配置的原理解析”的攻略。

1. 理解SpringBoot配置管理流程

SpringBoot使用YAMLproperties格式的文件来管理应用程序所需的各种配置信息。它们可以分为应用表现配置和逻辑配置两类,其中应用表现配置是指一些与应用程序用户直接交互的配置,例如网站标题和页脚等。逻辑配置是指一些与应用程序内部运行相关的配置,例如数据库连接、日志级别、缓存配置等。

1.1常规配置方式

常规的SpringBoot项目通常使用application.ymlapplication.properties文件来管理配置信息,在应用启动时,SpringBoot会读取这些文件中的配置信息并加载到系统属性或环境变量中。例如,如果我们在application.yml文件中配置了一个名为name的属性:

name: My Application

在应用程序中可以通过以下方式获取这个配置值:

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

1.2 扩展外部化配置

对于大型的项目而言,配置信息的数量和复杂度可能会非常高,常规的配置方式会显得过于简单。SpringBoot提供了扩展外部化配置的能力。所谓扩展外部化配置,就是指SpringBoot可以通过自定义配置加载器来加载非常量的配置信息,并提供访问这些配置信息的方法。这种方式可以通过多种方式实现,包括将配置信息放在外部文件、使用数据库存储配置信息、使用云配置服务等。

2. 示例说明

以下示例仅用于说明如何实现扩展外部化配置,具体实现方式可能有所不同。

示例一:使用外部文件存储配置信息

在这个示例中,我们将使用一个demo.properties文件作为外部配置文件,并在应用程序中访问这个配置信息。

  1. 创建demo.properties文件,并将其放在classpath根目录下。

properties
demo.config.key1=value1
demo.config.key2=value2

  1. 添加依赖

xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

  1. 创建一个类,用来读取这些配置信息。这个类需要使用@ConfigurationProperties注解来指定这个配置的前缀。

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

@Component
@ConfigurationProperties(prefix = "demo.config")
public class DemoConfiguration {

   private String key1;

   private String key2;

   public String getKey1() {
       return key1;
   }

   public void setKey1(String key1) {
       this.key1 = key1;
   }

   public String getKey2() {
       return key2;
   }

   public void setKey2(String key2) {
       this.key2 = key2;
   }

}
```

  1. 在应用程序中使用这些配置信息:

```java
@Autowired
private DemoConfiguration demoConfiguration;

logger.info(demoConfiguration.getKey1());
logger.info(demoConfiguration.getKey2());
```

示例二:使用数据库存储配置信息

这个示例中,我们将使用MySql数据库存储配置信息。

  1. 添加依赖

xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

  1. 创建MySql数据库,并创建一个table用于存储配置信息。

sql
CREATE TABLE `config` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) DEFAULT NULL,
`value` varchar(1024) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;

  1. 创建一个实体类,用于映射config表。

```java
import javax.persistence.*;

@Entity
@Table(name = "config")
public class Config {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Long id;

   private String name;

   private String value;

   public Long getId() {
       return id;
   }

   public void setId(Long id) {
       this.id = id;
   }

   public String getName() {
       return name;
   }

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

   public String getValue() {
       return value;
   }

   public void setValue(String value) {
       this.value = value;
   }

}
```

  1. 添加一个ConfigRepository接口,用于查询配置项。

```java
public interface ConfigRepository extends CrudRepository {

   Config findByName(String name);

}
```

  1. 创建一个DatabaseConfigLoader类,用于加载配置信息。

```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;

@Configuration
public class DatabaseConfigLoader {

   private final ConfigRepository configRepository;

   @Autowired
   public DatabaseConfigLoader(ConfigRepository configRepository) {
       this.configRepository = configRepository;
   }

   @PostConstruct
   public void loadConfigurations() {
       Iterable<Config> configs = configRepository.findAll();
       configs.forEach(config -> System.setProperty(config.getName(), config.getValue()));
   }

}
```

  1. 在应用程序中使用这些配置信息。

```java
@Value("${name}")
private String appName;

logger.info(appName);
```

这就是两个示例,通过这两个示例,你可以初步了解如何实现SpringBoot应用程序的扩展外部化配置功能。其中,示例一中使用了外部文件来存储配置信息,示例二中则使用了MySql数据库来存储配置信息。两个示例所演示的方法都是比较常见的,当然,实现方式还有很多,具体如何实现要根据自身需求来定。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot扩展外部化配置的原理解析 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • java使用Socket类接收和发送数据

    Java 中使用 Socket 类来实现网络通讯,可以通过 Socket 类的 send 和 receive 方法实现数据传送。我们可以通过以下步骤来实现 Socket 类的数据发送和接收: 创建 Socket 实例并连接服务器 在使用 Socket 类实现数据传输前,需要先创建 Socket 实例。通过传入目标主机和端口号作为参数,我们可以实现与目标主机的…

    Java 2023年5月26日
    00
  • spring多数据源配置实现方法实例分析

    Spring多数据源配置实现方法实例分析 在Spring应用中,我们经常需要连接多个数据库进行操作,此时需要使用到多数据源配置。本文将介绍如何在Spring框架中配置多数据源,并通过一个示例演示其使用方法。 一、添加多数据源依赖 在进行多数据源配置前,需先在pom.xml文件中添加相应的依赖: <dependency> <groupId&g…

    Java 2023年5月20日
    00
  • java 利用HttpClient PostMethod提交json数据操作

    下面是详细讲解Java利用HttpClient PostMethod提交JSON数据操作的完整攻略: 1. 导入HttpClient依赖 首先需要在项目中使用HttpClient库,可以使用Maven等方式导入依赖,例如: <dependency> <groupId>org.apache.httpcomponents</grou…

    Java 2023年5月26日
    00
  • Windows下java、javaw、javaws以及jvm.dll等进程的区别

    介绍:在Windows操作系统中,java、javaw、javaws等进程都是跑Java程序或应用的进程,它们在功能上有所差异。本文将详细讲解它们的区别。 javaw javaw.exe是Java虚拟机的一个非常重要的进程,并且是后台进程,即不会在显示屏上出现一个命令行窗口。它适用于那些需要长时间运行在后台的Java应用程序。大多数GUI应用程序都是使用ja…

    Java 2023年5月23日
    00
  • @OneToMany查询陷入循环引用的解决方案

    当在实体类中使用@OneToMany注解定义一对多关系时,会出现查询数据时陷入循环引用的问题,导致查询效率低下。以下是解决方案的完整攻略: 1. 方案一:使用@JsonIgnore解决循环引用 @JsonIgnore注解可以用来忽略在实体类之间的相互依赖关系。加上该注解后,在查询数据时就可以排除循环引用导致的无限循环。 public class User {…

    Java 2023年5月20日
    00
  • MyBatis-Plus框架整合详细方法

    当我们将Spring Boot和MyBatis框架结合时,通常使用MyBatis-Plus作为MyBatis框架的扩展库。MyBatis-Plus简化了MyBatis的常见操作,使开发人员更轻松地完成数据访问层的开发。在下面的攻略中,我将会为大家讲解根据MyBatis-Plus官方文档整合MyBatis-Plus框架的详细方法。 1. 添加Maven依赖 在…

    Java 2023年5月20日
    00
  • MyBatis-Plus中最简单的查询操作教程(Lambda)

    当你正在使用MyBatis-Plus来进行数据库操作时,最简单的操作之一是进行查询操作。MyBatis-Plus提供了两种形式的查询操作:Wrapper和Lambda。其中,Wrapper是MyBatis-Plus最初提供的查询方式。但是,在使用Wrapper时,我们需要手动构建一些查询条件,这对于一些较为复杂的查询来说,会使代码变得十分冗长。因此,为了解决…

    Java 2023年5月20日
    00
  • layui的数据表格+springmvc实现搜索功能的例子

    下面是详细讲解“layui的数据表格+springmvc实现搜索功能的例子”的完整攻略: 一、前置条件 确定使用的IDE是IntelliJ IDEA; 确保已经创建了一个Spring MVC的web工程; 确保已经配置好了Layui相关的静态资源。 二、添加依赖 添加spring-data-jpa、MySQL JDBC驱动、Spring Web MVC等依赖…

    Java 2023年6月18日
    00
合作推广
合作推广
分享本页
返回顶部