SpringBoot属性配置实战(多种方式)

Spring Boot 允许通过多种配置方式来注入属性或者修改默认的配置。

Spring Boot 支持多种配置方式,这些方式优先级如下:

1.命令行参数
2.来自java:comp/env的JNDI属性
3.Java系统属性(System.getProperties())
4.操作系统环境变量
5.RandomValuePropertySource配置的random.*属性值
6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
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.@Configuration注解类上的@PropertySource
11.通过SpringApplication.setDefaultProperties指定的默认属性

 
命令行参数
参数通过 –xxx=xxx 的形式传递,示例如下:

Java -jar app.jar --name="Spring" --server.port=9090

可以使用的参数可以是我们自己定义的,也可以是Spring Boot中默认的参数。
注意:命令行参数一定要写在app.jar的后面!

在命令行运行时,连续的两个减号–就是对application.properties中的属性值进行赋值的标识。所以,java -jar xxx.jar –server.port=9090 命令,等价于我们在application.properties中添加属性server.port=9090,该设置在样例工程中可见,可通过删除该值或使用命令行来设置该值来验证。

通过命令行来修改属性值固然提供了不错的便利性,但是通过命令行就能更改应用运行的参数,那岂不是很不安全?是的,所以Spring Boot提供了屏蔽命令行访问属性的设置,只需要这句设置就能屏蔽:
SpringApplication.setAddCommandLineProperties(false)

Java系统属性

java -Dname="MyApp" -jar app.jar --name="Tom"

可以配置的属性都是一样的,优先级不同。
注意:Java系统属性的位置 ,区别于命令行参数的位置。

操作系统环境变量

配置过JAVA_HOME的应该都了解这一个;
这里需要注意的地方,有些OS可能不支持使用 . 这种名字,如server.port,这种情况可以使用SERVER_PORT来配置。

应用配置文件(.properties或.yml)

属性配置文件的位置 spring 会从 classpath 下的 /config 目录或者classpath的根目录查找a pplication.properties 或 application.yml 。
/config优先于classpath根目录

SpringApplication.setDefaultProperties

SpringApplication application = new SpringApplication(Application.class);
Map<String, Object> defaultMap = new HashMap<String, Object>();
defaultMap.put("name", "Tom");
//还可以是Properties对象
application.setDefaultProperties(defaultMap);
application.run(args);

属性名匹配规则

@Component
@ConfigurationProperties(prefix="person")
public class ConnectionSettings {

    private String firstName;

}

firstName可以使用的属性名如下:

1.person.firstName,标准的驼峰式命名
2.person.first-name,虚线(-)分割方式,推荐在.properties和.yml配置文件中使用
3.PERSON_FIRST_NAME,大写下划线形式,建议在系统环境变量中使用

属性验证
可以使用JSR-303注解进行验证,例如:

@Component
@ConfigurationProperties(prefix="connection")
public class ConnectionSettings {

    @NotNull
    private InetAddress remoteAddress;

    // ... getters and setters

}

参考:http://blog.csdn.net/isea533/article/details/50281151

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值