Spring Boot入门(二):使用Profile实现多环境配置管理&如何获取配置文件值
在上一篇博客Spring Boot入门(一):使用IDEA创建Spring Boot项目并使用yaml配置文件中,我们新建了一个最原始的Spring Boot项目,并使用了更为流行的yaml配置文件。
但是一般情况下,我们开发的系统应用都会有多套环境, 如dev环境,qa环境,prod环境,
那么如何实现多套环境下的配置管理呢?
其实在Spring Boot下,我们可以使用Profile来实现,以下来讲解具体的实现方式。
1.使用Profile实现多环境配置管理
首先我们按照上篇博客中提到的方法新建2个配置文件:application-dev.yml,application-prod.yml。
如果有的同学比较喜欢用properties文件,可以用下图中的方式新建:


我们知道,默认情况下,启动的端口号为8080,如果我们希望在dev环境使用端口号8082,在prod环境使用端口号8083,那么可以修改配置文件如下:
application-dev.yml新增如下配置:
server:
port: 8082
application-prod.yml新增如下配置:
server:
port: 8083
此时,启动下Spring Boot项目

我们会发现,仍然使用的是默认的端口号8080,那么如何指定使用dev或者prod环境的端口呢?
我们需要在application.yml新增如下配置:
spring:
profiles:
active: dev
此时,再次启动Spring Boot项目,会发现使用的是端口号8082,也就是application-dev.yml文件中配置的。

如果希望使用prod环境的,可以修改配置为:
spring:
profiles:
active: prod
运行结果为:

2.获取配置文件值的两种方式
既然用到了配置文件,而且在平时的开发过程中,经常会将一些可能会修改的值放到配置文件中,那么在Spring Boot中,如何获取配置的文件的值呢?
我们现在就讲解下使用@Value注解或者@ConfigurationProperties注解来获取配置文件值的方法。
2.1方式1:使用@Value注解获取配置文件值
首先在application.yml中添加如下配置:
book:
author: wangyunfei
name: spring boot
然后修改Spring Boot项目启动类的代码如下:
package com.zwwhnly.springbootdemo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class SpringbootdemoApplication {
@Value("${book.author}")
private String bookAuthor;
@Value("${book.name}")
private String bookName;
@RequestMapping("/")
String index() {
return "book name is:" + bookName + " and book author is:" + bookAuthor;
}
public static void main(String[] args) {
SpringApplication.run(SpringbootdemoApplication.class, args);
}
}
启动项目,在浏览器输入http://localhost:8080/,会看到如下信息:

2.2使用@ConfigurationProperties注解获取配置文件值
在方式1中,我们使用@Value注解来获取配置文件值,但如果多个地方都需要获取的话,就需要在多个地方写注解,造成混乱,不好管理,
其实,Spring Boot还提供了@ConfigurationProperties注解来获取配置文件值,该种方式可把配置文件值和一个Bean自动关联起来,使用起来更加方便,个人建议用这种方式。
在application.yml中添加如下配置:
author:
name: wangyunfei
age: 32
新建类AuthorSettings,添加@Component和@ConfigurationProperties注解
package com.zwwhnly.springbootdemo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "author")
public class AuthorSettings {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
然后修改启动类代码如下:
package com.zwwhnly.springbootdemo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class SpringbootdemoApplication {
@Value("${book.author}")
private String bookAuthor;
@Value("${book.name}")
private String bookName;
@Autowired
private AuthorSettings authorSettings;
@RequestMapping
public String hello() {
return "Hello Spring Boot!";
}
@RequestMapping("/")
public String index() {
return "book name is:" + bookName + " and book author is:" + bookAuthor;
}
@RequestMapping("/indexV2")
public String indexV2() {
return "author name is:" + authorSettings.getName() + " and author age is:" + authorSettings.getAge();
}
public static void main(String[] args) {
SpringApplication.run(SpringbootdemoApplication.class, args);
}
}
启动项目,在浏览器输入http://localhost:8080/indexV2,会看到如下信息:

3.源码地址
https://github.com/zwwhnly/springbootdemo.git,欢迎大家下载,有问题可以多多交流。
4.参考链接
Spring Boot入门(二):使用Profile实现多环境配置管理&如何获取配置文件值的更多相关文章
- Spring Boot入门(二):获取配置文件值
本篇博客主要讲解下在Spring Boot中如何获取配置文件的值. 1. 使用yaml配置文件 Spring Boot默认生成的配置文件为application.properties,不过它也支持ya ...
- Spring boot 入门二:Spring Boot配置文件详解
一.自定义属性 当我们创建一个springboot项目的时候,系统默认会为我们在src/main/java/resources目录下创建一个application.properties.同时也支持ym ...
- spring boot入门笔记(四) - 多环境配置、加载顺序、静态资源映射
1.多环境配置 先描述下以前的开发流程:从SVN把项目下载到本地,各种修改配置文件,启动成功:完成功能后上传到公司的测试服务器,修改各种配置文件,启动成功:最后到上线的日子里,把新功能中涉及到的文件打 ...
- Spring Boot 入门之 Web 篇(二)
原文地址:Spring Boot 入门之 Web 篇(二) 博客地址:http://www.extlight.com 一.前言 上一篇<Spring Boot 入门之基础篇(一)>介绍了 ...
- Spring Boot入门系列(二十)快速打造Restful API 接口
spring boot入门系列文章已经写到第二十篇,前面我们讲了spring boot的基础入门的内容,也介绍了spring boot 整合mybatis,整合redis.整合Thymeleaf 模板 ...
- spring boot 入门操作(二)
spring boot入门操作 使用FastJson解析json数据 pom dependencies里添加fastjson依赖 <dependency> <groupId>c ...
- Spring boot入门(二):Spring boot集成MySql,Mybatis和PageHelper插件
上一篇文章,写了如何搭建一个简单的Spring boot项目,本篇是接着上一篇文章写得:Spring boot入门:快速搭建Spring boot项目(一),主要是spring boot集成mybat ...
- Spring Boot 入门(十二):报表导出,对比poi、jxl和esayExcel的效率
本片博客是紧接着Spring Boot 入门(十一):集成 WebSocket, 实时显示系统日志写的 关于poi.jxl和esayExcel的介绍自行百度. jxl最多支持03版excel,所以单个 ...
- Spring Boot 入门day01
一.Spring Boot入门 1.Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特 ...
随机推荐
- .net 弹出消息框后,页面样式变乱
点击按钮,执行提交操作,弹出消息框后,页面的样式变乱,解决方法: 首先,确定使用的css样式正确,页面中的宽高值保持规范统一: 然后,弹出框避免使用Response.Write(),如下所示 Resp ...
- 软工第五次作业——Python效能分析之四则运算生成器
Github项目地址: https://github.com/JtvDeemo/elementary-arithmetic PSP PSP2.1 Personal Software Process S ...
- 初学JSP
一. 基本了解 JSP是应用最广泛的表现层技术,它和Servlet是Java EE的两个基本成员.JSP和Servlet本质是一样的,因为JSP最终编译成ServLet才能运行. 1.1 we ...
- 前端leader找我谈心:我是如何从刚毕业的前端菜鸟一步步成长为前端架构师的?
谈谈学习 我做前端已经有五年的时间了,从大学刚毕业的时候,我是一个完全什么都不懂的小白.虽然我大学里学的是软件工程专业,但是因为在大学里荒废学业,每天只知道打游戏,基本上到大学毕业之前我是什么都不会的 ...
- Git分支合并冲突解决(续)
接Git分支合并冲突解决,在使用rebase合并冲突情况下,如果不小心,执行完add后执行了commit,此时本地仓库HEAD处于游离态(即HEAD指向未知的分支),如何解决? 解决方法 (1)此时, ...
- 页面读取Excel
var input = document.getElementById("file"); //支持chrome IE10 if (window.FileReader) ...
- MySql中innodb存储引擎事务日志详解
分析下MySql中innodb存储引擎是如何通过日志来实现事务的? Mysql会最大程度的使用缓存机制来提高数据库的访问效率,但是万一数据库发生断电,因为缓存的数据没有写入磁盘,导致缓存在内存中的数据 ...
- mybatis的使用
1.like 的使用范例 name like CONCAT(CONCAT('%', #{name}), '%') 2.时间的比较的范例 <![CDATA[ and bill_date >= ...
- Socket Connect问题
一.非阻塞Connect对于Select时应注意的问题二.linux客户端socket非阻塞connect编程 一.非阻塞Connect对于Select时应注意的问题 对于面向连接的socket(SO ...
- jenkins+gitlab自动化编译部署方案探索及服务端编译webpack实战
一. 背景 之前我们的开发流程为在本地进行webpack打包编译,然后svn提交源代码和编译后的代码.同时每次提交前也会从svn更新源代码和编译后的代码.这样做有几个缺点: 1. svn 更新和提交编 ...