前言

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. RabbitMQ入门:路由(Routing)

    在上一篇博客<RabbitMQ入门:发布/订阅(Publish/Subscribe)>中,我们认识了fanout类型的exchange,它是一种通过广播方式发送消息的路由器,所有和exch ...

  2. 通过iLO进行Zabbix监控——针对HP服务器集成

    iLO 全名是 Integrated Lights-out,它是惠普某些型号的服务器上集成的远程管理端口,它能够允许用户基于不同的操作系统从远端管理服务器,实现了虚拟存在和控制,从而进行智能型基础构架 ...

  3. 使用NNI的scikit-learn以及Tensorflow分析

    一.NNI简介 NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包. 它通过多种调优的算法来搜索最好的神经网络结构和(或)超参,并支持单机.本地 ...

  4. Plasma Cash 合约解读

    作者介绍 虫洞社区·签约作者 steven bai Plasma Cash 合约解读 Plasma Cash 合约解读 1. 合约代码 2. 合约文件简单介绍 3. Plasma Cash 的基础数据 ...

  5. SpringBoot集成dubbo实例

    项目总览图: 最下面有项目的pom,具体内容: 项目运行注意事项: 先启动 provider, 将providers.xml中 port 先修改为20187 执行test目录 下的DubboProvi ...

  6. Set up classpath in Eclipse

    On Eclipse main window Right click on .java file-> Run As -> Run Configurations... On Run Conf ...

  7. 2018-2019-20172329 《Java软件结构与数据结构》第九周学习总结

    2018-2019-20172329 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十五章-图 一.图及无向图 1.图的相关概 ...

  8. 20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结

    20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: http://www.cnblogs.com/ ...

  9. 安卓端通过http对Mysql进行增删改查

    各类it学习视频,大家都可以看看哦!我自己本人都是通过这些来学习it只知识的! 下面是视频链接转自:http://www.cnblogs.com/yzxk/p/4749440.html Android ...

  10. 《Spring2之站立会议6》

    <Spring2之站立会议6> 昨天,向主界面中加入语音功能部分的代码: 今天,查相关资料解决debug: 遇到问题,一些问题是得到解决了,但是一些还未被解决.