Spring Boot-配置
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=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-配置相关推荐
- Spring Boot 配置元数据指南
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 遗失的拂晓 来源 | 公众号「锅外的大佬」 1. 概览 在编写 Spring Bo ...
- java多个数据库数据进行访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码...
之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...
- Spring Boot 配置随机数那些小技巧
转载自 Spring Boot 配置随机数那些小技巧 Spring Boot支持在系统加载的时候配置随机数. 添加config/random.properties文件,添加以下内容: #随机32位M ...
- 19年8月 字母哥 第三章 spring boot 配置原理实战 用热点公司网不行
第三章 spring boot 配置原理实战 3.1.结合配置加载讲解bean自动装配原理 3.2.详解YAML语法及占位符语法 3.3.获取自定义配置的两种实现方法 3.4.配置文件注入值数据校验 ...
- 在Spring boot 配置过滤器(filter)
在spring boot 配置servlet filter 逻辑上与配置spring 是一样的. 不过相比spring 更加简化配置的难度. 这里只需要两步 1 创建一个自定义顾虑器并继承spring ...
- mysql 多数据源访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码
之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...
- spring boot配置对上传文件的大小限制
spring boot配置对上传文件的大小限制 spring-boot 2.0之前 Spring Boot1.4版本后配置更改为(默认单个文件最大1Mb,单次请求文件总数大小最大10Mb): spri ...
- spring boot配置logback日志
spring boot配置logback日志 在上一篇spring boot入门里提过,Spring Boot默认的日志打印是logback,所以配置logback日志会很简单,但是也有注意的地方. ...
- spring boot配置druid(德鲁伊)
spring boot配置druid(德鲁伊) 关于druid的介绍请看 阿里巴巴温少访谈 1.引入相关依赖,全部依赖是上一篇spring boot+mybatis依赖的基础上,再加上下边的依赖,如下 ...
- spring boot配置mybatis和事务管理
spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spri ...
最新文章
- 基于Tomcat5.0和Axis2开发Web Service代码详解
- 自动备份网站和数据库打包并上传FTP服务器并删除前30天文件
- TCP协议实现文件传输
- React学习:组件之间的关系、参数传递-学习笔记
- IT技术分类和就业特点
- Java 8中的HashMap性能改进
- python重复输入上面指令_stdin stdout python:如何重复使用同一输入文...
- Python接口自动化之logging封装及实战
- Yii 文件上传类的使用
- 【java学习之路】(javaWeb【后端】篇)002.Servlet
- 如何在FL Studio中对整首歌曲音量进行调整
- Java处理Json数据
- paip.提升用户体验-----找回密码的设
- 微醺时代的白酒新锐:政策“理想”与现实“骨感”的夹缝进击
- 如何定制支持用户自定义boot参数的基于debian os的live cd
- Conventional Commits那些事
- Redisson封装及应用实例
- DNS工作原理及解析过程
- English 动词篇
- GRNN神经网络学习笔记_matlab
热门文章
- jmeter上传文件踩坑指南
- 小胖子学spring-aop
- Shell和Python中的“正三角”和“倒三角”
- vscode插件Todo Tree配置
- 初识Kinect之二
- 白糖详细 制造工艺、等级划分、国家标准号和注意事项
- rds是什么云模式_IaaS、PaaS、SaaS、DaaS都是什么?
- 使用fpdf2将txt文本转可编辑pdf报错解决办法
- 中文手机评论情感分类系列(三)
- 《Python机器学习及实践:从零开始通往Kaggle竞赛之路》第4章 实战篇 学习笔记(三)4.3IMDB影评得分估计总结