Spring Boot - 配置介绍
Spring Boot 针对常用的开发场景提供了一系列自动化配置来减少原本复杂而又几乎很少改动的模板配置内容,但是,我们还是需要了解如何在Spring Boot中修改这些自动化的配置,以应对一些特殊场景
配置文件
Spring Boot的默认配置文件位置为 src/main/resources/application.properties ,关于 Spring Boot 应用的配置文件内容都可以在该文件中,根据我们引入的不同模块,可以在这里定义容器端口号、数据库连接信息、日志级别等各种配置信息,常用配置如下:
- server.context-path:指定上下文路径,比如默认访问路径是http://localhost:8080,我将之改为http://localhost:8081/hello,就需要配置此属性值为 /hello
- server.port=8090 :指定服务端口号为 8090
- spring.application.name=hello:指定应用名(该名字后续Spring Cloud 中会被注册为服务名)
自定义参数
除了可以在Spring Boot的配置文件中设置各个模块中预定义的配置属性,也可以在配置文件中定义一些我们需要的自定义属性,比如在配置文件中增加如下内容:
book.name = springCloud
book.author=李四
然后,可以在应用中,通过@Value注解来加载这些自定义的参数,比如:
@Component
public class Book {
@Value ("${book.name}")
private String name;
@Value ("${book.author}")
private String author;
}
@Value注解可以支持两种表达式来进行配置,如下所示:
- 一种是上面代码所示的 PlaceHolder 方式,格式为${…} 大括号内为PlaceHolder
- 另一种是 SpEL表达式(Spring Expression Language),格式为 #{…},大括号内为 SpEL 表达式
通过自定义注入实体,就可以读取到配置属性,示例代码如下:
@RestController
@RequestMapping ("/hello")
public class HelloController {
@Autowired
private Book book;
@RequestMapping ("getCount")
public String getCount() {
return "ok " + book.getName();
}
}
参数引用
在 application.properties中的个参数之间可以直接通过使用 PlaceHolder 的方式来进行引用,比如:
book.name=springCloud
book.author=李四
book.desc= 作者 ${book.author} 写的 ${book.name}
使用随机数
在一些特殊的情况下,我们希望有些参数每次被加载时候不是一个固定的值,比如密钥、服务端口等,在Spring Boot 的属性配置文件中,可以使用${random}配置来产生随机的int值、long值或者string字符串,这样我们就可以很容易的通过配置随机生成属性,比如:
#-随机生成8080-8090内的随机数
server.port=${random.int(8080,8090)}
#--------------------------
#-随机生成字符串
org.drsoft.random=${random.value}
#-随机生成int
org.drsoft.random.int=${random.int}
#-随机生成long
org.drsoft.random.long=${random.long}
#-随机生成10以内的int
org.drsoft.random.intRagne=${random.int(10)}
#-机生成 uuid
命令行参数
使用命令 java -jar 来启动的方式,该命令除了启动应用外,还可以在命令行中指定应用的参数,比如 java - jar xxx.jar --server.port=8090 直接以命令行的方式设置服务端口属性,在用命令行方式启动 Spring Boot应用时,连续的两个减号就是对application.properties 中的属性进行赋值的标识
多环境配置
多环境的配置,各种项目构建工具或是框架的基本思路是一致的,通过配置多份不同环境的配置文件,在通过打包命令指定需要打包的内容之后进行区分打包,在Spring Boot 中,多环境配置的文件名需要满足application-{profile}.properties 的格式,其中{profile}对应环境标识,如下:
- application-dev.properties:开发环境
- application-test.properties:测试环境
- application-prod.properties:生成环境
至于具体哪个配置文件会被加载,需要在
application.properties 文件中通过spring.profiles.action 属性来设置,其值对应配置文件中的{profile} 值。
加载顺序
为了能够更合理的重写各属性的值,其Spring Boot 使用了下面这种较为特别的属性加载顺序:
- 命令行中传入的参数
- SPRING_APPLICATION_JSON中的属性,SPRING_APPLICATION_JSON 是以JSON格式配置在系统环境变量中的内容
- java:comp/env 中的
JNDI 属性 - java 的系统属性,可以通过System.getProperties()获取的内容
- 操作系统的环境变量
- 通过
random.* 配置的随机属性 - 位于当前应用
Jar 包之外,针对不同{profile}环境的配置文件内容 - 位于当前应用
Jar 包之内,针对不同{profile}环境的配置文件内容 - 位于当前应用
Jar 包之外的
application.properties 配置内容 - 位于当前应用
Jar 包之内的
application.properties 配置内容 - 在
@Configuration 注解修改的类,通过
@PropertySource 注解定义的属性 - 应用默认属性,使用
SpringApplication.setDefaultProperties 定义的内容
可以看到其中标黄的都是从应用Jar包之外读取配置文件,所以,实现外部化配置的原理就是从此切入,为其指定外部配置文件的加载位置来取代Jar包之内的配置内容。
Spring Boot - 配置介绍的更多相关文章
- Spring Boot 配置元数据指南
1. 概览 在编写 Spring Boot 应用程序时,将配置属性映射到 Java bean 上是非常有用的.但是,记录这些属性的最好方法是什么呢? 在本教程中,我们将探讨 Spring Boot C ...
- Spring Boot配置过滤器的两种方式
过滤器(Filter)是Servlet中常用的技术,可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截,常用的场景有登录校验.权限控制.敏感词过滤等,下面介绍下Spring Boot配置过 ...
- spring boot配置druid连接池连接mysql
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- Redis篇之操作、lettuce客户端、Spring集成以及Spring Boot配置
Redis篇之操作.lettuce客户端.Spring集成以及Spring Boot配置 目录 一.Redis简介 1.1 数据结构的操作 1.2 重要概念分析 二.Redis客户端 2.1 简介 2 ...
- Spring Boot -- 配置切换指南
一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...
- Spring Boot 配置优先级顺序
一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...
- spring boot 配置注入
spring boot配置注入有变量方式和类方式(参见:<spring boot 自定义配置属性的各种方式>),变量中又要注意静态变量的注入(参见:spring boot 给静态变量注入值 ...
- Spring boot配置多个Redis数据源操作实例
原文:https://www.jianshu.com/p/c79b65b253fa Spring boot配置多个Redis数据源操作实例 在SpringBoot是项目中整合了两个Redis的操作实例 ...
- spring boot配置springMVC拦截器
spring boot通过配置springMVC拦截器 配置拦截器比较简单, spring boot配置拦截器, 重写preHandle方法. 1.配置拦截器: 2重写方法 这样就实现了拦截器. 其中 ...
随机推荐
- 2018 ACM-ICPC, Syrian Collegiate Programming Contest
2018 ACM-ICPC, Syrian Collegiate Programming Contest A Hello SCPC 2018! 水题 B Binary Hamming 水题 C Por ...
- Type I and type II errors | 第一类错误和第二类错误
偶尔能看懂,但是死活记不住,归根结底是没有彻底理解! Type I and type II errors - wiki type I error is the rejection of a true ...
- org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: file:/input
原我是这样写的 //输入数据所在的文件目录 FileInputFormat.addInputPath(job, new Path("/input/")); //mapreduce执 ...
- linux 使用split分割大文件
1.分割 -- split命令 可以指定按行数分割和按字节大小分割两种模式. (1) 按行数分割 $ split -l 300 large_file.txt new_file_prefix 加上-d, ...
- NopCommerce 更改发票字体
NopCommerce 默认是用~/App_Data/Pdf/FreeSerif.ttf 这个字体的. 用这个字体,发票里的中文不能显示. 可以把c:\windows\font\simhei.ttf ...
- Linux目录结构下部
第1章 linux目录结构 (linux必知必会的文件或目录) 1.1 在linux下面如何安装软件 yum install tree 1.2 linux无法上网了怎么办? [root@oldboye ...
- teamview修改id
怎么修改 TeamViewer ID 呢?按照下列的操作步骤,就能很简单的改变TeamViewer的id哦!1. 开始 > 运行,录入%appdata%,删除TeamViewer的文件夹: ...
- Jmeter分布式及在Linux上执行jmeter脚本
Jmeter分布式 主控机即自己的电脑,控制并发数 压力机即别人的机器,和主控机一起添加压力 1.其他的压力机需要启动Jmeter-server.bat 启动成功页面 2.主控机的Jmeter 的bi ...
- (转)Web.config配置文件详解
花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <? ...
- ChinaCock界面控件介绍-TCCBarcodeCreator
条码生成器,可以生成各种条码,包括二维码.这是一个不可视控件.用起来依旧简单. 属性说明: BarCodeColor:生成条码的颜色 BarcodeFormat:生成条码的类型,支持的条码类型: Bo ...