spring boot/cloud 启动方式

springboot,springcloud是最近几年兴起的java开源框架,spring cloud更多注重服务注册以及服务治理,通俗来讲就是我们所说的微服务,需要注意的是spring cloud是基于spring boot的扩展版,关于更多spring boot 以及spring cloud 文档请查看官方文档!

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声明的默认属性。
application.properties和application.yml文件可以放在一下四个位置:

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属性来区分对应配置,比喻:运维配置,业务配置,还有其他配置,如下:

默认配置文件:application.yml或application.properties,需要注意的是:开发环境激活的属性为:dev以及ops;生产环境激活的属性为:prod以及ops,如下代码所示:

开发环境(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版本!


猜你喜欢

转载自blog.51cto.com/blief/2118978