Spring Boot入门(二)- 配置详解

转载自:http://blog.csdn.net/hguisu/article/details/51006252

自动化配置

  Spring Boot 对于开发人员最大的好处在于可以对 Spring 应用进行自动配置。Spring Boot会根据应用中声明的第三方依赖来自动配置Spring 框架,而不需要进行显式的声明。比如当声明了对 HSQLDB 的依赖时,Spring Boot 会自动配置成使用 HSQLDB 进行数据库操作。
  Spring Boot 推荐采用基于Java注解的配置方式,而不是传统的XML。只需要在主配置Java类上添加“@EnableAutoConfiguration”注解就可以启用自动配置。Spring Boot的自动配置功能是没有侵入性的,只是作为一种基本的默认实现。开发人员可以通过定义其他bean来替代自动配置所提供的功能。比如当应用中定义了自己的数据源bean时,自动配置所提供的HSQLDB就不会生效。这给予了开发人员很大的灵活性。既可以快速的创建一个可以立即运行的原型应用,又可以不断的修改和调整以适应应用开发在不同阶段的需要。可能在应用最开始的时候,嵌入式的内存数据库(如HSQLDB)就足够了,在后期则需要换成MySQL等数据库。Spring Boot 使得这样的切换变得很简单。

外部化配置

  在应用中管理配置并不是一个容易的任务,尤其是在应用需要部署到多个环境中时。通常会需要为每个环境提供一个对应的属性文件,用来配置各自的数据库连接信息、服务器信息和第三方服务账号等。Spring Boot 提供了一种统一的方式来管理应用的配置,允许开发人员使用属性文件、YAML 文件、环境变量和命令行参数来定义优先级不同的配置值。
  Spring Boot 所提供的配置优先级顺序比较复杂。按照优先级从高到低的顺序,具体的列表如下所示。

  1. 命令行参数;
  2. 通过 System.getProperties() 获取的 Java 系统参数;
  3. 操作系统环境变量;
  4. 从java:comp/env得到的JNDI属性;
  5. 通过RandomValuePropertySource生成的“random.*”属性;
  6. 应用Jar文件之外的属性文件;
  7. 应用Jar文件内部的属性文件;
  8. 在应用配置Java类(包含@Configuration注解的Java类)中通过@PropertySource注解声明的属性文件;
  9. 通过“SpringApplication.setDefaultProperties”声明的默认属性。

命令行参数

  通过java -jar app.jar --name="Spring" --server.port=9090方式来传递参数。
  SpringApplication 类默认会把以“–”开头的命令行参数转化成应用中可以使用的配置参数,如 “--name=Alex”会设置配置参数 “name”的值为 “Alex”。注意:命令行参数在app.jar的后面。
  可以通过SpringApplication.setAddCommandLineProperties(false)禁用命令行配置。

Java系统属性

  注意Java系统属性位置java -Dname="isea533" -jar app.jar,可以配置的属性都是一样的,优先级不同。例如java -Dname="isea533" -jar app.jar --name="Spring“中name值为Spring。
  在运行程序的时候,可以通过参数指定一个外部配置文件。例如: java -jar demo.jar –spring.config.location=/opt/config/application.properties

属性文件

  属性文件是最常见的管理配置属性的方式。Spring Boot 提供的 SpringApplication 类会搜索并加载application.propertiesapplication.yml文件来获取配置属性值。SpringApplication 类会在下面位置搜索该文件。

  1. 当前目录的“/config”子目录。
  2. 当前目录。
  3. classpath 中的“/config”包。
  4. classpath

  上面的顺序也表示了该位置上包含的属性文件的优先级。优先级按照从高到低的顺序排列。即:/config优先于classpath根目录。
  可以通过“spring.config.name”配置属性来指定不同的属性文件名称,也可以通过“spring.config.location”来添加额外的属性文件的搜索路径。如果应用中包含多个profile,可以为每个profile定义各自的属性文件,按照“application-{profile}”来命名。

  可以在配置文件中引用前面配置过的属性(优先级前面配置过的这里都能用)。

app.name=MyApp
app.description=${app.name} is a Spring Boot application

  通过如${app.name:默认名称}方法还可以设置默认值,当找不到引用的属性时,会使用默认的属性。
  通过属性占位符还能缩短命令参数,例如修改web默认端口需要使用--server.port=9090方式,如果在配置中写上:

server.port=${port:8080}

  那么就可以使用更短的--port=9090,当不提供该参数的时候使用默认值8080。

使用配置

  由于SpringApplication 类提供了对 YAML 配置文件的支持,只需要添加对 SnakeYAML 的依赖即可。示例使用application.yml来说明。

spring:
 profiles: development
db:
 url: jdbc:hsqldb:file:testdb
 username: sa
 password:
@Component
@ConfigurationProperties(prefix="db")
public class DBSettings {
 private String url;
 private String username;
 private String password;
}

  通过“@ConfigurationProperties(prefix="db")”注解,配置属性中以“db”为前缀的属性值会被自动绑定到Java类中同名的域上,只需要在应用的配置类中添加“@EnableConfigurationProperties”注解就可以启用该自动绑定功能。
  @ConfigurationProperties注解中可以使用locations来指定使用别的配置文件:

@ConfigurationProperties(prefix="db", locations = "classpath:config/other.properties")     )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值