首页 > 其他分享 >【SpringBoot系列】四、SpringBoot特性_外部化配置(properties文件配置)

【SpringBoot系列】四、SpringBoot特性_外部化配置(properties文件配置)

时间:2023-05-03 17:04:53浏览次数:38  
标签:配置 SpringBoot int random properties application public 属性


        SpringBoot允许将配置进行外部化(externalize),这样你就能够在不同的环境下使用相同的代码。你可以使用properties文件,yaml文件,环境变量和命令行参数来外部化配置。使用@Value注解,可以直接将属性值注入到beans中,然后通过Spring的Environment抽象或通过@ConfigurationProperties绑定到结构化对象来访问。

PropertySource),以允许对属性值进行合理的覆盖,属性会以如下的顺序进行设值:

  • home目录下的devtools全局设置属性(~/.spring-boot-devtools.properties,如果devtools激活)。
  • 测试用例上的@TestPropertySource注解。
  • 测试用例上的@SpringBootTest#properties注解。
  • 命令行参数.
  • 来自SPRING_APPLICATION_JSON的属性(环境变量或系统属性中内嵌的内联JSON)。
  • ServletConfig初始化参数。
  • ServletContext初始化参数。
  • 来自于java:comp/env的JNDI属性。
  • Java系统属性(System.getProperties())。
  • 操作系统环境变量。
  • RandomValuePropertySource,只包含random.*中的属性。
  • 没有打进jar包的Profile-specific应用属性(application-{profile}.properties和YAML变量)。
  • 打进jar包中的Profile-specific应用属性(application-{profile}.properties和YAML变量)。
  • 没有打进jar包的应用配置(application.properties和YAML变量)。
  • 打进jar包中的应用配置(application.properties和YAML变量)。
  • @Configuration类上的@PropertySource注解。
  • 默认属性(使用SpringApplication.setDefaultProperties指定)。

1、配置随机值

SpringBoot支持在系统加载时配置生成随机数,比如生成密钥或用于测试时,是非常有用的。

(1)在src/main/resources/config/新建random.properties文件,添加内容如下:

#随机32位MD5字符串
user.random.secret=${random.value}

#随机int数字
user.random.intNumber=${random.int}

#随机long数字
user.random.longNumber=${random.long}

#随便uuid
user.random.uuid=${random.uuid}

#随机10以内的数字
user.random.lessTen=${random.int(10)}

#随机1024~65536之内的数字
user.random.range=${random.int[1024,65536]}

(2)新建配置绑定类

springboot/src/main/java/com/xcbeyond/springboot/config/RandomConfig.java

package com.xcbeyond.springboot.config;

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

/**
 * 随机数配置类
 * @author xcbeyond
 * 2018年7月11日下午3:04:12
 */
@Component
//绑定属性文件中的属性,prefix:属性前缀
@ConfigurationProperties(prefix="user.random")
//加载指定的属性配置文件,获取对应的key-value值,存储到Spring的Environment中
@PropertySource(value="config/random.properties")
public class RandomConfig {
    private String secret;
    private int intNumber;
    private int lessTen;
    private int range;
    private long longNumber;
    private String uuid;
	public String getSecret() {
		return secret;
	}
	public void setSecret(String secret) {
		this.secret = secret;
	}
	public int getIntNumber() {
		return intNumber;
	}
	public void setIntNumber(int intNumber) {
		this.intNumber = intNumber;
	}
	public int getLessTen() {
		return lessTen;
	}
	public void setLessTen(int lessTen) {
		this.lessTen = lessTen;
	}
	public int getRange() {
		return range;
	}
	public void setRange(int range) {
		this.range = range;
	}
	public long getLongNumber() {
		return longNumber;
	}
	public void setLongNumber(long longNumber) {
		this.longNumber = longNumber;
	}
	public String getUuid() {
		return uuid;
	}
	public void setUuid(String uuid) {
		this.uuid = uuid;
	}
}

(3)在control中添加测试方法,进行验证。

springboot/src/main/java/com/xcbeyond/springboot/controller/ControllerDemo.java

/**
 * 随机32位MD5字符串
 * @return
 */
@RequestMapping("/randomSecret")
public String randomSecret() {
		return randomConfig.getSecret();
}

访问http://localhost:8888/randomSecret,显示如下:

51b9dfe08dccf728abdcc4f971a0bffe

2、application.properties文件

    SpringApplication将从以下目录顺序加载application.properties文件,并把它们添加到Spring 环境中:

  • 当前目录下的/config子目录。
  • 当前目录。
  • classpath下的/config包。
  • classpath根路径(root)。

 

 注: 你可以使用‘*.yml’文件替代’*.properties’。


3、Profile-specific属性

    除了application.properties文件,profile-specific属性也能通过命名惯例application-{profile}.properties定义。Environment(Spring的环境抽象接口)有个默认profiles集合(默认情况为[default]),在没有设置激活的profiles时会被使用(例如,如果没有明确指定激活的profiles,application-default.properties中的属性会被加载)。
    Profile-specific属性加载路径和标准的application.properties相同,并且profile-specific文件总是会覆盖non-specific文件,不管profile-specific文件是否被打包到jar中。
    如果定义多个profiles,最后一个将获胜。例如,spring.profiles.active定义的profiles被添加到通过SpringApplicationAPI定义的profiles后面,因此优先级更高。

注: 如果你已经在spring.config.location下定义所有文件(非目录),那些profile-specific的文件将不被考虑。如果想使用profile-specific属性,那就在spring.config.location下使用目录。

4、属性占位符

        当使用application.properties配置文件定义的属性时,Spring会先通过已经存在的环境变量中查找该属性,所以你可以使用属性占位符" ${}"引用已定义的值(比如,系统属性):

user.random.secret=${random.value}

5、使用YAML代替Properties


    yaml,它是一种直观的能够被电脑识别的数据序列化格式,也是一种方便的定义层次配置数据的格式。


    在Eclipse中通过Spring插件可直接完成properties转化为yaml,转化结果如下:


    (在application.properties文件右键 Convert .properties to .yaml进行转化)

druid:
  driver-class: com.mysql.jdbc.Driver
  initial-size: 1
  max-active: 20
  min-idle: 1
  password: 123456
  test-on-borrow: true
  url: jdbc:mysql://192.168.0.20:3306/test
  username: root
server:
  port: 8888

【SpringBoot系列】四、SpringBoot特性_外部化配置(properties文件配置)_properties文件

标签:配置,SpringBoot,int,random,properties,application,public,属性
From: https://blog.51cto.com/xcbeyond/6241400

相关文章

  • 【SpringBoot系列】三、SpringBoot特性_SpringApplication类(自定义Banner)
        SpringApplication类作为SpringBoot最基本、最核心的类,在main方法中用来启动SpringBoot项目。一般情况下,只需在main方法中使用SpringApplication.run静态方法来启动项目:packagecom.xcbeyond.springboot;importorg.springframework.boot.SpringApplication;importorg.......
  • flutter 配置
    安装https://zhuanlan.zhihu.com/p/528196912?utm_id=0模拟器联网https://www.jianshu.com/p/bfe15bb4dfe7设置镜像代理(如下图一,镜像地址是mirrors.neusoft.edu.cn:80),设置完成之后,同步一下,如果是首次设置,会出现一个弹框(如下图二,要填写一下镜像,镜像地址是mirrors.neusoft.edu.c......
  • 【SpringBoot 系列】一、SpringBoot项目搭建
    一、引言:什么是springboot?    SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是springboot其实不是什么新的框架,它默认配......
  • docker编排参数详解(docker-compose.yml配置文件编写)
    dockercompose在Docker容器运用中具有很大的学习意义,dockercompose一.前言关于dockercompose技术可以查看官方文档 DockerCompose以下的内容是确立在已经下载好Docker以及DockerCompose,可参看DockerCompose的官方安装教程 InstallDockerCompose二.DockerCom......
  • nginx配置导致过长数据截断问题
    使用jsfetch请求php的时候,出现了TheoperationwasabortSyntaxError:JSON.parse:unterminatedstringatlinexxxoftheJSONdata错误,nginx日志出现了2022/04/0918:58:19[crit]759465#759465:*5007open()"xxx/nginx/fastcgi_temp/6/07/0000000076"failed(13:Perm......
  • java基于springboot+vue非前后端分离的影城管理系统、影院销售管理系统,附源码+文档+PP
    1、项目介绍本影城管理系统主要包括二大功能模块,即用户功能模块和管理员功能模块。(1)管理员模块:系统中的核心用户是管理员,管理员登录后,通过管理员功能来管理后台系统。主要功能有:首页、个人中心、用户管理、电影类型管理、放映厅管理、电影信息管理、购票统计管理、系统管理、订......
  • idea创建SpringBoot项目报错For artifact {mysql:mysql-connector-java:null:jar}: Th
    Forartifact{mysql:mysql-connector-java:null:jar}:Theversioncannotbeempty.报错如图:pom.xml文件如图:添加版本号:就好了......
  • Springboot 之 Mybatis-plus 多数据源
    简介Mybatis-puls多数据源的使用,采用的是官方提供的dynamic-datasource-spring-boot-starter包的@DS注解,具体可以参考官网:https://gitee.com/baomidou/dynamic-datasource-spring-boot-starterpom.xml文件引入如下依赖主要引入dynamic-datasource-spring-boot-starter包<project......
  • PowerShell-自定义的配置文件
    PowerShell5.1一般Windows10自带的是这个版本的PowerShell,这个版本的自定义配置文件的文件编码要保存为ANSI才行。PowerShell7这个是通过github另外下载的,这个版本的自定义配置文件的文件编码要保存为utf-8才行。 配置文件代码其实也没啥,主要加了一个时间显示和我可能用......
  • 沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置
    目录沁恒CH32V208(一):CH32V208WBU6评估板上手报告和Win10环境配置沁恒CH32V208(二):CH32V208的储存结构,启动模式和时钟沁恒CH32V208(三):CH32V208Ubuntu22.04MakefileVSCode环境配置硬件部分CH32V208WBU6评估板WCH-LinkE或WCH-Link硬件环境与Windows下......