Spring 官方完整文档:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle Spring 官方配置文档:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config 参考:https://segmentfault.com/a/1190000014206897
Spring Boot 采用的“默认大于配置”的原则,即使没有配置,也可以使用默认配置正常启动应用。
默认全局配置文件的文件名是 application,常见的有 application.properties、application.yml(YAML 格式)、application.xml(XML 格式),
application.properties 示例:
server.port=8081application.yml 示例:
server: port: 8081application.xml 示例:
<server> <port>8081</port> </server>要通过 @ConfigurationProperties 注解使用配置文件,需要先 导入依赖,IDEA 会很智能的在自动导入依赖失败时,弹出 Spring 提示的相关文档信息,根据提示操作即可。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>@ConfigurationProperties(prefix = "person") 注解将当前类中的所有属性跟配置文件绑定,可以通过参数 prefix 指定前缀。配置文件的文件名必须是 application,例如 application.yml、application.properties、application-dev.yml 等。对于自定义的配置文件,需要用 @PropertySource 注解指定。
@Component 注解将当前类添加到 Spring 容器中,从而可以使用容器的各种功能。
@Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Date birth; private Map<String, Object> maps; private List<Object> lists; private Dog dog; @Override public String toString() { return "Person{" + "name=" + name + ", age=" + age + ", birth=" + birth + ", maps=" + maps + ", lists=" + lists + ", dog=" + dog + "}"; } //... getter/setter 方法在 /src/test/java/包名 下面,有 XXApplicationTests 测试类。借助测试类,可以方便的注入。
通过这个测试类来检查刚才的配置是否加载成功:
@RunWith(SpringRunner.class) @SpringBootTest public class DemoQuickApplicationTests { @Autowired Person person; // 自动关联到这个类 @Test public void contextLoads() { System.out.println(person); // 测试输出 } }测试文件写完后,右击运行测试类即可执行测试,查看控制台的输出即可。
通过 @ConfigurationProperties 引入整个配置文件,用 @Value 可以引入单个配置。@Value 注解支持3种语法:
字面量,例如 true/false#{SpEL} 表达式,例如 #{3+5}${key},从环境变量、配置文件中获取值 @Value("${person.name}") private String name; @Value("#{11+3}") private Integer age; @Value("true") private Boolean adult;如果使用了非全局配置文件,自定义了配置文件的名称,可以用 @PropertySource 注解来加载:
@PropertySource(value ="classpath:person.yml") @Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Date birth; //...之前都是用 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.kikakika.demo_quick.service.HelloService"></bean> </beans> 然后在代码中通过 @ImportSource 注解引入组件,注意这个注解要加在 Spring Boot 的启动类上: @ImportResource(locations = {"classpath:beans.xml"}) @SpringBootApplication public class DemoQuickApplication { public static void main(String[] args) { SpringApplication.run(DemoQuickApplication.class, args); } } 最后,写个测试用例检查一下,执行下面的 testHelloService 方法即可: @RunWith(SpringRunner.class) @SpringBootTest public class DemoQuickApplicationTests { @Autowired ApplicationContext ioc; @Test public void testHelloService() { boolean b = ioc.containsBean("helloService"); System.out.println(b); } }Spring Boot 开始,推荐用 @Bean 注解的方式添加组件,用配置类替代配置文件:
package com.kikakika.demo_quick.config; import com.kikakika.demo_quick.service.HelloService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MyConfig { // @Bean 注解可以将方法返回值添加到容器中,容器中对应组件的默认ID就是方法名 @Bean public HelloService helloService() { System.out.println("success add component"); return new HelloService(); } }类写完后,不需要在 Spring Boot 的启动类中引入,Spring 扫描文件后会自动引入,再执行一次上面的测试,可以看到结果。
Spring Boot 的配置文件中,可以指定占位符,会自动解析,类似格式化输出中的 %d、\n 等,语法:
${prefix.key[:default-value]}例如 ${person.name:zhangsan},系统解析时找不到 person.name 属性时,会自动使用默认值 zhangsan,否则使用找到的属性。
占位符中,有个特殊的随机值 random,可以生成随机的整型、字符串、UUID 等,例如 ${random.int}、${random.uuid} 等
person: name: kika${random.uuid} age: ${random.int} maps: key1: ${person.age:30} key2: 2在开发、测试、生产环境的配置文件通常是不同的,有下面几种方式可以指定配置文件:
在配置文件中指定 spring.profiles.active=dev传入命令行参数:java -jar xx.jar --spring.profiles.active=dev传入虚拟机参数:-Dspring.profiles.active=dev一般会将不同环境的配置文档独立,例如:
默认用 application.yml 文件测试环境使用 application-dev.yml 文件生产环境使用 application-prod.yml 文件Spring Boot 会默认加载 application.yml 文件,所以可以在这个文件里指定要激活使用的配置文件,例如下面例子会加载 application-dev.yml 文件:
spring: profiles: active: devYAML 支持多文档块,如果多个环境的配置写在一个文件中,需要在每个文档块中声明对应的环境:
server: port: 8081 spring: profiles: active: prod --- server: port: 8082 spring: profiles: dev --- server: port: 8083 spring: profiles: prodSpring Boot 默认支持的配置文件名为 application.properties 和 application.yml,默认会依次扫描的位置包括:
file:./config/:当前项目下的 config 目录下,就是 项目目录/configfile:./:当前项目根目录下classpath:/config/:类路径的 config 目录下,就是 /src/main/resources/configclasspath:/:类路径的 config 目录下,就是 /src/main/resources,默认就在这里可以通过 spring.config.location 改变默认的配置文件位置。
外部配置官方文档:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config
Spring Boot 支持多种外部配置,常见的有(按优先级从高到低排列):
命令行参数,优先级最高,例如 java -jar xx.jar --server.port=8088 --server.context-path=/hellojar 包外部的 appplication-{profile}.properties 或 application.yml(带 spring.profile)配置文件,只要跟 jar 包在同一个目录即可生效jar 包内部的 appplication-{profile}.properties 或 application.yml(带 spring.profile)配置文件jar 包外部的 appplication.properties 或 application.yml(不带 spring.profile)配置文件,只要跟 jar 包在同一个目录即可生效jar 包内部的 appplication.properties 或 application.yml(不带 spring.profile)配置文件转载于:https://www.cnblogs.com/kika/p/10851517.html
