一、配置文件
1、配置文件注入
配置文件中最大的注意点就是要有空格,尤其是yml中
1、properties配置文件在idea中默认是utf-8可能会乱码,解决方法是将file encoding里面配置编码的旁边的复选框勾上。
2、@value和@ConfigurationProperties的使用
@value对单个属性进行注入
@ConfigurationProperties 对应全局属性注入,要进行指定前缀“prefix = “person””
@PropertySource 是引入自定义配置文件
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
//@Value("name")
private String name;
private Integer age;
}
@ImportResource(locations = {“classpath:xxx.xml”}):加载自定义配置的bean文件。一般不建议这样使用。推荐使用配置类进行配置
@configguration
public class MyAppConfig{
//将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名
@Bean
public HelloService hellService(){
return new HelloService;
}
}
2、配置文件占位符
1、在配置文件中可以直接使用随机数如:
${random.uuid},${random.int},${random.long},${random.int(10)}
2、使用配置文件中的变量
person.name=zhangsan
dog.name = ${person.name}
3、profiles 多环境配置
1、多profile文件
我们在主配置文件编写的时候,文件名可以是application-{profile}.properties/yml,默认使用application.properties的配置
2、yml支持多文档块方式,—表示文档分隔
///---表示文档分隔
server:
port: 8081
spring:
profiles:
active: prod
---
server:
port: 8083
spring:
profiles: dev
---
server:
port: 8084
spring:
profiles: prod
3、激活指定profile
1)在配置文件中指定 spring.profiles.active=dev
2)命令行:
java -jar spring-boot-myproject.jar --spring.profiles.active=dev;可以直接在测试的时候,配置传入命令行参数
3)虚拟机参数: -Dspring.profiles.active=dev
4、配置文件加载位置
spring boot 启动会扫描以下位置的application.properties或者application.yml文件作为spring boot的默认配置文件
- file:./config/
- file:./
- classpath:./config/
- classpath:./
- 以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容,** 互补配置 **
- 我们也可以通过配置spring.config.location来改变默认配置
外部配置文件的使用:只在运维时起作用,即项目打包部署时指定
java -jar spring-boot-myproject.jar --spring.config.location=G:/xx.properties
项目打包以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些文件会形成互补的作用。
5、外部配置加载顺序
1、命令行优先级最高
2、由jar外向jar内查找,优先加载带profile,再来加载不带profile
3、@configuration等注解上的@propertySource
6、自动配置原理
可以在org.springframework.boot:spring-boot-autoconfigure:2.1.1release(版本号根据自己的项目而定)里面的spring-boot-autoconfigure-2.1.1.release.jar下面的META-INF下面的文件spring.factories,该文件中有很多配置类,需要进行配置时,若不知道都有哪些属性,可打开参考里面的属性。
2、@Condition派生注解(spring注解版原生的@Conditional作用)
作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置里面所有内容才生效。
@Conditional扩展注解 | 作用(判断是否满足当前指定条件) |
@ConditionalOnJava | 系统的java版本是否符合要求 |
@ConditionalOnBean | 容器中存在指定Bean |
@ConditionOnMissingBean | 容器中不存在指定Bean |
@ConditionalOnExpression | 满足SpEL表达式指定 |
@ConditionalOnClass | 系统中指定的类 |
@ConditionalOnMissingClass | 系统中没有指定的类 |
@ConditionalOnSingleCandidate | 容器中只有一个指定的Bean,或者这个Bean是首选Bean |
@ConditionalOnProperty | 系统中指定的属性是否有指定的值 |
@ConditionalOnResource | 类路径下是否存在指定资源文件 |
#通过启用debug属性,来让控制台打印出那些类匹配上,哪些类还未导入
debug=true