properties匹配规则
根据命名约定(命名格式:application-{profile}.properties)来配置,如果active赋予的参数没有与使用该命名约定格式文件相匹配的话,app则会默认从名为application-default.properties 的配置文件加载配置。
如:spring.profiles.active=hello-world,sender,dev 有三个参数,其中 dev 正好匹配下面配置中的application-dev.properties 配置文件,所以app启动时,项目会先从application-dev.properties加载配置,再从application.properties配置文件加载配置,如果有重复的配置,则会以application.properties的配置为准。
举例说明:
配置文件命名如下图:
- application.yml
spring:
profiles:
active: dev
- application-dev.yml
app:
name: dev
- application-test.yml
app:
name: test
- 代码编写 由于application-yml配置的spring.profiles.active: dev
@RestController
public class HelloController {
@Value("${app.name}")
private String name;
@GetMapping("getname")
public String getName(){
return "app name: "+ name;
}
}
输出结果:
app name: dev
使用@Profile注解
举例说明:
- 定义业务接口
public interface HelloService {
public void send();
}
2.实现接口,定义具体业务
@Service
@Profile("dev")
public class HelloServiceDevImpl implements HelloService {
@Override
public void send() {
System.out.println("开发环境执行的业务");
}
}
-------------------------------------
@Service
@Profile("test")
public class HelloServiceTestImpl implements HelloService {
@Override
public void send() {
System.out.println("测试环境执行的业务");
}
}
- 调用接口
//注入业务接口
@Autowired
private HelloService helloService ;
调用方法
public void fun(){
helloService.send();
}
通过命令行设置属性值
在命令行运行时,连续的两个减号–就是对application.properties中的属性值进行赋值的标识
test、dev、pro
执行java -jar xxx.jar --spring.profiles.active=test,也就是测试环境的配置(test)
执行java -jar xxx.jar --spring.profiles.active=dev,也就是开发环境的配置(dev)