application.properties
为项目配置端口和context-path:
- server.port=8081
- server.servlet.context-path=/luckymoney
- 访问:http://localhost:8081/luckymoney/hello
application.yml
还有另外一种方式,可以作为项目的配置文件:application.yml
yml格式简洁、清晰
删除application.properites,创建application.yml,写法如下:
server:
port: 8081
servlet:
context-path: /luckymoney
注意,冒号后面要加一个空格,子属性与父属性之间空两格。
自定义属性配置,并在项目中使用@Value读取配置
在application.yml中设置minMoney=1
server:
port: 8081
servlet:
context-path: /luckymoney
minMoney: 1
在HelloController中使用用@Value注解,获取配置
package com.liujx.luckymoney;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
@RestController
public class HelloController {
@Value("${minMoney}")
private BigDecimal minMoney;
@GetMapping("/hello")
public String say() {
return "minMoney:" + minMoney;
}
}
在其他配置中引用minMoney
现在,需要为最小金额加上说明:最少要发1元,然后在say()方法中输出。
可以模仿minMoney,在application.yml中添加description,在HelloController中加上@Value注解。
但是,如果最小金额改了呢?
假如最小要发2元,minMoney和description都需要改,我们可以分别去改,但最好的方式是把description中引用minMoney
server:
port: 8081
servlet:
context-path: /luckymoney
minMoney: 2
description: 最少要发${minMoney}元
@RestController
public class HelloController {
@Value("${minMoney}")
private BigDecimal minMoney;
@Value("${description}")
private String description;
@GetMapping("/hello")
public String say() {
return "minMoney:" + minMoney + " description:" + description;
}
}
将配置信息加上前缀,在类中使用@Component与@ConfigurationProperties配合读取配置信息
如果,此时又要加上最大金额限制,就又要写@Value,如果有很多个配置,就更麻烦
其实可以加上前缀,limit,把所有的属性封装成一个类:
server:
port: 8081
servlet:
context-path: /luckymoney
limit:
minMoney: 2
maxMoney: 9999
description: 最少要发${minMoney}元, 最多${limit.maxMoney}元
创建一个类,LimitConfig,将配置中的属性对应起来,添加@Component和@ConfigurationProperties(Prefix = “limit”)两个注解
package com.liujx.luckymoney;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
@Component
@ConfigurationProperties(prefix = "limit")
public class LimitConfig {
private BigDecimal minMoney;
private BigDecimal maxMoney;
private String description;
public BigDecimal getMinMoney() {
return minMoney;
}
public void setMinMoney(BigDecimal minMoney) {
this.minMoney = minMoney;
}
public BigDecimal getMaxMoney() {
return maxMoney;
}
public void setMaxMoney(BigDecimal maxMoney) {
this.maxMoney = maxMoney;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
在HelloController中,使用limitConfig
package com.liujx.luckymoney;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
@RestController
public class HelloController {
@Autowired
private LimitConfig limitConfig;
@GetMapping("/hello")
public String say() {
return "说明:" + limitConfig.getDescription();
}
}
application多环境配置
在开发环境和生产环境很多配置是不同的。比如数据库配置往往就是两个不同的库。如果每次发布都要修改application文件是很不方便的。
其实可以划分出开发和生产两套配置:
- application-dev.yml
- application-prod.yml
开发的时候,希望是dev配置,因此在主配置文application.property中设置:
spring:
profiles:
active: dev
开发完,上了生产,可以将配置改成prod。
其实,不改代码也可以切换环境,在dev环境下,使用mvn打包,并使用java -jar启动,启动时,加上Dspring.profiles.active=prod,具体代码:
mvn clean package
java -jar -Dspring.profiles.active=prod XXX.jar