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.propertiesapplication.yml(YAML 格式)、application.xml(XML 格式),

application.properties 示例:

server.port=8081

application.yml 示例:

server:port: 8081

application.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>

编写配置文件

server:port: 8081person:name: kikaage: 83maps:key1: v1key2: 2lists:- zhangsan- lisi- wangwubirth: 2011/01/01dog:name: ddage: 2

编写 Bean 类读取配置文件

@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;@Overridepublic 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 {@AutowiredPerson person; // 自动关联到这个类@Testpublic 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;

对比 @Value 和 @ConfigurationProperties 注解

  • @Value 只能一个个指定值,@ConfigurationProperties 则批量将配置文件中的属性注入类
  • @Value 支持 SpEL 表达式:@Value("#{11+3}")
  • @ConfigurationProperties 支持 JSR303 数据校验,需要引入 @Validated 注解配合,例如:
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {@Emailprivate String name; // 如果不满足邮箱校验,会报错//...

@PropertySource 和 @ImportSource 注解

@PropertySource 加载指定的配置文件

如果使用了非全局配置文件,自定义了配置文件的名称,可以用 @PropertySource 注解来加载:


@PropertySource(value ="classpath:person.yml")
@Component
@ConfigurationProperties(prefix = "person")
public class Person {private String name;private Integer age;private Date birth;//...

@ImportSource 导入 Spring 的配置文件并生效

通过 XML 向容器添加组件

之前都是用 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 {@AutowiredApplicationContext ioc;@Testpublic void testHelloService() {boolean b = ioc.containsBean("helloService");System.out.println(b);}
}

@Bean 注解的方式添加组件

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就是方法名@Beanpublic 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: dev

YAML 支持多文档块,如果多个环境的配置写在一个文件中,需要在每个文档块中声明对应的环境:

server:port: 8081
spring:profiles:active: prod---server:port: 8082
spring:profiles: dev---server:port: 8083
spring:profiles: prod

指定配置文件加载位置

Spring Boot 默认支持的配置文件名为 application.properties 和 application.yml,默认会依次扫描的位置包括:

  • file:./config/:当前项目下的 config 目录下,就是 项目目录/config
  • file:./:当前项目根目录下
  • classpath:/config/:类路径的 config 目录下,就是 /src/main/resources/config
  • classpath:/:类路径的 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=/hello
  • jar 包外部的 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

Spring Boot-配置相关推荐

  1. Spring Boot 配置元数据指南

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 遗失的拂晓 来源 | 公众号「锅外的大佬」 1. 概览 在编写 Spring Bo ...

  2. java多个数据库数据进行访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码...

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

  3. Spring Boot 配置随机数那些小技巧

    转载自  Spring Boot 配置随机数那些小技巧 Spring Boot支持在系统加载的时候配置随机数. 添加config/random.properties文件,添加以下内容: #随机32位M ...

  4. 19年8月 字母哥 第三章 spring boot 配置原理实战 用热点公司网不行

    第三章 spring boot 配置原理实战 3.1.结合配置加载讲解bean自动装配原理 3.2.详解YAML语法及占位符语法 3.3.获取自定义配置的两种实现方法 3.4.配置文件注入值数据校验 ...

  5. 在Spring boot 配置过滤器(filter)

    在spring boot 配置servlet filter 逻辑上与配置spring 是一样的. 不过相比spring 更加简化配置的难度. 这里只需要两步 1 创建一个自定义顾虑器并继承spring ...

  6. mysql 多数据源访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

  7. spring boot配置对上传文件的大小限制

    spring boot配置对上传文件的大小限制 spring-boot 2.0之前 Spring Boot1.4版本后配置更改为(默认单个文件最大1Mb,单次请求文件总数大小最大10Mb): spri ...

  8. spring boot配置logback日志

    spring boot配置logback日志 在上一篇spring boot入门里提过,Spring Boot默认的日志打印是logback,所以配置logback日志会很简单,但是也有注意的地方. ...

  9. spring boot配置druid(德鲁伊)

    spring boot配置druid(德鲁伊) 关于druid的介绍请看 阿里巴巴温少访谈 1.引入相关依赖,全部依赖是上一篇spring boot+mybatis依赖的基础上,再加上下边的依赖,如下 ...

  10. spring boot配置mybatis和事务管理

    spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spri ...

最新文章

  1. 基于Tomcat5.0和Axis2开发Web Service代码详解
  2. 自动备份网站和数据库打包并上传FTP服务器并删除前30天文件
  3. TCP协议实现文件传输
  4. React学习:组件之间的关系、参数传递-学习笔记
  5. IT技术分类和就业特点
  6. Java 8中的HashMap性能改进
  7. python重复输入上面指令_stdin stdout python:如何重复使用同一输入文...
  8. Python接口自动化之logging封装及实战
  9. Yii 文件上传类的使用
  10. 【java学习之路】(javaWeb【后端】篇)002.Servlet
  11. 如何在FL Studio中对整首歌曲音量进行调整
  12. Java处理Json数据
  13. paip.提升用户体验-----找回密码的设
  14. 微醺时代的白酒新锐:政策“理想”与现实“骨感”的夹缝进击
  15. 如何定制支持用户自定义boot参数的基于debian os的live cd
  16. Conventional Commits那些事
  17. Redisson封装及应用实例
  18. DNS工作原理及解析过程
  19. English 动词篇
  20. GRNN神经网络学习笔记_matlab

热门文章

  1. jmeter上传文件踩坑指南
  2. 小胖子学spring-aop
  3. Shell和Python中的“正三角”和“倒三角”
  4. vscode插件Todo Tree配置
  5. 初识Kinect之二
  6. 白糖详细 制造工艺、等级划分、国家标准号和注意事项
  7. rds是什么云模式_IaaS、PaaS、SaaS、DaaS都是什么?
  8. 使用fpdf2将txt文本转可编辑pdf报错解决办法
  9. 中文手机评论情感分类系列(三)
  10. 《Python机器学习及实践:从零开始通往Kaggle竞赛之路》第4章 实战篇 学习笔记(三)4.3IMDB影评得分估计总结