Spring Boot 针对常用的开发场景提供了一系列自动化配置来减少原本复杂而又几乎很少改动的模板配置内容,但是,我们还是需要了解如何在Spring Boot中修改这些自动化的配置,以应对一些特殊场景

配置文件

Spring Boot的默认配置文件位置为 src/main/resources/application.properties ,关于 Spring Boot 应用的配置文件内容都可以在该文件中,根据我们引入的不同模块,可以在这里定义容器端口号、数据库连接信息、日志级别等各种配置信息,常用配置如下:

  • server.context-path:指定上下文路径,比如默认访问路径是http://localhost:8080,我将之改为http://localhost:8081/hello,就需要配置此属性值为 /hello
  • server.port=8090 :指定服务端口号为 8090
  • spring.application.name=hello:指定应用名(该名字后续Spring Cloud 中会被注册为服务名)

自定义参数

除了可以在Spring Boot的配置文件中设置各个模块中预定义的配置属性,也可以在配置文件中定义一些我们需要的自定义属性,比如在配置文件中增加如下内容:

book.name = springCloud

book.author=李四

然后,可以在应用中,通过@Value注解来加载这些自定义的参数,比如:

@Component

public class Book {

        @Value ("${book.name}")

        private String name;

        @Value ("${book.author}")

        private String author;

}

@Value注解可以支持两种表达式来进行配置,如下所示:

  • 一种是上面代码所示的 PlaceHolder 方式,格式为${…} 大括号内为PlaceHolder
  • 另一种是 SpEL表达式(Spring Expression Language),格式为 #{…},大括号内为 SpEL 表达式

通过自定义注入实体,就可以读取到配置属性,示例代码如下:

@RestController

@RequestMapping ("/hello")

public class HelloController {

 
 

        @Autowired

        private Book book;

 
 

        @RequestMapping ("getCount")

        public String getCount() {

                return
"ok " + book.getName();

        }

}

参数引用

在 application.properties中的个参数之间可以直接通过使用 PlaceHolder 的方式来进行引用,比如:

book.name=springCloud

book.author=李四

book.desc= 作者 ${book.author} 写的 ${book.name}

使用随机数

在一些特殊的情况下,我们希望有些参数每次被加载时候不是一个固定的值,比如密钥、服务端口等,在Spring Boot 的属性配置文件中,可以使用${random}配置来产生随机的int值、long值或者string字符串,这样我们就可以很容易的通过配置随机生成属性,比如:

#-随机生成8080-8090内的随机数

server.port=${random.int(8080,8090)}

#--------------------------

#-随机生成字符串

org.drsoft.random=${random.value}

#-随机生成int

org.drsoft.random.int=${random.int}

#-随机生成long

org.drsoft.random.long=${random.long}

#-随机生成10以内的int

org.drsoft.random.intRagne=${random.int(10)}

#-机生成 uuid

命令行参数

使用命令 java -jar 来启动的方式,该命令除了启动应用外,还可以在命令行中指定应用的参数,比如 java - jar xxx.jar --server.port=8090 直接以命令行的方式设置服务端口属性,在用命令行方式启动 Spring Boot应用时,连续的两个减号就是对application.properties 中的属性进行赋值的标识

多环境配置

多环境的配置,各种项目构建工具或是框架的基本思路是一致的,通过配置多份不同环境的配置文件,在通过打包命令指定需要打包的内容之后进行区分打包,在Spring
Boot
中,多环境配置的文件名需要满足application-{profile}.properties
的格式,其中{profile}对应环境标识,如下:

  • application-dev.properties:开发环境
  • application-test.properties:测试环境
  • application-prod.properties:生成环境

至于具体哪个配置文件会被加载,需要在
application.properties
文件中通过spring.profiles.action
属性来设置,其值对应配置文件中的{profile}
值。

加载顺序

为了能够更合理的重写各属性的值,其Spring
Boot
使用了下面这种较为特别的属性加载顺序:

  • 命令行中传入的参数
  • SPRING_APPLICATION_JSON中的属性,SPRING_APPLICATION_JSON 是以JSON格式配置在系统环境变量中的内容
  • java:comp/env
    中的
    JNDI
    属性
  • java
    的系统属性,可以通过System.getProperties()获取的内容
  • 操作系统的环境变量
  • 通过
    random.* 配置的随机属性
  • 位于当前应用
    Jar
    包之外,针对不同{profile}环境的配置文件内容
  • 位于当前应用
    Jar
    包之内,针对不同{profile}环境的配置文件内容
  • 位于当前应用
    Jar
    包之外的
    application.properties
    配置内容
  • 位于当前应用
    Jar
    包之内的
    application.properties
    配置内容

  • @Configuration
    注解修改的类,通过
    @PropertySource
    注解定义的属性
  • 应用默认属性,使用
    SpringApplication.setDefaultProperties
    定义的内容

可以看到其中标黄的都是从应用Jar包之外读取配置文件,所以,实现外部化配置的原理就是从此切入,为其指定外部配置文件的加载位置来取代Jar包之内的配置内容。

笔记:Spring Boot 配置详解的更多相关文章

  1. Spring Boot 配置详解

    Spring Boot 针对常用的开发场景提供了一系列自动化配置来减少原本复杂而又几乎很少改动的模板配置内容,但是,我们还是需要了解如何在Spring Boot中修改这些自动化的配置,以应对一些特殊场 ...

  2. Spring Boot (5) Spring Boot配置详解

    application.properties application.properties是spring boot默认的配置文件,spring boot默认会在以下两个路径搜索并加载这个文件 src\ ...

  3. Spring Boot 配置文件详解

    Spring Boot配置文件详解 Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件.他们的作用都是修改Spring Boot自动配置的默认值.相对于prop ...

  4. Spring Boot异常处理详解

    在Spring MVC异常处理详解中,介绍了Spring MVC的异常处理体系,本文将讲解在此基础上Spring Boot为我们做了哪些工作.下图列出了Spring Boot中跟MVC异常处理相关的类 ...

  5. spring事务配置详解

    一.前言 好几天没有在对spring进行学习了,由于这几天在赶项目,没有什么时间闲下来继续学习,导致spring核心架构详解没有继续下去,在接下来的时间里面,会继续对spring的核心架构在继续进行学 ...

  6. Spring Boot☞ 配置文件详解:自定义属性、随机数、多环境配置等

    自定义属性与加载 我们在使用Spring Boot的时候,通常也需要定义一些自己使用的属性,我们可以如下方式直接定义: application-dev.yml com.didispace.blog: ...

  7. Spring Boot配置文件详解:自定义属性、随机数、多环境配置

    自定义属性与加载 我们在使用Spring Boot的时候,通常也需要定义一些自己使用的属性,我们可以如下方式直接定义: application-dev.yml com.didispace.blog: ...

  8. Spring Boot 注解详解

    一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration ...

  9. Spring Boot配置文件详解-ConfigurationProperties和Value优缺点-(转)好文

    文章转自 http://www.cnblogs.com/itdragon/p/8686554.html Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件.他们 ...

随机推荐

  1. 安装CentOS7

    安装环境:虚拟机*1 使用软件:CentOS7镜像*1 安装过程: 虚拟机配置步骤(主要部分): 1.安装为Linux:CentOS 64位 2.分配1G内存(若需求大可根据实际情况分配) 3.分配4 ...

  2. 关于我上传的activiti自定义流程demo的说明

    最近又收到了一些询问activiti的问题,其中好几个都是向我索要我上传的这个activiti自定义流程demo的数据库设计. 索要的多了,而我早就把这个库给删掉了,所以我便觉得有必要做一个说明: 我 ...

  3. Hi3531添加16GByte(128Gbit) NAND Flash支持

    0.板子上已有Nor Flash了,添加的Nand Flash型号为MT29F128G08CJABAWP,进系统挂接NAND作为一个分区 1.修改uboot u-boot-2010.06/driver ...

  4. Android HotFix动态加载框架介绍

    HotFix(Deprecated) https://github.com/dodola/HotFix 请关注 RocooFix 我重新写了一个RocooFix框架,解决了Nuwa因为Gradle1. ...

  5. WIN7 嵌入式系统安装教程 Windows Embedded Standard 2011 安装

    轻松构建你的第一个 Windows Embedded Standard 2011 镜像.通过本文你可以快速掌握如何使用Windows Embedded Standard 2011 CTP1 来构建一个 ...

  6. DOS批处理命令递归删除给定的文件(夹),兼VC工程清理小工具

    使用dos批处理命令递归删除指定的文件(夹): (下面内容针对清理VC工程!自己按说明任意修改) 2014-06-10修改:删除前增加了[y,n]询问: echo off rem 递归删除当前文件下指 ...

  7. JavaScript控制输入框只能输入非负正整数

    1.问题背景 问题:一个输入框,输入的是月份,保证输入的内容只能是非负正整数 2.JavaScript代码 function checkMonth() { $("month").k ...

  8. TypeError: Error #1009: 无法访问空对象引用的属性或方法

    1.错误描述 TypeError: Error #1009: 无法访问空对象引用的属性或方法. at FirstMap/search_clickHandler()[E:\Flash Builder\M ...

  9. 初识Go语言

    一.Go语言的主要特性: ①    开放源代码的通用计算机编程语言.开放源代码的软件(以下简称开源软件)更容易被修正和改进. ②    虽为静态类型.编译型的语言,但go语言的语法却趋于脚本化,非常简 ...

  10. Java 第二章 变量、数据类型和运算符

    第二章      变量.数据类型和运算符 什么是变量: 变量代表一块内存区域,变量类型不一样,这一块内存的大小也不一样. #在编程语言里面,你可以通过定义变量,向内存里添加数据或者修改内存已有的数据. ...