前言

Spring Boot使用习惯优于配置(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。

正文

使用配置文件注入属性

Spring Boot 默认的配置文件src/main/java/resources/application.properties或者src/main/java/resources/application.yml,在这里我们可以配置一些常量。

首先我们使用配置文件给一个类注入相关的属性:

com.wuwii.controller.pet.no=${random.uuid}
com.wuwii.controller.pet.name=Tom

通过注解@Value(value=”${config.name}”)就可以绑定到你想要的属性上面。

@RestController
@RequestMapping("/pet")
public class PetController {
@Value("${com.wuwii.controller.pet.no}")
private String no;
@Value("${com.wuwii.controller.pet.name}")
private String name;
@RequestMapping("/d")
public String detail() {
return "no: " + no + ", name: " + name;
} }

启动

一个个绑定数据还是很不方便,可以新建一个Bean,专门用来绑定注入的属性使用注解@ConfigurationProperties(prefix = “prefix”),不过需要注意的是先要引入相关依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

通过使用spring-boot-configuration-processor jar, 你可以从被@ConfigurationProperties注解的节点轻松的产生自己的配置元数据文件。

这里我新建一个PetBean用来注入属性。

@ConfigurationProperties(prefix = "com.wuwii.controller.pet")
public class PetBean {
private String no;
private String name; public String getNo() {
return no;
} public void setNo(String no) {
this.no = no;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}

注意在启动类上加上注解

@EnableConfigurationProperties({PetBean.class}),

根据字面意思不难理解,就是开启配置属性。

新建一个controller,注入我们创建的PetBean,

@RestController
@RequestMapping("/v2/pet")
public class PetController1 {
@Autowired
private PetBean pet;
@RequestMapping("/d")
public String detail() {
return "no: " + pet.getNo() + ", name: " + pet.getName();
}
}

重启Spring Boot,访问新地址:

使用自定义的配置文件

我们在resouce目录下面创建一个bean/pet.properties,加入

com.wuwii.name=Tom
com.wuwii.no=123456

新建一个PetBean1.java:

@PropertySource 这个注解可以指定具体的属性配置文件,优先级比较低。

@Configuration
@ConfigurationProperties(prefix = "com.wuwii")
@PropertySource("classpath:bean/pet.properties")
public class PetBean1 {
private String no;
private String name; public String getNo() {
return no;
} public void setNo(String no) {
this.no = no;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}

在controller中加入PetBean1的注入

@Autowired
private PetBean1 pet1;
@RequestMapping("/d2")
public String detail2() {
return "no: " + pet1.getNo() + ", name: " + pet1.getName();
}

应用配置文件(.properties或.yml)

在配置文件中直接写:

server.port=8080

.yml格式的配置文件如:

server:
port: 8080

tips: .yml中冒号后面一定要加一个空格。

随机数

配置文件中${random} 可以用来生成各种不同类型的随机值,

my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}

属性占位符

app.name=MyApp
app.description=${app.name} is a Spring Boot application

可以在配置文件中引用前面配置过的属性(优先级前面配置过的这里都能用)。

通过如${app.name:默认名称}方法还可以设置默认值,当找不到引用的属性时,会使用默认的属性。

属性名匹配规则

例如有如下配置对象:

@Component
@ConfigurationProperties(prefix="person")
public class ConnectionSettings { private String firstName; }

firstName可以使用的属性名如下:

* person.firstName,标准的驼峰式命名

* person.first-name,虚线(-)分割方式,推荐在.properties和.yml配置文件中使用

* PERSON_FIRST_NAME,大写下划线形式,建议在系统环境变量中使用

属性验证

可以使用JSR-303注解进行验证,例如:

@Component
@ConfigurationProperties(prefix="connection")
public class ConnectionSettings { @NotNull
private InetAddress remoteAddress; // ... getters and setters }

配置文件的优先级

Spring Boot 支持多种外部配置方式,这些方式优先级如下:

1. 命令行参数

2. 来自java:comp/env的JNDI属性

3. Java系统属性(System.getProperties()

4. 操作系统环境变量

5. RandomValuePropertySource配置的random.*属性值

6. jar包外部的application-{profile}.propertiesapplication.yml(带spring.profile)配置文件

7. jar包内部的application-{profile}.propertiesapplication.yml(带spring.profile)配置文件

8. jar包外部的application.propertiesapplication.yml(不带spring.profile)配置文件

9. jar包内部的application.propertiesapplication.yml(不带spring.profile)配置文件

10. @Configuration注解类上的@PropertySource

11. 通过SpringApplication.setDefaultProperties指定的默认属性

同样,这个列表按照优先级排序,也就是说,src/main/resources/config下application.properties覆盖src/main/resources下application.properties中相同的属性,此外,如果你在相同优先级位置同时有application.properties和application.yml,那么application.properties里的属性里面的属性就会覆盖application.yml。

Profile-多环境配置

当应用程序需要部署到不同运行环境时,一些配置细节通常会有所不同,最简单的比如日志,生产日志会将日志级别设置为WARN或更高级别,并将日志写入日志文件,而开发的时候需要日志级别为DEBUG,日志输出到控制台即可。

如果按照以前的做法,就是每次发布的时候替换掉配置文件,这样太麻烦了,Spring Boot的Profile就给我们提供了解决方案,命令带上参数就搞定。

这里我们来模拟一下,只是简单的修改端口来测试

在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:

  • application-dev.properties:开发环境
  • application-prod.properties:生产环境

然后在application.properties中加入

spring.profiles.active=dev

或application.yml中加入

spring:
# 环境 dev|test|pro
profiles:
active: dev

或启动命令:

java -jar xxx.jar --spring.profiles.active=dev

参数用–xxx=xxx的形式传递。意思就是表示在application.properties文件中配置了属性。

可以通过SpringApplication.setAddCommandLineProperties(false)禁用命令行配置。

附:Appendix A. Common application properties

Appendix A. Common application properties

参考文章

学习Spring Boot:(三)配置文件的更多相关文章

  1. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件

    精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件 内容简介:本文介绍 Spring Boot 的配置文件和配置管理,以及介绍了三种读取配置文 ...

  2. 精选Spring Boot三十五道必知必会知识点

    Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家.本文精选了三十五个常见的Spring Boot知识点,祝你一臂之力! 问题一 Spr ...

  3. Java精选面试题之Spring Boot 三十三问

    Spring Boot Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一: Spring Boot.Spring MVC 和 ...

  4. 学习Spring Boot:(二十六)使用 RabbitMQ 消息队列

    前言 前面学习了 RabbitMQ 基础,现在主要记录下学习 Spring Boot 整合 RabbitMQ ,调用它的 API ,以及中间使用的相关功能的记录. 相关的可以去我的博客/RabbitM ...

  5. 学习Spring Boot:(二十五)使用 Redis 实现数据缓存

    前言 由于 Ehcache 存在于单个 java 程序的进程中,无法满足多个程序分布式的情况,需要将多个服务器的缓存集中起来进行管理,需要一个缓存的寄存器,这里使用的是 Redis. 正文 当应用程序 ...

  6. [Spring] 学习Spring Boot之一:基本使用及简析

    一.简介 使用 Spring Boot 目的主要是用来简化 Spring 应用的搭建及开发过程,因为使用 Spring 及 SpringMVC 框架时需要手动配置的地方非常多(各种包之间的依赖.各种配 ...

  7. 学习Spring Boot:(四)应用日志

    前言 应用日志是一个系统非常重要的一部分,后来不管是开发还是线上,日志都起到至关重要的作用.这次使用的是 Logback 日志框架. 正文 Spring Boot在所有内部日志中使用Commons L ...

  8. Spring Boot(二) 配置文件

    文章导航-readme 一.配置Spring Boot热部署     技术的发展总是因为人们想偷懒的心理,如果我们不想每次修改了代码,都必须重启一下服务器,并重新运行代码.那么可以配置一下热部署.有了 ...

  9. Spring Boot属性配置文件:application.properties 详解

    学习资料 网址 官方说明文档 https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-pro ...

随机推荐

  1. 自动化运维工具saltstack04 -- 之jinja模板

    jinjia模板 需求:想让saltstack的file模块分发到minion端的配置文件监听minion端的IP和端口,如何用变量实现?看下面!! 1.jinja模板加grains使apache监听 ...

  2. Django中settings设计模式(单例模式)

    配置文件: 需求:配置文件,默认配置和手动配置分开,参考django的配置文件方案,默认配置文件放在项目容器内部,只让用户做常用配置. /bin/settings.py(手动配置) PLUGIN_IT ...

  3. [Processing]在画布上写文本

    准备工作 这一步只是我强迫症犯了哈,这个随意,画几根线而已.每一小格10个像素,中格50,大格100像素 void setup() { size(,); } void draw() { backgro ...

  4. docker 下载安装与配置

    # mac离线安装dockerhttps://download.docker.com/mac/stable/24312/Docker.dmg # windows离线安装dockerhttp://mir ...

  5. 简单3D翻页相册制作教程

    3D效果看起来总是要比平面的图形看起来视觉效果要好的多,今天来教大家制作简单的3D翻页效果的视频. 视频预览链接:https://v.youku.com/v_show/id_XMzgxOTY5NzQz ...

  6. yocto-sumo源码解析(一): oe-init-build-env

    oe-init-build-env是yocto构建环境运行的第一个脚本,通过运行下面的命令: . oe-init-build-env build-arm64 即可对yocto项目进行构建,顾名思义,该 ...

  7. C# winForm调用WebService

    C#winForm调用WebService的远程接口 创建一个WebService工程用例 添加服务引用 添加webService服务地址 输入命名空间名称 主要代码 测试成功截图 工程代码下载 新建 ...

  8. 2018软工实践—Beta冲刺(3)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Beta 冲鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 软件接口编写修正 自动化测试脚本编写 技术文稿更新 展示GitHub当 ...

  9. WPF string,color,brush之间的转换

    String转换成Color string-"ffffff" Color color = (Color)ColorConverter.ConvertFromString(strin ...

  10. 字符串拆分函数 func_splitstr

    create type str_split is table of varchar2(4000) ; 1 CREATE OR REPLACE FUNCTION splitstr(p_string IN ...