SpringBoot基础系列-SpringBoot配置
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9990680.html
SpringBoot基础系列-SpringBoot配置
概述
属性配置方式:
- properties文件
- yaml文件
- 环境变量
- 命令行参数
属性值的使用方式:
- @Value("${propertyKey}")注解获取
- 从Environment中获取
- 使用@ConfigurationProperties绑定到Bean
具体配置
随机值配置
适用类型:
- integers
- longs
- uuids
- strings
my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}
说明:rendom.value结果是strings;random.int*结果是integers;random.long结果是longs;random.uuid结果是uuids
命令行属性
命令行属性会被转换成为property,而保存到Environment之中,而且优先级极高,一般是在最后进行保存,如果有相同的属性会进行覆盖。
application.properties配置文件
格式:
- *.properties
- *.yml
application.properties属性文件会被SpringBoot应用自动加载,而且有一个加载顺序:
- 当前目录的/config子目录下
- 当前目录下
- classpath目录的/config子目录下
- classpath目录下
上面的排列顺序从上到下是按照优先级从高到低排列,而实际上我们一般使用都在classpath目录下
通过Environment属性spring.config.name我们可以自定义applicaiton.properties文件的名称,通过Environment属性spring.config.location自定义applicaiton.properties文件的位置。这两个配置要在应用启用之前配置,所以需要将其配置到系统环境变量或者系统参数或者命令行参数中优先读取。
java -jar xxx.jar --spring.config.name=myAppConfig
java -jar xxx.jar --spring.config.location=classpath:custon-config/,file:./custon-config/
java -jar xxx.jar --spring.config.additional-location=classpath:custon-config/,file:./custon-config/
上面将其定义为命令行参数。其中后两个配置是不同的,spring.config.location会覆盖默认的搜索路径,spring.config.additional-location不会覆盖默认的搜索路径
application-{profile}.properties配置文件
我们可以在applicaiton.prperties所在目录定义applicaiton-{profile}.properties配置文件作为某个profile的专属配置文件,只有在该profile处于active状态时才会读取。
如果在application.properties和application-{profile}.properties中定义的相同名称的配置内容,后者会覆盖前者。
属性占位符
我们可以在属性配置时使用占位符,动态的使用其他属性的值:
name=weiyihaoge
desc=${name} is a good man.
使用YAML文件替换properties
YAML的依赖包SnakeYAML会被Spring-boot-starter自动加载。
无论是YAML还是properties,只要被加载到内存,其实都会设置到environment之中,这时我们使用@Value("${propertyKey}")就能获取到属性的值,该注解其实是在从environment中获取值。
YMAL配置文件除了配置格式不同于properties之外,配置方式基本相同。下面主要看看几个不同之处:
Multi-profile YAML
使用properties配置文件时,不同的profile需要定义不同的配置文件,但是使用YAML配置文件时,我们可以在一个YAML文件中定义所有的profile配置。
server:
port: 8080
---
spring:
profiles: dev
server:
port: 8081
---
spring:
profiles: test
server:
port: 8082
---
spring:
profiles: pro
server:
port: 8083
@PropertySource
YAML配置内容无法通过@PropertySource注解加载,如果要使用该注解加载配置内容,只能使用properties配置文件。
@PropertySource注解一般是用于加载自定义的属性配置文件的,因为如果是默认的配置文件application.properties或者application.yml都会被自动加载,根本用不到这个注解,也只有自定义的配置文件需要这个注解单独进行加载,而该注解只能用于properties配置文件,那么我们就有一个原则:不要自定义YAML文件,凡是自定义的配置文件全部使用properties文件,而默认的配置完全可以采用application.yml,使用YAML的优势。
类型安全的配置属性
所谓类型安全的配置属性即我们可以将自定义的配置内容直接对应到一个配置类中,在应用启动后生成一个配置Bean供程序使用。
这一般在配置属性比较多的情况下使用,因为这种情况下使用@Value有些过于麻烦。
使用方法:
第一步:添加自定义配置数据
可以在默认的配置文件application.yml中添加,也可以在自定义的配置文件中添加(如果自定义配置文件,一定要定义成properties文件)
在application.yml中添加配置内容
#属性映射测试
app:
name: springdemo
size: 100M
user: weiyihaoge
version: 0.0.1
在myConfig.properties中添加配置内容
app.name=springdemo2
app.size=50M
app.user=ahaha
app.version=1.0.0
定义承接属性的Bean类
针对application.yml中定义的属性
@Data
@NoArgsConstructor
@AllArgsConstructor
@ConfigurationProperties("app")
@Configuration
public class AppProperty {
private String name;
private String size;
private String user;
private String version;
}
针对自定义myConfig.properties中定义的属性
@Data
@NoArgsConstructor
@AllArgsConstructor
@ConfigurationProperties("app")
@Configuration
@PropertySource("classpath:/config/myConfig.properties")
public class AppProperty {
private String name;
private String size;
private String user;
private String version;
}
使用
@Controller
@RequestMapping("base")
@Log4j2
@Api(hidden = true)
public class Base {
@Autowired
private AppProperty property;
@RequestMapping(value = "/getProperties",method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "获取配置属性", httpMethod = "GET")
public String getProperty(){
return property.toString();
}
}
执行结果
浏览器执行以下请求:
http:127.0.0.1:8080/base/getProperties
默认配置文件的结果
AppProperty(name=springdemo, size=100M, user=weiyihaoge, version=0.0.1)
自定义配置文件的结果
AppProperty(name=springdemo2, size=50M, user=ahaha, version=1.0.0)
注意:如果在默认的配置文件和自定义配置文件中配置了同样的内容,那么自定义的内容将不会被映射,默认的配置文件中配置的信息会优先被映射。
SpringBoot基础系列-SpringBoot配置的更多相关文章
- springBoot基础系列--properties配置
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7183408.html SpringBoot中免除了大部分手动配置,但是对于一些特定的情况, ...
- 【SpringBoot 基础系列】实现一个自定义配置加载器(应用篇)
[SpringBoot 基础系列]实现一个自定义配置加载器(应用篇) Spring 中提供了@Value注解,用来绑定配置,可以实现从配置文件中,读取对应的配置并赋值给成员变量:某些时候,我们的配置可 ...
- SpringBoot基础系列之自定义配置源使用姿势实例演示
[SpringBoot基础系列]自定义配置源的使用姿势介绍 前面一篇博文介绍了一个@Value的一些知识点,其中提了一个点,@Value对应的配置,除了是配置文件中之外,可以从其他的数据源中获取么,如 ...
- SpringBoot基础系列-SpringCache使用
原创文章,转载请标注出处:<SpringBoot基础系列-SpringCache使用> 一.概述 SpringCache本身是一个缓存体系的抽象实现,并没有具体的缓存能力,要使用Sprin ...
- SpringBoot基础系列-使用日志
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9996897.html SpringBoot基础系列-使用日志 概述 SpringBoot ...
- SpringBoot基础系列-使用Profiles
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9996884.html SpringBoot基础系列-使用Profile 概述 Profi ...
- 【SpringBoot基础系列】手把手实现国际化支持实例开发
[SpringBoot基础系列]手把手实现国际化支持实例开发 国际化的支持,对于app开发的小伙伴来说应该比价常见了:作为java后端的小伙伴,一般来讲接触国际化的机会不太多,毕竟业务开展到海外的企业 ...
- SpringBoot基础系列一
SpringBoot基础知识概览 特性 核心理念:约定优于配置 特点: 1. 开箱即用,根据项目依赖自动配置 2. 功能强大的服务体系,如嵌入式服务.安全 3. 绝无代码生成,不用写.xml配置,用注 ...
- 【SpringBoot基础系列-实战】如何指定 bean 最先加载(应用篇)
[基础系列-实战]如何指定 bean 最先加载(应用篇) 在日常的业务开发中,绝大多数我们都是不关注 bean 的加载顺序,然而如果在某些场景下,当我们希望某个 bean 优于其他的 bean 被实例 ...
随机推荐
- jQuery与其它js库共用
<script src="js/zepto.min.js"></script>//其它js库<script src="http://comm ...
- 使用jq 仿 swper 图片左右滚动
<div> <div /</div> <div class="box"> <div class="box-ul" ...
- hashlib模块,shutil,模块 ,,xml 文件解析,configparser,模块,类,什么是类
1 什么是hash hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值 如果把hash算法比喻为一座工厂 那传给hash算法的内容就是原材料 生成的hash值就是生产出的产品 2.为 ...
- NOIP2017感悟
Day1 第一次会做的题这么多却比以前靠的更差. 其实停课期间水平还是提升了很多,但是做题速度和心态问题一就是我最难克服的一个地方. 题目很简单,但是又很恶心,主要是我代码能力太差,第二题调不出来,第 ...
- Bypass_Disable_functions_Shell
Bypass_Disable_functions_Shell https://github.com/l3m0n/Bypass_Disable_functions_Shell 一个各种方式突破Disab ...
- LIS的优化算法O(n log n)
LIS的nlogn的优化:LIS的优化说白了其实是贪心算法,比如说让你求一个最长上升子序列把,一起走一遍. 比如说(4, 2, 3, 1, 2,3,5)这个序列,求他的最长上升子序列,那么来看,如果求 ...
- Ubuntu环境下配置darknet
本教程基于Linux物理机进行相关配置,要求物理机中包含N卡且Capbility>=3.0,小于3.0(Fermi架构)只允许配置cuda,不能配置使用Cudnn: 本教程分为: 1.安装NVI ...
- Data Center手册(1):架构
如图是数据中心的一个基本架构 最上层是Internet Edge,也叫Edge Router,也叫Border Router,它提供数据中心与Internet的连接. 连接多个网络供应商来提供冗余可靠 ...
- SimpleRpc-客户端与服务端工作模型探讨
前言 本篇文章讲述客户端与服务端的具体设计细节.有细心的小伙伴发现,客户端和服务端的工作方式不一样:服务端是多线程计算模型,利用工作线程完成数据的读取,而客户端是单线程(利用Reactor线程完成数据 ...
- [Swift]LeetCode798. 得分最高的最小轮调 | Smallest Rotation with Highest Score
Given an array A, we may rotate it by a non-negative integer K so that the array becomes A[K], A[K+1 ...