@Value()获取值和@ConfigurationProperties(prefix = "hhh")获取值的比较
@ConfigurationProperties(prefix = "hhh") | @Value() | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个的注入配置文件的属性 |
SpEl | 不支持表达式 | 支持表达式 |
JSR303数据校验 | 支持@Validate @Email | 不支持 |
负责类型 | 支持 | 不支持 |
配置文件yml和properties他们都能获取到属性值
- [ ] 如果说,我们只是在某个业务逻辑上需要获取一下配置文件中的值,推荐使用@Value
- [ ] 如果说,我们专门编写一个Java Bean来和配置文件进行映射的时候,就直接使用@ConfigurationProperties
@PropertiesSource和ImportResource
@PropertySource(value = {"classpath:person.properties"})//加载指定的配置文件
@ImportResource:导入spring的配置文件让配置文件生效
首先编写beans.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="helloService" class="com.asher.service.HelloService"></bean>
</beans>
然后,
SpringBoot里面没有Spring的配置文件,我们自己编写配置文件,也不能自动识别
如果想让Spring的配置文件生效,在Spring Boot启动类中添加注解@ImportResource
其中locations可以指定路径
@ImportResource(locations = {"classpath:beans.xml"})
@SpringBootApplication
public class SpringBoot01HelloworldQuickApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBoot01HelloworldQuickApplication.class, args);
}
}
<font color="red">上面的方式springboot已经不推荐使用了</font>
Spring Boot推荐给容器中添加组件的方式
1、配置类 spring的配置文件
/**
* @Configuration: 指明当前类是一个配置类,用它来代替spring的配置文件
*/
@Configuration
public class MyAppConfig {
//将方法的返回值添加到容器中,容器中的这个组件默认的id就是方法的名字
@Bean
public HelloService helloService(){
return new HelloService();
}
}
配置文件的占位符
RandomValuePropertySource:配置文件中可以使用随机数
${random.uuid}
${random.value}
${random.int}
${random.long}
${random.int(10)}
${random.int[1024,65536]}
属性配置占位符
app.name=MyApp
app.description=${app.name} is a SpringBoot application
- 可以在配置文件中引用前面配置过的属性(优先级前面配置过的这里都能用)
- ${app.name:默认值}来指定找不到属性时的默认值
Profile
Profile是spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境
1、多profile文件形式:
格式:application-{profile}.properties/yml
- application-dev.properties application-prod.properties
其中application-dev或者application-prod文件名包含的"dev"和"prod"并不是固定的,可以换成其他的文件名
2、多profile文档块模式:
3、激活模式
命令行:
--spring.profiles.active=dev
配置文件
spring.profiles.active=dev
jvm参数
-Dspring.profiles.active=dev
-
在配置文件(application.properties)中指定spring.profiles.active=dev
配置文件 - 如果是yml文件
server:
port: 8081
spring:
profiles:
active: prod #它进行指定具体的配置
--- #通过---实现代码块分隔
server:
port: 8087
spring:
profiles: dev #没有子节点active
---
server:
port: 8088
spring:
profiles: prod
命令行的形式进行配置:
也可以在通过maven打jar包的形式在命令行进行配置,在使用maven打jar包的时候,出现了一个小问题
解决办法:maven打jar包,配置文件没有被打入
命令行配置
JVM虚拟机的方式进行配置
JVM虚拟机命令行配置
网友评论