spring boot 使用自定义配置

在spring boot的自动配置中,即使不使用写任何配置文件,通过默认配置大多都可以运行起来。但是有些时候这些配置并不能满足我们的需求,需要我们自己的定制。例如:数据源地址,中间件地址等,默认的都是本机localhost,当然我们实际使用过程中一般都不会在同一台机器

事实上,Spring Boot自动配置的Bean提供了300多个用于微调的属性。当你调整设置时,只要在环境变量、Java系统属性、JNDI(Java Naming and Directory Interface) 、命令行参数或者属
性文件里进行指定就好了。

举个简单的例子:
在命令行运行程序时,Spring boot 会有一个启动的Banner。如果你想禁用掉这个Banner的话,可以将spring.main.show-banner 属性设置为 false。下面有几种实现方式:

  1. 在运行应用程序的命令行参数里指定:
    $ java -jar readinglist-0.0.1-SNAPSHOT.jar --spring.main.show-banner=false

  2. 创建一个名为application.properties的文件,包含如下内容:
    spring.main.show-banner=false

  3. 也可以创建名为application.yml的,

    spring:
    main:
    show-banner: false
  4. 将属性设置为环境变量。举例来说,如果你用的是bash或者zsh,可以用 export 命令:
    $ export spring_main_show_banner=false
    ps:请注意,这里用的是下划线而不是点和横杠,这是对环境变量名称的要求。

实际上,Spring Boot应用程序有多种设置途径。Spring Boot能从多种属性源获得属性,包括
如下几处。
(1) 命令行参数
(2) java:comp/env 里的JNDI属性
(3) JVM系统属性
(4) 操作系统环境变量
(5) 随机生成的带 random.* 前缀的属性 (在设置其他属性时, 可以引用它们, 比如 ${random.
long} )
(6) 应用程序以外的application.properties或者appliaction.yml文件
(7) 打包在应用程序内的application.properties或者appliaction.yml文件
(8) 通过 @PropertySource 标注的属性源
(9) 默认属性这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性。例如,命令行参数会覆盖其他属性源里的属性。

application.properties和application.yml文件能放在以下四个位置。
(1) 外置,在相对于应用程序运行目录的/config子目录里。
(2) 外置,在应用程序运行的目录里。
(3) 内置,在config包内。
(4) 内置,在Classpath根目录。
同样,这个列表按照优先级排序。也就是说,/config子目录里的application.properties会覆盖
应用程序Classpath里的application.properties中的相同属性。
此外, 如果你在同一优先级位置同时有application.properties和application.yml, 那么application.
yml里的属性会覆盖application.properties里的属性。

一般开发中,开发者的配置文件配置的参数和集成环境是不一样。一般做法是:

  • jekins打包的时候,根据不同的环境拉取外部配置文件然后把配置文件一起打包到jar中
  • 项目启动的时候,直接使用外部的配置文件
  • Spring boot 中可以用Profile进行配置,准备多个环境的配置文件
  • 类似于Spring Cloud Config的远程配置中心,进行动态的获取

参考:《Spring boot 实战》

你可能感兴趣的:(spring)