SpringBoot外部化配置示例解析

下面我将为你详细讲解“SpringBoot外部化配置示例解析”的完整攻略。

简介

在开发过程中,我们通常会使用外部配置文件,比如properties或者yaml格式的配置文件。其中,Spring Boot利用spring-boot-configuration-processor自动获取并识别配置文件中的属性,使得在Java代码中可以直接使用@Autowired和@Value注解来使用这些属性。

配置优先级

Spring Boot的配置文件有多种来源,包括application.properties、application.yaml、命令行、应用程序程序包或者其他配置源。

Spring Boot使用一个非常特殊的“PropertySource”顺序来决定优先级,如下所示:

  1. 命令行参数。

  2. SPRING_APPLICATION_JSON(内联JSON属性)。

  3. JNDI属性。

  4. Java的系统属性(System.getProperties())。

  5. 操作系统的环境变量。

  6. RandomValuePropertySource,仅存在如下两个属性。

  7. application.properties或者application.yml(包含在你的jar包内的“内部”应用程序属性)。

  8. 外部属性文件(application-{profile}.properties或application-{profile}.yml)。

PS:{profile}是指你使用spring.profiles.active配置的激活的环境名称,如果没有设置,那么就默认是default。

这个顺序被设计的足够灵活,同时也足够强大。你可以使用默认值,或者通过各种你愿意的属性源进行覆盖。

实际应用

接下来为你介绍两个实例来看看如何使用外部化配置。

实例1:使用application.properties

在使用application.properties之前,我们需要引入相应的依赖,添加如下代码到pom.xml文件中:

<dependencies>
    <!-- ... -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <!-- ... -->
</dependencies>

添加完成后,我们可以在项目中添加application.properties文件,并添加如下配置项:

#邮件发送设置
spring.mail.host=smtp.163.com
spring.mail.username=xxx@163.com
spring.mail.password=xxx
spring.mail.protocol=smtp
spring.mail.properties.mail.smtp.auth=true

然后我们可以在代码中使用如下方式获取这些配置项:

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

@Component
public class MailSendService {

    @Value("${spring.mail.username}")
    private String mailUsername;

    @Value("${spring.mail.properties.mail.smtp.auth}")
    private boolean mailSmtpAuth;

    // ...
}

实例2:使用application.yml

添加application.yml前我们需要引入如下依赖:

<dependencies>
    <!-- ... -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
       <groupId>com.fasterxml.jackson.dataformat</groupId>
       <artifactId>jackson-dataformat-yaml</artifactId>
    </dependency>
    <!-- ... -->
</dependencies>

添加完成后,我们可以在项目中添加application.yml文件,并添加如下配置项:

server:
  port: 8080
  servlet:
    context-path: '/'

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456

使用以下方法来获取配置项:

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

@Component
public class ConfigFileDemo {

    @Value("${server.port}")
    private int port;

    @Value("${spring.datasource.url}")
    private String dataSourceUrl;

    // ...
}

总结

通过上述实例,我们可以看得出,Spring Boot的外部化配置是非常简单易用的。通过application.properties和application.yml两种格式文件的选用,我们可以通过@Value注解或者@ConfigurationProperties注解获取配置属性,从而实现实际应用开发中的灵活配置。

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

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

相关文章

  • Java中Cookie和Session的那些事儿

    Java中Cookie和Session的那些事儿 在Web开发中,Cookie和Session是两个非常重要的概念。Cookie是一种机制,用于在客户端保留用户信息,而Session则是一种服务器端的机制,用于跟踪用户的状态。 Cookie 什么是Cookie Cookie是一种存储在用户计算机上的数据,用于在客户端保持状态信息。当用户访问页面时,Cooki…

    Java 2023年5月20日
    00
  • Java并发编程之创建线程

    当进行Java并发编程时,创建线程是其中非常重要的一个步骤。本篇攻略将为你详细介绍Java中创建线程的各种方式和技巧,并提供两条实际例子。 一、Java中创建线程的方式 Java中创建线程有以下几种方式: 1. 继承Thread类 此方法需要继承Java中的Thread类,并重写其run()方法来定义线程的行为。 public class MyThread …

    Java 2023年5月23日
    00
  • Java Swagger使用教程

    下面是Java Swagger使用教程的完整攻略: 1. 什么是Swagger? Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。Swagger包含了许多强大的工具,可以使用它们来构建、文档化和测试RESTful API。 2. Swagger的优点 Swagger最大的好处是它使API文档变得容易,让API…

    Java 2023年6月15日
    00
  • unicode utf-8 gb18030 gb2312 gbk各种编码对比

    Unicode、UTF-8、GB2312、GBK和GB18030都是用于将文本数据编码成二进制数据进行传输和存储的标准。 Unicode Unicode是一种贯穿始终的字符集标准,它在不同的编码方式下可以翻译成不同的二进制数据。Unicode对于所有的文字都有唯一的编码,包括英文、中文、拉丁文、凯尔特文等等世界上所有的文字。Unicode 编码是一种固定的编…

    Java 2023年5月20日
    00
  • 使用jdbcTemplate查询返回自定义对象集合代码示例

    下面是“使用jdbcTemplate查询返回自定义对象集合”的完整攻略。 1. 准备工作 在使用jdbcTemplate查询返回自定义对象集合代码前,需要导入相关依赖包: <dependency> <groupId>org.springframework</groupId> <artifactId>spring…

    Java 2023年5月26日
    00
  • SpringBoot中整合Shiro实现权限管理的示例代码

    下面我将为你详细讲解Spring Boot中整合Shiro实现权限管理的攻略。 一、前置知识 在学习本篇攻略之前,需要掌握以下知识: Spring Boot基础知识 Shiro基础知识 Maven依赖管理 二、步骤 1. 引入依赖 首先,我们需要在pom.xml文件中引入以下依赖: <!– Shiro –> <dependency&gt…

    Java 2023年6月2日
    00
  • Java中的动态和静态编译实例详解

    关于 “Java中的动态和静态编译实例详解” 的完整攻略,我们需要分别从动态编译和静态编译两个方面进行讲解。 动态编译 什么是动态编译 动态编译是指在程序运行的过程中,动态将源代码编译成字节码,并加载进JVM中执行。相对于静态编译,它需要额外的时间和资源,但是具有更高的灵活性和动态性。 实例1:Java代码实时编译 我们来看一个简单的Java代码实时编译实例…

    Java 2023年5月19日
    00
  • 解决java.util.NoSuchElementException异常的问题

    解决java.util.NoSuchElementException异常通常需要对代码进行逐步的排查和调试。以下是完整攻略: 1. 异常类型解释 NoSuchElementException异常通常意味着在访问集合或迭代器时出现了问题,例如使用Scanner在输入流中获取下一个输入时,如果此时输入流已经到达了尾部,就会抛出该异常。 2. 排查调试步骤 解决j…

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