spring boot 参考文档:
https://qbgbook.gitbooks.io ??? https://docs.spring.io/spring-boot/docs/current/reference/html/
spring cloud参考文档:
https://springcloud.cc ??? https://cloud.spring.io/spring-cloud-config/single/spring-cloud-config.html
一.关于spring boot/spring cloud 启动方式
由于spring boot/spring cloud构建完成后通常是以.jar后缀结尾的包,并且内嵌web承载容器,所以spring boot/spring cloud启动方式很简单,即(以tomcat为例):
java -jar xxxxxx-0.0.1-xxx.jar --spring.config.location=/path/application.properties
以上方式就可以启动spring boot/spring cloud应用
二.关于spring boot/spring cloud 配置生效顺序优先级
一般在一个项目中,总是会有好多个环境。比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一点不同,Spring Boot提供了一种优先级配置读取的机制来帮助我们从这种困境中走出来. 常规情况下,我们都知道Spring Boot的配置会从其对应的application.properties,(默认配置文件名为:application)中读取。实际上是从其jar包下resource目录下的application.propert读取配置。
在实际应用中管理配置并不是一个容易的任务,尤其是在应用需要部署到多个环境中时。通常会需要为每个环境提供一个对应的属性文件,用来配置各自的数据库连接信息、服务器信息和第三方服务账号等。
通常的应用部署会包含开发、测试和生产等若干个环境。不同的环境之间的配置存在覆盖关系。测试环境中的配置会覆盖开发环境,而生产环境中的配置会覆盖测试环境,所以Spring Boot 提供了一种统一的方式来管理应用的配置,允许开发人员使用属性文件YAML 文件、环境变量和命令行参数来定义优先级不同的配置值。
Spring Boot 所提供的配置优先级顺序比较复杂。按照优先级从高到低的顺序,具体的列表(从高到低)如下所示:
1.命令行参数(优先级最高)。
2.通过 System.getProperties() 获取的 Java 系统参数。
3.操作系统环境变量。
4.从java:comp/env 得到的 JNDI 属性。
5.通过 RandomValuePropertySource 生成的random.*属性。
6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件,通过spring.config.location参数指定
7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件
9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件
10.应用 Java配置类,包含@Configuration注解的 Java 类,通过@PropertySource注解声明的属性文件。
11.通过SpringApplication.setDefaultProperties声明的默认属性。
1.外置:在相对于应用程序运行目录的/congfig子目录里。
2.外置:在应用程序运行的目录里
3.内置:在config包内
4.内置:在Classpath根目录
如果Spring Boot在优先级更高的位置找到了配置,那么它就会忽略优先级低的配置。下面我们简单讲讲这些优先级。Spring Boot 的这个配置优先级看似复杂,其实是很合理的。命令行参数的优先级之所以被设置为最高,是因为可以方便我们在测试或生产环境中快速地修改配置参数值,而不需要重新打包和部署应用。SpringApplication 类默认会把以“--”开头的命令行参数转化成应用中可以使用的配置参数,如 “--name=Alex” 会设置配置参数 ,“name” 的值为 “Alex”。如果不需要这个功能,可以通过SpringApplication.setAddCommandLineProperties(false)禁用解析命令行参数。
如果应用为spring cloud构建,会引入bootstrap.yml或bootstrap.properties文件,注意spring cloud中bootstrap.yml配置会优先加载,即在应用启动前会先加载该配置,所以在同时存在application.yml配置文件和bootstrap.yml配置文件时候,这时会优先加载bootstrap.yml配置,同样bootstrap配置也可以外部配置,即在指定的配置目录新建该文件就可覆盖内嵌在jar包里的bootstrap.yml配置,注意此时只需要用命令行指定配置文件的目录,如A应用的配置文件为:/data/webs/A/conf/。
这时就需要用命令行 --spring.config.location=/data/webs/A/conf/
指定配置文件加载目录即可,需要注意的是:不管spring boot 还是spring cloud都可以通过命令行传参更改配置的优先级!
三.关于spring boot/spring cloud 配置文件名称
mo9微服务应用项目中,所有的配置文件name都是使用默认名称:application(不管后缀.properties或者.yml),统一使用默认名称,不过配置会结合profiles属性来区分对应配置,比喻:运维配置,业务配置,还有其他配置,如下:
开发环境(dev)
spring.profiles.active=dev
spring.profiles.include=ops
生产环境(prod)
spring.profiles.active=prod
spring.profiles.include=ops
通用运维配置文件:application-ops.yml或application-ops.properties
;主要配置内容为运维配置,比喻:内嵌tomcat服务端口,管理端口,最大连接数,超时时间,contxt-path等等运维上配置
开发环境业务配置文件:application-dev.yml或application-dev.properties
;主要内容为开发环境上业务的配置,比喻:数据库配置,nosql配置,mq配置,接口连接配置。
生产环境业务配置文件:application-prod.yml或application-prod.properties
;主要内容为生产环境上业务的配置,比喻:数据库配置,nosql配置,mq配置,接口连接配置。
三.关于spring boot/spring cloud 日志配置
默认情况下spring boot启动方式应用日志都是输出到控制台,如果我们需要输出到文件,则需要在application-ops.properties或application-ops.yml定义以下配置参数:logging.file 或 logging.path当然最直接的方式可以直接在启动时输出到某个文件,还可以自定义日志配置然后在application-ops.yml配置文件中通过以下配置应用即可
logging.config=/path/logback-spring.xml
注意:关于日志配置文件最好是以-spring.xml结尾的文件!
四.关于spring boot/spring cloud 框架版本
由于spring boot版本更新较快,目前最新版本为2.0,考虑到测试,生产环境配置文件的兼容性,所以在实际开发过程中建议大家使用2.0以下版本,例如1.5.8 release版本!
原文地址:http://blog.51cto.com/blief/2118978