spring boot入门笔记(四) - 多环境配置、加载顺序、静态资源映射
1、多环境配置
先描述下以前的开发流程:从SVN把项目下载到本地,各种修改配置文件,启动成功;完成功能后上传到公司的测试服务器,修改各种配置文件,启动成功;最后到上线的日子里,把新功能中涉及到的文件打成增量包,上线(尤其其中涉及ip地址、端口的,一定要把配置改好再上线)。每次最害怕的就是,上线的文件中还有各种localhost,完了生产中又是各种集群(一堆的ip、端口),然后就产生了上线事故。
在springboot中,一般会先准备三套配置,一套本地,一套测试,一套生产。它的思路就是,我把各个环境的配置都准备好,在哪里使用项目,就使用相应的配置,其它的配置会被忽略不使用。具体的操作办法一般如下:
除了自己的application.properties文件,在同级目录下再新建三个文件:application-dev.properties 开发环境(本地); application-test.properties 测试环境; application-prod.properties 生产环境;再在application.properties文件中使用 spring.profiles.active属性来设置,比如spring.profiles.active=test,项目启动时就会加载测试环境application-test.properties的配置。这样,通过命令行的启动方式,就可以激活不同环境的配置,比如,java -jar springbootdemo.jar --spring.profiles.active=test 这样启动的就是测试环境的配置了。我一般会在application.properties中设置spring.profiles.active=dev,使用java -jar springbootdemo.jar 启动的话,不加参数,就是默认使用配置文件中的spring.profiles.active=dev,而我本地一般都是通过执行springboot的启动类来启动项目,不会把项目打成jar包再进行测试,只有在测试环境和生产环境才会使用命令行启动。
2、加载顺序
springboot对数据文件的加载存在一定的规定,从优先级由高到低排序:
(1)命令行中传入的参数;
(2)SPRING_APPLICATION_JSON 中的属性。SPRING_APPLICATION_JSON是以JSON格式配置在系统环境变量中的内容;
(3)java:comp/env中的JNDI属性;
(4)java的系统属性,可以通过System.getProperties()获取的内容;
(5)操作系统的环境变量;
(6)通过random.*配置的随机属性;
(7)位于当前应用jar包之外,针对不同{profile}环境的配置文件内容,例如:application-{profile}.properties或是YAML定义的配置文件;
(8)位于当前应用jar包之内,针对不同{profile}环境的配置文件内容,例如:application-{profile}.properties或是YAML定义的配置文件;
(9)位于当前应用jar包之外的application.properties和YAML配置内容;
(10)位于当前应用jar包之内的application.properties和YAML配置内容;
(11)在@Configuration注解修改的类中,通过@PropertySource注解定义的属性;
(12)应用默认属性,使用SpringApplication.setDefaultProperties定义的内容;
3、静态资源映射
Spring Boot 默认将 /** 所有访问映射到以下目录:
classpath:/static
classpath:/public
classpath:/resources
classpath:/META-INF/resources
注意:访问静态资源时不用带上静态资源所在的目录名称!!!加上目录名就找不到了!!
能访问到的:localhost:8080/a.html ,和同级目录的其他(a.css、a1.png、earth.png),想要访问b.html : localhost:8080/a/b.html。
自定义静态资源映射:
第一种方式:静态资源配置类
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//将所有/static/** 访问都映射到classpath:/static/ 目录下
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
}
第二种方式:在application.properties配置
spring.mvc.static-path-pattern=/static/**
注意:通过spring.mvc.static-path-pattern这种方式配置,会使Spring Boot的默认配置失效,也就是说,/public /resources 等默认配置不能使用。
配置中配置了静态模式为/static/,就只能通过/static/来访问。
注意:访问静态资源时带上、不带上静态资源所在的目录名称(static),都可以找到!!!但是目录结构a/b.html什么时候都要带上
spring boot入门笔记(四) - 多环境配置、加载顺序、静态资源映射的更多相关文章
- 51. spring boot属性文件之多环境配置【从零开始学Spring Boot】
原本这个章节是要介绍<log4j多环境不同日志级别的控制的>但是没有这篇文章做基础的话,学习起来还是有点难度的,所以我们先一起了解下spring boot属性文件之多环境配置,当然文章中也 ...
- Spring Boot 2.4 对多环境配置的支持更改
在目前最新的Spring Boot 2.4版本中,对配置的加载机制做了较大的调整.相关的问题最近也被问的比较多,所以今天就花点时间,给大家讲讲Spring Boot 2.4的多环境配置较之前版本有哪些 ...
- SpringBoot——配置文件加载位置及外部配置加载顺序
声明 本文部分转自:SpringBoot配置文件加载位置与优先级 正文 1. 项目内部配置文件 spring boot 启动会扫描以下位置的application.properties或者applic ...
- linux下/etc/profile /etc/bashrc /root/.bashrc /root/.bash_profile这四个配置文件的加载顺序
目录 一.关于linux配置文件 二.验证四个配置文件的加载顺序 三.结论 一.关于linux配置文件 1.linux下主要有四个配置文件:/etc/profile ./etc/bashrc ./ro ...
- 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 ...
- Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理
本文是接着上篇博客写的:Spring boot 入门(三):SpringBoot 集成结合 AdminLTE(Freemarker),利用 generate 自动生成代码,利用 DataTable 和 ...
- Spring Boot 使用properties如何多环境配置
当我们使用properties文件作为Spring Boot的配置文件而不是yaml文件时,怎样实现多环境使用不同的配置信息呢? 在Spring Boot中,多环境配置的文件名需要满足 ...
- Spring Boot 配置加载顺序详解
使用 Spring Boot 会涉及到各种各样的配置,如开发.测试.线上就至少 3 套配置信息了.Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发.测试.线上环境使用不同的配置. 在 ...
- 【串线篇】spring boot外部配置加载顺序
SpringBoot也可以从以下位置加载配置: 原则仍然是优先级从高到低:高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 java -j ...
随机推荐
- Exp2 后门原理与实践 20164321 王君陶
Exp2 后门原理与实践 20164321 王君陶 一.实验内容 基础问题回答: 1.例举你能想到的一个后门进入到你系统中的可能方式? 答:通过漏洞,点击陌生链接,或者浏览不良网页挂马. 2.例举你知 ...
- django Form的回顾--手动档和自动挡
from django.shortcuts import renderfrom django.forms import Formfrom django.forms import fieldsfro ...
- hdoj1757 A Simple Math Problem(矩阵快速幂)
构造矩阵. 1,当k<=9时,直接输出: 2,当k >9时,先求原矩阵的(k-9)次幂res矩阵,在求幂的过程中对m取余.最后res矩阵再与矩阵F相乘得到矩阵ans,相乘的过程中对m取余. ...
- 关于finecms v5 会员头像 任意文件上传漏洞分析
看到我私藏的一个洞被别人提交到补天拿奖金,所以我干脆在社区这里分享,给大家学习下 本文原创作者:常威,本文属i春秋原创奖励计划,未经许可禁止转载! 1.定位功能 下载源码在本地搭建起来后,正常登陆了用 ...
- 实现一个算法,寻找字符串中出现次数最少的、并且首次出现位置最前的字符 如"cbaacfdeaebb",符合要求的是"f",因为他只出现了一次(次数最少)。并且比其他只出现一次的字符(如"d")首次出现的位置最靠前。
实现一个算法,寻找字符串中出现次数最少的.并且首次出现位置最前的字符如"cbaacfdeaebb",符合要求的是"f",因为他只出现了一次(次数最少).并且比其 ...
- Elasticsearch地理位置总结
更多内容请参考 : https://www.felayman.com 翻译版本:https://es.xiaoleilu.com/310_Geopoints/00_Intro.html 官方原文:ht ...
- maven项目报错--Cannot change version of project facet Dynamic Web Module to 3.0 Error in Eclipse
错误原因: 使用ecplise构建的maven骨架默认支持的是web2.3的版本,当使用这个创建3.0版本的web项目时则会报这样的错误: Cannot change version of proje ...
- JMeter基础:请求参数Parameters 、Body Data的区别
使用Jmeter测试时,很多人不知道请求参数Parameters .Body Data的区别和用途,这里简单介绍下 先了解一个接口的基本概念 在客户机和服务器之间进行请求-响应时,HTTP协议中包括G ...
- 【xsy1143】 兔子的数字 搜索
题目大意:请找到第$k$大的数,满足各位数字之和等于各位数字之积.其中$k≤10^{18}$. 首先我们要确定这个第$k$大的数有多大 我们用$f[i][j][he][ji]$表示我们要搜索一个$i$ ...
- 支付宝小程序自定义弹窗插件|支付宝dialog插件|model插件
支付宝小程序自定义弹窗组件wcPop|小程序自定义对话框|actionSheet弹窗模板 支付宝小程序官方提供的alert提示框.dialog对话框.model弹窗功能比较有限,有些都不能随意自定义修 ...