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 ...
随机推荐
- oh-my-zsh 安装及使用
什么是 oh-my-zsh oh-my-zsh 是基于 zsh 的功能做了一个扩展,方便的插件管理.主题自定义,以及漂亮的自动完成效果. oh-my-zsh 安装及插件安装 查看系统中 zsh 及版本 ...
- mybatis源码追踪2——将结果集映射为map
org.apache.ibatis.binding.MapperMethod中execute方法 ...} else if (method.returnsMap()) { result = execu ...
- Hadoop2.2.0安装笔记
最近想学习hadoop,于是网上找了些教程学习,几经周折,总算安装成功了! 先讲下环境,就2台机器...都是vmware虚拟机,操作系统centos, jdk版本 1.8.0 hadoop版本 2.2 ...
- SQL实现数据行列转换
前言: 在日常的工作中,使用数据库查看数据是很经常的事,数据库的数据非常多,如果此时的数据设计是一行行的设计话,就会有多行同一个用户的数据,查看起来比较费劲,如果数据较多时,不方便查看,为了更加方便工 ...
- POJ 2304
#include<iostream>// cheng da cai zi 11. 18 解锁问题 using namespace std; #define f 360 int main() ...
- POJ 2291
#include<iostream> #include<stdio.h> using namespace std; int compare(void const *,void ...
- Seqlist L 与 Seqlist *L的区别
Seqlist L结构体变量,SeqlistInsert之后不可以带回新的插入数据. Seqlist *L 是传结构体指针 用SeqlistInsert之后可以有新的插入.
- (转)Python科学计算之Pandas详解,pythonpandas
https://www.cnblogs.com/linux-wangkun/p/5903380.html-------pandas 学习(1): pandas 数据结构之Series https:// ...
- python的字符串连接操作符+
如图, 运行后提示错误,这是“+” 是字符串连接操作符,字符串连接只能在被连接的每一个都是字符串时起作用.而以上程序试图将一个字符串同一个非字符串连接会引发一个异常,所以会报错. 正确的为: 或者是:
- 48位MAC转化为唯一的128位IPV6地址
根据EUI_64规范,一个MAC地址生成唯一的一个IPV6地址. ①.反转MAC的第七位为1. ②.在24bit后加入FFFE. ③.在最前面加上FE80::. 示例: