Spring Boot 配置文件

前言

本文是我学习spring boot一段时间之后,闲来无事整理出来的,旨在整理思路,梳理知识点。借鉴了不少其他博客,其中也有自己的理解。

这一篇要比我整理的更加详细易懂,也是我借鉴比较多的一篇,作者就Spring boot 写了一系列博客,需要的人请移步~

传送门: https://www.cnblogs.com/zheting/p/6707036.html 

 

 

application.properties

关于Spring Boot应用的配置内容都可以集中在该文件中,根据我们引入的不同starter模块,可以在这里定义端口号、数据库连接信息、日志级别等各种配置信息。

同时,Spring Boot 的配置文件还支持YAML文件。

YAML 目前还有一些不足,无法通过@PropertySource 注解来加载配置。但是,YAML将属性加载到内存中保存的时候是有序的,所以当配置文件中的信息需要具备顺序含义时,YAML的配置方式比起properties配置文件更有优势。

YAML文件格式:

server:
  port: 9007
  context-path: /market
management:
  port: 8007
  security:
   enabled: false

.properties 文件格式:

server.port=9007
server.context-path=/market
management.port=8007
management.security.enabled=false
   

以上两段代码,起到的作用是一样的。 不过需要注意的是,YAML文件格式需要特别注意。

 

自定义参数

通过@value(“${xxxx.xxxx}”)加载自定义参数

@value 注解加载属性值的时候,可以支持两种表达方式:

1.PlaceHolder 方式:${......} 大括号内为 PlaceHolder

2.SpEL 表达式: #{......} 大括号内为 SpEL

例:

 自定义属性,配置一些常量:

com.sys.name="张三"
com.sys.age=24

 

然后直接在要是用的地方通过@Value(value="${config.name}")就可以绑定到想要的属性上面:

@RestController
public class userController {

    @Value("${com.sys.name}")
    private  String name;

    @Value("${com.sys.age}")
    private  Integer age;
    
}

 

有时候属性太多,一个一个的绑定到属性字段上太累,官方提倡使用绑定为一个对象的属性bean.

例:

我们新建一个ConfigBean.java的类,顶部使用@ConfigurationProperties(prefix = "com.sys")来指明使用的属性前缀:

@ConfigurationProperties(prefix = "com.sys")
public class ConfigBean {
    
    private String name;
    private Integer age;

//    getter 和setter 一定要有
    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }
}

 在Spring boot入口类加上@EnableConfigurationProperties({ConfigBean.class},指定加载具体bean.


@SpringBootApplication
@EnableConfigurationProperties({ConfigBean.class})
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}

使用时,在controller中引入ConfigBean使用即可:


@RestController
public class userController {

//    属性Bean方式
    @Autowired
    ConfigBean configBean;

}

 

参数间引用

在application.properties中的各个参数之间也可以直接引用来使用。

例:


com.sys.name="张三"
com.sys.age=12
com.sys.msg=${com.sys.name}今年${com.sys.age}岁

随机值配置

配置文件中${random}可以生成不同的类型的随机值,简化了代码生成的麻烦。

例:

com.sys.number=${random.int}
com.sys.long=${random.long}
com.sys.str=${random.value}

外部配置-命令行参数配置

Spring Boot是基于jar包运行的,打成jar包的程序可以直接通过命令运行: java -jar xx.jar

可以通过命令修改如tomcat端口号等配置 : java -jar xx.jar  --server.port=9090

等价于 application.properties 文件中的  server.port=9090

如果怕命令行有风险,可以使用SpringApplication.setAddCommandLineProperties(false)禁用。

自定义配置文件

除了默认的 application.properties ,开发者还可以自行定义配置文件。

例如,我新建了一个test.properties 文件,路径也放在src/main/resources 下

com.test.name="李四"
com.test.age=15

新建一个 属性bean(spring boot 版本  >= 1.5):

@Configuration
@ConfigurationProperties(prefix = "com.test")
@PropertySource("classpath:test.properties")
public class ConfigTestBean {

    private String name;
    private Integer age;
 
    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }
}

如果使用的是1.5之前的版本,可以通过locations指定文件位置

@ConfigurationProperties(prefix = "com.test",locations="classpath:test.properties")

 

配置属性的优先级

 

Spring Boot应用程序有多种设置途径,Spring Boot能从多重属性源获得属性,包括如下几种(优先级由高到低,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性):

1.根目录下的开发工具全局设置属性(当开发工具激活时为`~/.spring-boot-devtools.properties`)。

2.测试中的@TestPropertySource注解。

3.测试中的@SpringBootTest#properties注解特性。

4.命令行参数

5.SPRING_APPLICATION_JSON中的属性(环境变量或系统属性中的内联JSON嵌入)。

6.ServletConfig初始化参数。

7.ServletContext初始化参数。

8.java:comp/env里的JNDI属性

9.JVM系统属性

10.操作系统环境变量

11.随机生成的带random.* 前缀的属性(在设置其他属性时,可以应用他们,比如${random.long})

12.应用程序以外的application.properties或者appliaction.yml文件

13.打包在应用程序内的application.properties或者appliaction.yml文件

14.通过@PropertySource标注的属性源

15.默认属性(通过`SpringApplication.setDefaultProperties`指定).

 

配置文件的优先级

 

application.properties和application.yml文件可以放在一下四个位置(优先级由高到低):

- 外置,在相对于应用程序运行目录的/congfig子目录里。

- 外置,在应用程序运行的目录里

- 内置,在config包内

- 内置,在Classpath根目录

也就是说,src/main/resources/config下application.properties覆盖src/main/resources下application.properties中相同的属性,如图:

配置文件

此外在相同优先级位置同时有application.properties和application.yml,那么application.yml里面的属性就会覆盖application.properties里的属性。

整合配置属性的优先级 和 配置文件的优先级   后,形成以下在开发过程中需要注意的优先级序列:

  1. 在命令行中传入的参数
  2. SPRING_APPLICATION_JSON 中的属性 .SPRING_APPLICATION_JSON 是以json格式配置在系统环境变量中的内容。
  3. java:comp/env 中的JNDI属性
  4. Java 的系统属性,可以通过 System.getProperties()获得的内容
  5. 操作系统的环境变量
  6. 通过random.*配置的随机属性
  7. 位于当前应用jar包之外,针对不同{profile}环境的配置文件内容,例如application-{profile}.properties或者是YAML定义的配置文件
  8. 位于当前应用jar包之内,针对不同{profile}环境的配置文件内容,例如application-{profile}.properties或者是YAML定义的配置文件
  9. 位于当前应用jar包之外的, 例如application.properties或者是YAML定义的配置文件
  10. 位于当前应用jar包之内的, 例如application.properties或者是YAML定义的配置文件
  11. 在@Configuration 注解修改的勒种,通过@PropertySource注解定义的属性
  12. 应用默认属性,使用SpringApplication.setDefaultProperties定义的内容

 

 

多环境配置

application-{profile}.properties 格式

例如:

application-dev.properties 开发环境

application-test.properties 测试环境

application-prod.properties 生产环境

 

是否加载则由application.properties文件中 spring.profiles.active 属性来设置,其值对应配置文件中的{profile}值。

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值