SpringBoot第二篇:配置文件详解一
作者:追梦1819
原文:https://www.cnblogs.com/yanfei1819/p/10837594.html
版权声明:本文为博主原创文章,转载请附上博文链接!
前言
SpringBoot 完全摒弃了xml配置的模式,几乎做到了“零配置”。说是“几乎”,是因为一般情况下默认的配置足够满足日常开发所需,但是在特殊的情况下,我们往往需要用到自定义属性配置、自定义文件配置、多环境配置、外部命令引导等一系列功能。
SpringBoot 使用的全局配置文件 application.properties 的作用是对一些默认配置的值进行修改。配置文件通常放在src/main/resources目录下或者类路径的/config下。application.properties 是springboot 项目的主配置文件。
本节内容包括:
- 主要配置文件
- 默认配置
- 自定义配置文件
- 多环境配置
- 外部配置
## 主配置文件
application.properties 文件是作为 SpringBoot 项目的默认配置文件。项目启动,它会被自动检测到。 然后我们可以正常注入任何加载的属性。因此,通过使用此默认文件,我们不必显式注册PropertySource,甚至不必提供属性文件的路径。
当然,如果必要的话,我们可以在项目运行时改变主配置文件,以下是命令:
java -jar config-demo.jar --spring.config.location=classpath:/customeize-application.properties
customeize-application.properties 是定义在 src/main/resources 路径下的配置文件。
而此时,application.properties 则不再起作用。如果项目中使用到了该文件中的属性,则在项目启动时可能会报错。需要特别注意。
## 默认配置
默认属性
SpringBoot 的默认属性有很多,如以上所说,一般情况下默认的配置足够满足日常开发所需。
针对 SpringBoot 的默认属性,我们可以参照官方文档:
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
自定义属性
准备工作
在介绍自定义属性之前,为了提升开发者的体验(所以不是必须的依赖),先来做一下准备工作,那就是引入 maven 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
因为,在常用的IDE中,不会有属性提示。该依赖只会在编译时调用,所以不用担心会对生产造成影响。
自定义属性
通常情况下,一些常用的属性,可以直接在 SpringBoot 的主配置文件 application.properties 中自定义。
例如:
server.port=8083
# 自定义属性(单个)
yanfei1819.name=admin
yanfei1819.age=26
读取以上配置信息:
package com.yanfei1819.configdemo.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* Created by 追梦1819 on 2019-05-06.
*/
@Controller
public class ReadApplicationConfigController {
@Value("${yanfei1819.name}")
private String name;
@Value("${yanfei1819.age}")
private int age;
@ResponseBody
@RequestMapping("/getProperties")
public String getProperties(){
return "我的姓名是:"+name+",我的年龄是:"+age;
}
}
用postman进行测试:

以上是读取单个属性,如果属性比较多,这样就比较麻烦了,也不符合面向对象的思想。下面通过对象来读取配置信息。
首先,在 application.properties 中配置。
# 演示自定义对象
class.student.name=zhangsan
class.student.age=20
class.student.grade=98.5
其次,创建实体类接受对应的属性值。
package com.yanfei1819.configdemo.entity;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* Created by 追梦1819 on 2019-05-06.
*/
@ConfigurationProperties(prefix = "class.student")
public class Student {
private String name;
private int age;
private Double grade;
// set/get 省略
}
注意,在启动类上添加。
@EnableConfigurationProperties({Student.class})
最后,测试:
package com.yanfei1819.configdemo.config;
import com.yanfei1819.configdemo.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* Created by 追梦1819 on 2019-05-06.
*/
@Controller
public class ReadApplicationConfigController {
@Autowired
private Student student;
@ResponseBody
@RequestMapping("/getBeanProperties")
public String getBeanProperties(){
return "学生姓名是:"+student.getName()+",学生年龄是:"+student.getAge()+",学生分数是:"+student.getGrade();
}
}
测试结果是。

参数间的相互引用
class.student.description=姓名是${class.student.name},年龄是${class.student.age},分数是${class.student.grade}
然后同其他的属性方式引用。
自定义配置文件
一些特殊情况,需要的配置信息很多,如果全部定义在主配置文件中,会繁杂、难以维护。这个时候就需要自定义一些配置,将属性进行分类,便于维护。以下以JDBC配置文件为例,阐述自定义配置文件以及属性值的读取方式。
首先,创建自定义配置文件 jdbc.properties 。
jdbc.mysql.driverclassname=com.mysql.jdbc.Driver
jdbc.mysql.url=jdbc:mysql://127.0.0.1:3306/xxx
jdbc.mysql.username=root
jdbc.mysql.password=root
其次,创建对应的实体类。
package com.yanfei1819.configdemo.entity;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
/**
* Created by 追梦1819 on 2019-05-06.
*/
@Configuration
@ConfigurationProperties(prefix = "jdbc.mysql")
@PropertySource("classpath:jdbc.properties")
public class JdbcBean {
private String driverclassname;
private String url;
private String username;
private String password;
// set/get/toString 省略
}
最后,创建测试类。
package com.yanfei1819.configdemo.config;
import com.yanfei1819.configdemo.entity.JdbcBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Created by 追梦1819 on 2019-05-06.
*/
@RestController
public class ReadCustomPropertiesController {
@Autowired
private JdbcBean jdbcBean;
@GetMapping("/getJdbcBean")
private String getJdbcBean(){
return jdbcBean.toString();
}
}
启动程序,可见测试结果。

注意,一个实体类的配置文件可以有多个。换句话说,可以用一个实体类接收多个配置文件的信息。
我们把上述demo的基础上,新增一个配置文件 jdbc2.properties ,并添加属性:
jdbc.mysql.ip=127.0.0.1
然后在实体类 JdbcBean 中加入属性:
private String ip;
// get/set/toString 省略
同时添加注解:
@ConfigurationProperties(prefix = "jdbc2.mysql")
当然,上面的两个注解:
@PropertySource("classpath:jdbc.properties")
@PropertySource("classpath:jdbc2.properties")
也可以用以下注解代替:
@PropertySources({
@PropertySource("classpath:jdbc.properties"),
@PropertySource("classpath:jdbc2.properties")
})
只是需要注意的是,在任何一种情况下,值得注意的是,在属性名称冲突的情况下,最后一次源读取优先。
## 多环境配置
上述内容只是演示了最基本的功能。而在真是的项目中,往往有多个环境,比如开发、测试、生产的环境。可能每个环境的配置参数都不一样。这个时候也需要我们自定义每个环境的配置文件了。
不过,这不需要以上那么复杂。因为SpringBoot 已经为我们做好了准备工作。只要遵循它提供的配置规则和格式即可。
1. 各个环境的配置文件格式是:application-{profile}.properties ;
2. 在主配置文件中添加属性 spring.profile.active 即可。
例如:
生产环境配置文件:application-prod.properties
开发环境配置文件:application-dev.properties
引用开发环境的配置文件,只要在 application.properties 中配置: spring.profiles.active=dev 。
外部配置
除了以上几种配置方式。SpringBoot 还支持外部命令行配置。
例如,在启动时修改程序端口号:java -jar xx.jar --server.port=9090 ;
选择对应环境配置:java -jar xx.jar --spring.profiles.active=test 等。其余还有很多。由于篇幅所限,此处不一一展开。感兴趣的可以自行深入了解。
源码:我的GitHub
SpringBoot第二篇:配置文件详解一的更多相关文章
- 学会Git玩转GitHub(第二篇) 入门详解 - 精简归纳
学会Git玩转GitHub(第二篇) 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 10 / 25 转载请注明出处!️ 目录 学会Git玩转GitHub(第二篇) 入门详解 - 精简归纳 ...
- springBoot 中 logback配置文件详解
logback介绍和配置详解 logback是Java的开源框架,性能比log4j要好.是springboot自带的日志框架.该框架主要有3个模块: logback-core:核心代码块(不介绍) l ...
- SpringBoot 使用(三): 配置文件详解
代码从开发到测试要经过各种环境,开发环境,测试环境,demo环境,线上环境,各种环境的配置都不一样,同时要方便各种角色如运维,接口测试, 功能测试,全链路测试的配置,hardcode 肯定不合适,如S ...
- (转) SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解
springboot采纳了建立生产就绪spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...
- SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot2-config-file/ 本文出自方志朋的博客 ...
- SaltStack 入门到精通第二篇:Salt-master配置文件详解
SaltStack 入门到精通第二篇:Salt-master配置文件详解 转自(coocla):http://blog.coocla.org/301.html 原本想要重新翻译salt-mas ...
- 网卡配置文件详解 用户管理与文件权限篇 文件与目录权限 软连接 tar解压命令 killall命令 linux防火墙 dns解析设置 计划任务crond服务 软件包安装 阿里云 yum源 安装
Linux系统基础优化及常用命令 Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ...
- SaltStack 入门到精通第三篇:Salt-Minion配置文件详解
SaltStack 入门到精通第三篇:Salt-Minion配置文件详解 作者:ArlenJ 发布日期:2014-06-09 17:52:16 ##### 主要配置设置 ##### 配置 默认值 ...
- nginx之旅(第一篇):nginx下载安装、nginx启动与关闭、nginx配置文件详解、nginx默认网站
一.nginx下载安装 版本nginx 1.15.5 系统环境centos7.5(本机ip192.168.199.228) 关闭selinux 和防火墙firewall 1.下载 wget http: ...
- Spring Boot 配置文件详解
Spring Boot配置文件详解 Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件.他们的作用都是修改Spring Boot自动配置的默认值.相对于prop ...
随机推荐
- yii2.0的学习之旅(一)
一. 通过composer安装yii2.0项目 *本文是根据您已经安装了composer (1)跳转到项目根目录 cd /xxxx/www (2)下载插件 composer global requir ...
- PIE属性表多字段的文本绘制
最近研究了PIE SDK文本元素的绘制相关内容,因为在我们的开发中,希望可以做到在打开一个Shp文件后,读取到属性表的所有字段,然后可以选择一些需要的字段,将这些字段的所有要素值的文本,绘制到shp图 ...
- asp.net发布后其他电脑部署——未能加载文件或程序集 System.Web.Mvc, Version=2.0.0.0, Culture=neutral,
本机测试及发布使用正常 在项目中添加了引用但相关dll文件未在bin文件夹中 导致发布后部署其他电脑未能加载程序集 网上说要下载相关内容在部署服务器安装 但怕在服务器安装出现其他问题 所以在项目中重新 ...
- Python 电子邮件
从一台计算机编写邮件到对方收到邮件.假设我们自己的电子邮件地址是me@163.com,对方的电子邮件地址是friend@sina.com 我们在本地的软件上写好邮件,点击发送,邮件就发送出去了,这些电 ...
- eclipse启动tomcat警告 [SetPropertiesRule]{Server/Service/Engine/Host/Context}
解决问题:解决办法是:关闭tomcat,双击eclipse下tomcat服务器,在出来的Tomcat server at localhost页面中找到server options选项,选中其中的选项” ...
- JavaWeb之文件上传和下载
在如今的互联网时代,人们越来越喜欢将自己的数据存放到互联网上,于是便诞生了很多类型的软件,比如360网盘,百度网盘,云盘之类的.所以说,文件上传和下载的功能是现在非常主流的一个功能,应用十分广泛. 那 ...
- 谁有好的oracle数据库学习书籍,麻烦提供一下,感激不尽
作为一个IT人员,想深入学习一下oracle,以前都只是懂基本的语法,CRUD 数据库设计,数据库优化,底层完全不懂,哪位仁兄有好的书籍可以推荐一下,感激不尽.
- linux(03)基础系统优化
Linux之基础系统优化 Linux基础系统优化 >>> https://www.cnblogs.com/pyyu/p/9355477.html Linux的网络功能相当强悍,一时之 ...
- 201871010102-常龙龙《面向对象程序设计(java)》第十周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 201871010124-王生涛《面向对象程序设计(java)》第四周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...