spring boot学习笔记1,配置文件,profiles 多环境配置,配置文件加载位置以及顺序

一、配置文件

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
发布了31 篇原创文章 · 获赞 1 · 访问量 5683

猜你喜欢

转载自blog.csdn.net/wjs040/article/details/92806792