笔记: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 配置详解
Spring Boot 针对常用的开发场景提供了一系列自动化配置来减少原本复杂而又几乎很少改动的模板配置内容,但是,我们还是需要了解如何在Spring Boot中修改这些自动化的配置,以应对一些特殊场 ...
- Spring Boot (5) Spring Boot配置详解
application.properties application.properties是spring boot默认的配置文件,spring boot默认会在以下两个路径搜索并加载这个文件 src\ ...
- Spring Boot 配置文件详解
Spring Boot配置文件详解 Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件.他们的作用都是修改Spring Boot自动配置的默认值.相对于prop ...
- Spring Boot异常处理详解
在Spring MVC异常处理详解中,介绍了Spring MVC的异常处理体系,本文将讲解在此基础上Spring Boot为我们做了哪些工作.下图列出了Spring Boot中跟MVC异常处理相关的类 ...
- spring事务配置详解
一.前言 好几天没有在对spring进行学习了,由于这几天在赶项目,没有什么时间闲下来继续学习,导致spring核心架构详解没有继续下去,在接下来的时间里面,会继续对spring的核心架构在继续进行学 ...
- Spring Boot☞ 配置文件详解:自定义属性、随机数、多环境配置等
自定义属性与加载 我们在使用Spring Boot的时候,通常也需要定义一些自己使用的属性,我们可以如下方式直接定义: application-dev.yml com.didispace.blog: ...
- Spring Boot配置文件详解:自定义属性、随机数、多环境配置
自定义属性与加载 我们在使用Spring Boot的时候,通常也需要定义一些自己使用的属性,我们可以如下方式直接定义: application-dev.yml com.didispace.blog: ...
- Spring Boot 注解详解
一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration ...
- Spring Boot配置文件详解-ConfigurationProperties和Value优缺点-(转)好文
文章转自 http://www.cnblogs.com/itdragon/p/8686554.html Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件.他们 ...
随机推荐
- 遍历对象属性(for in、Object.keys、Object.getOwnProperty)
js中几种遍历对象的方法,包括for in.Object.keys.Object.getOwnProperty,它们在使用场景方面各有不同. for in 主要用于遍历对象的可枚举属性,包括自有属性. ...
- file和file文件流
**io流是程序中比较常用的功能,基本上涉及到文件上传下载的都要用到这功能,比如上传头像,上传附件等等. 对于一个java程序员来说,io流也是必须掌握的,因此这里对比较常用的或者说曾经用过的方法进行 ...
- mongodb去除重复的数据(二)
前天因为工作需要,开始着手对数据库中两千多万的数据中其中一个字段重复的数据进行去重. 原本使用一些测试的数据测试后,前天写的那个方法是可行的,但是当面对这个两千万的真实数据时,我却发现这方法有些不顶用 ...
- 获取NVIDIA显卡的温度
NVIDIA显卡在硬件上有温度传感器,可以感知显卡的运行环境.温度数据的获取,一般是通过调用NVIDIA的SDK的相关函数即可.SDK的下载的网址(https://developer.nvidia.c ...
- FusionCharts 3D环饼图
1.设计静态页面 Doughnut.html: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"& ...
- 如何获取Linux-gate.so.1动态库
前面"Linux应用程序Helloworld入门"已经提到在Linux下每个可执行文件都依赖于几个最为基本的动态库,其中一个就是linux-gate.so.1. 从上面ldd给出的 ...
- Error Code: 1305. FUNCTION student.rand_string does not exist
1.错误描述 13:52:42 call new_procedure Error Code: 1305. FUNCTION student.rand_string does not exist 0.0 ...
- No bean named 'sessionFactory' is defined
1.错误描述 严重:Servlet service() for servlet default threw exception . org.springframework.beans.factory. ...
- javaWeb学习之Listener监听
] 一.监听器Listener javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术 其中 servlet规范包括三个技术点:servlet listener filt ...
- ajax交互数据简单拼装,数组成字符串
json2Form:function(json) { var str = ""; for(var p in json){ // 判断对象是否为数组 if(typeof json[p ...