1、Spring中的外部配置
1.1、都有哪些配置
- 常见配置项
配置对我们来说最常见的就是我们项目开发中.properties或这个.ymal文件中的配置项;
我们在启动jar文件时输入的java -jar xxx.jar name=张三 pwa=123这些配置项;
在idea的配置项Program argument中的配置项,这些都是和我们开发息息相关的配置项; - 其他配置项
但其实配置还包括环境变量(如JAVA_HOME,MAVEN_HOME)等配置;
还有JVM和操作系统相关的配置项,这些都属于配置项;
环境变量配置和JVM等相关配置JDK分别使用Map<String, String> getenv = System.getenv()和Properties properties = System.getProperties()帮我们进行了封装;我们只需要获取Map集合或Properties对象就可以获取以上配置项内容;
其他配置中,系统相关的配置项和值不是用户自定义的,是取自JVM和操作系统的固有属性,不像常见配置一样可以自定义;
1.2、配置格式是什么:
根据.properties和.yaml配置文件中的配置格式,idea和jar包命令启动配置参数格式,以及JDK封装的环境变量和系统参数的配置格式我们可以得出配置项的格式就是key-value的格式;实际上不仅JDK,Spring中也是采用Property这种key-value方式来存储配置项的;
1.3、Spring中的外部配置
- Spring中的外部配置指的是什么
以上的配置项对Spring项目来说都是外部传进来的配置,所以将这些配置统一称为外部配置;并且将这些配置保存在Properties对象中。 - Spring外部配置分类
因为配置的方式多种多样的,有配置文件的,有系统环境变量的,有系统属性的等,而Spring框架都兼容了这些配置,那么Spring是如何做来兼容这些配置的呢?答案就是通过来源(Source)来兼容,即将配置文件中的所有配置项封装进一个Properties对象中,然后使用一个Source源来标识,将系统环境变量所有配置项封装进一个Properties中然后使用一个Source源来标识;这样将不同的配置使用分类的方式来简化管理; - Spring中的Environment
对外部配置分类,方便了Spring框架对配置的管理和扩展,目前Spring框架配置来源分类多达十几种,如何对这些分类进行统一管理呢,答案就是Environment;Spring框架将所有来源的配置都放进了Environment对象中,通过它来管理所有的外部配置; - Environment功能
虽然我们都配置是多源的,但是配置的格式都是Key-Value的,在获取时不可能是遍历源然后去拿数据,所以Environment就帮我们做了这些操作,我们只需要告诉Environment我们需要什么配置就可以,不需要知道配置来自那里;这也是典型的门面模式;
注意:JDK中的两种配置集合对Spring框架来说也是外部配置:Map<String, String> getenv = System.getenv()和Properties properties = System.getProperties();我们通过Environment获取配置时Spring会把从这两个对象中获取的配置返回给我们;