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

桃扇骨 2022-06-12 06:38 341阅读 0赞

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

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

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

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

  1. 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,该设置在样例工程中可见,可通过删除该值或使用命令行来设置该值来验证。

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

Java系统属性

  1. 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

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

属性名匹配规则

  1. @Component
  2. @ConfigurationProperties(prefix="person")
  3. public class ConnectionSettings {
  4. private String firstName;
  5. }

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

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

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

  1. @Component
  2. @ConfigurationProperties(prefix="connection")
  3. public class ConnectionSettings {
  4. @NotNull
  5. private InetAddress remoteAddress;
  6. // ... getters and setters
  7. }

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

发表评论

表情:
评论列表 (有 0 条评论,341人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringBoot属性配置实战(多环境)

    在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口、日志级别等配置都会不同,如果在