原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9990680.html

SpringBoot基础系列-SpringBoot配置

概述

属性配置方式:

  • properties文件
  • yaml文件
  • 环境变量
  • 命令行参数

属性值的使用方式:

  • @Value("${propertyKey}")注解获取
  • 从Environment中获取
  • 使用@ConfigurationProperties绑定到Bean

具体配置

随机值配置

适用类型:

  • integers
  • longs
  • uuids
  • strings
  1. my.secret=${random.value}
  2. my.number=${random.int}
  3. my.bignumber=${random.long}
  4. my.uuid=${random.uuid}
  5. my.number.less.than.ten=${random.int(10)}
  6. 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文件的位置。这两个配置要在应用启用之前配置,所以需要将其配置到系统环境变量或者系统参数或者命令行参数中优先读取。

  1. java -jar xxx.jar --spring.config.name=myAppConfig
  2. java -jar xxx.jar --spring.config.location=classpath:custon-config/,file:./custon-config/
  3. 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中定义的相同名称的配置内容,后者会覆盖前者。

属性占位符

我们可以在属性配置时使用占位符,动态的使用其他属性的值:

  1. name=weiyihaoge
  2. 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配置。

  1. server:
  2. port: 8080
  3. ---
  4. spring:
  5. profiles: dev
  6. server:
  7. port: 8081
  8. ---
  9. spring:
  10. profiles: test
  11. server:
  12. port: 8082
  13. ---
  14. spring:
  15. profiles: pro
  16. server:
  17. port: 8083

@PropertySource

YAML配置内容无法通过@PropertySource注解加载,如果要使用该注解加载配置内容,只能使用properties配置文件。

@PropertySource注解一般是用于加载自定义的属性配置文件的,因为如果是默认的配置文件application.properties或者application.yml都会被自动加载,根本用不到这个注解,也只有自定义的配置文件需要这个注解单独进行加载,而该注解只能用于properties配置文件,那么我们就有一个原则:不要自定义YAML文件,凡是自定义的配置文件全部使用properties文件,而默认的配置完全可以采用application.yml,使用YAML的优势。

类型安全的配置属性

所谓类型安全的配置属性即我们可以将自定义的配置内容直接对应到一个配置类中,在应用启动后生成一个配置Bean供程序使用。

这一般在配置属性比较多的情况下使用,因为这种情况下使用@Value有些过于麻烦。

使用方法:

第一步:添加自定义配置数据

可以在默认的配置文件application.yml中添加,也可以在自定义的配置文件中添加(如果自定义配置文件,一定要定义成properties文件)

在application.yml中添加配置内容
  1. #属性映射测试
  2. app:
  3. name: springdemo
  4. size: 100M
  5. user: weiyihaoge
  6. version: 0.0.1
在myConfig.properties中添加配置内容
  1. app.name=springdemo2
  2. app.size=50M
  3. app.user=ahaha
  4. app.version=1.0.0

定义承接属性的Bean类

针对application.yml中定义的属性
  1. @Data
  2. @NoArgsConstructor
  3. @AllArgsConstructor
  4. @ConfigurationProperties("app")
  5. @Configuration
  6. public class AppProperty {
  7. private String name;
  8. private String size;
  9. private String user;
  10. private String version;
  11. }
针对自定义myConfig.properties中定义的属性
  1. @Data
  2. @NoArgsConstructor
  3. @AllArgsConstructor
  4. @ConfigurationProperties("app")
  5. @Configuration
  6. @PropertySource("classpath:/config/myConfig.properties")
  7. public class AppProperty {
  8. private String name;
  9. private String size;
  10. private String user;
  11. private String version;
  12. }

使用

  1. @Controller
  2. @RequestMapping("base")
  3. @Log4j2
  4. @Api(hidden = true)
  5. public class Base {
  6. @Autowired
  7. private AppProperty property;
  8. @RequestMapping(value = "/getProperties",method = RequestMethod.GET)
  9. @ResponseBody
  10. @ApiOperation(value = "获取配置属性", httpMethod = "GET")
  11. public String getProperty(){
  12. return property.toString();
  13. }
  14. }

执行结果

浏览器执行以下请求:

  1. http:127.0.0.1:8080/base/getProperties
默认配置文件的结果
  1. AppProperty(name=springdemo, size=100M, user=weiyihaoge, version=0.0.1)
自定义配置文件的结果
  1. AppProperty(name=springdemo2, size=50M, user=ahaha, version=1.0.0)

注意:如果在默认的配置文件和自定义配置文件中配置了同样的内容,那么自定义的内容将不会被映射,默认的配置文件中配置的信息会优先被映射。

SpringBoot基础系列-SpringBoot配置的更多相关文章

  1. springBoot基础系列--properties配置

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7183408.html SpringBoot中免除了大部分手动配置,但是对于一些特定的情况, ...

  2. 【SpringBoot 基础系列】实现一个自定义配置加载器(应用篇)

    [SpringBoot 基础系列]实现一个自定义配置加载器(应用篇) Spring 中提供了@Value注解,用来绑定配置,可以实现从配置文件中,读取对应的配置并赋值给成员变量:某些时候,我们的配置可 ...

  3. SpringBoot基础系列之自定义配置源使用姿势实例演示

    [SpringBoot基础系列]自定义配置源的使用姿势介绍 前面一篇博文介绍了一个@Value的一些知识点,其中提了一个点,@Value对应的配置,除了是配置文件中之外,可以从其他的数据源中获取么,如 ...

  4. SpringBoot基础系列-SpringCache使用

    原创文章,转载请标注出处:<SpringBoot基础系列-SpringCache使用> 一.概述 SpringCache本身是一个缓存体系的抽象实现,并没有具体的缓存能力,要使用Sprin ...

  5. SpringBoot基础系列-使用日志

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9996897.html SpringBoot基础系列-使用日志 概述 SpringBoot ...

  6. SpringBoot基础系列-使用Profiles

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9996884.html SpringBoot基础系列-使用Profile 概述 Profi ...

  7. 【SpringBoot基础系列】手把手实现国际化支持实例开发

    [SpringBoot基础系列]手把手实现国际化支持实例开发 国际化的支持,对于app开发的小伙伴来说应该比价常见了:作为java后端的小伙伴,一般来讲接触国际化的机会不太多,毕竟业务开展到海外的企业 ...

  8. SpringBoot基础系列一

    SpringBoot基础知识概览 特性 核心理念:约定优于配置 特点: 1. 开箱即用,根据项目依赖自动配置 2. 功能强大的服务体系,如嵌入式服务.安全 3. 绝无代码生成,不用写.xml配置,用注 ...

  9. 【SpringBoot基础系列-实战】如何指定 bean 最先加载(应用篇)

    [基础系列-实战]如何指定 bean 最先加载(应用篇) 在日常的业务开发中,绝大多数我们都是不关注 bean 的加载顺序,然而如果在某些场景下,当我们希望某个 bean 优于其他的 bean 被实例 ...

随机推荐

  1. mac效率工具

    前言:在命令行中切换目录是最常用的操作,我相信一遍又一遍重复“cd ls cd ls cd ls ……”绝对会让你抓狂. 记录一下,方便下次系统重装,哈哈 一. oh-my-zsh mac 预装了 z ...

  2. C++ STL编程轻松入门【转载】

    1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL "什么是STL?",假如你对STL还知之甚少,那么我想,你一定很想知道这个问题的答案,坦率地讲,要指望用短短数 ...

  3. [LeetCode] Find And Replace in String 在字符串中查找和替换

    To some string S, we will perform some replacement operations that replace groups of letters with ne ...

  4. CSS引用方式及样式层叠机制

    CSS引用方式有3种,三种分别为:外部引入.内部引入.行内样式,下面一 一进行介绍. 1.外部引入:CSS代码在一个独立的文件中,HTML通过Link标签引入到页面. 代码格式:<link re ...

  5. Java 短信发送

    package com.test; import org.apache.commons.httpclient.Header;import org.apache.commons.httpclient.H ...

  6. Java作业 十一(2017-11-13)

    /*关键字*/ package com.baidu.www; abstract class A { private String name; public A(String name) { this. ...

  7. Java中的线程协作之Condition

    一.Condition接口 1.Condition接口的常用方法介绍 /** * 已经获取到锁的线程调用该方法会进入等待状态,知道其他持有锁的线程通知(signal)等待队列中的线程或者被中断退出等待 ...

  8. JavaSSM框架面试

    一.Spring面试题 1.Spring 在ssm中起什么作用? Spring:轻量级框架 作用:Bean工厂,用来管理Bean的生命周期和框架集成. 两大核心: 1.IOC/DI(控制反转/依赖注入 ...

  9. [Swift]LeetCode1 .两数之和 | Two Sum

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

  10. [Swift]LeetCode987. 二叉树的垂序遍历 | Vertical Order Traversal of a Binary Tree

    Given a binary tree, return the vertical order traversal of its nodes values. For each node at posit ...