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入门笔记(四) - 多环境配置、加载顺序、静态资源映射的更多相关文章

  1. 51. spring boot属性文件之多环境配置【从零开始学Spring Boot】

    原本这个章节是要介绍<log4j多环境不同日志级别的控制的>但是没有这篇文章做基础的话,学习起来还是有点难度的,所以我们先一起了解下spring boot属性文件之多环境配置,当然文章中也 ...

  2. Spring Boot 2.4 对多环境配置的支持更改

    在目前最新的Spring Boot 2.4版本中,对配置的加载机制做了较大的调整.相关的问题最近也被问的比较多,所以今天就花点时间,给大家讲讲Spring Boot 2.4的多环境配置较之前版本有哪些 ...

  3. SpringBoot——配置文件加载位置及外部配置加载顺序

    声明 本文部分转自:SpringBoot配置文件加载位置与优先级 正文 1. 项目内部配置文件 spring boot 启动会扫描以下位置的application.properties或者applic ...

  4. linux下/etc/profile /etc/bashrc /root/.bashrc /root/.bash_profile这四个配置文件的加载顺序

    目录 一.关于linux配置文件 二.验证四个配置文件的加载顺序 三.结论 一.关于linux配置文件 1.linux下主要有四个配置文件:/etc/profile ./etc/bashrc ./ro ...

  5. 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)

    1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置  1.命令行参数 所有的配置都可以在命令行上进行指定 ...

  6. Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理

    本文是接着上篇博客写的:Spring boot 入门(三):SpringBoot 集成结合 AdminLTE(Freemarker),利用 generate 自动生成代码,利用 DataTable 和 ...

  7. Spring Boot 使用properties如何多环境配置

        当我们使用properties文件作为Spring Boot的配置文件而不是yaml文件时,怎样实现多环境使用不同的配置信息呢?     在Spring Boot中,多环境配置的文件名需要满足 ...

  8. Spring Boot 配置加载顺序详解

    使用 Spring Boot 会涉及到各种各样的配置,如开发.测试.线上就至少 3 套配置信息了.Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发.测试.线上环境使用不同的配置. 在 ...

  9. 【串线篇】spring boot外部配置加载顺序

    SpringBoot也可以从以下位置加载配置: 原则仍然是优先级从高到低:高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 java -j ...

随机推荐

  1. Python3.5 学习十

    多进程: 多线程和多进程的区别: Python多线程不适合CPU操作密集型的任务,适合IO操作密集型的任务(IO操作不占用CPU) Python折中解决多线程不能真正同步运算的方案是:起多个进程,每个 ...

  2. 使用putty连接本地VirtualBox上的centos7 linux主机

    1. 查看linux主机默认ssh端口 因为是使用ssh连接虚拟机上的linux主机的,所以需要查看centos ssh默认端口,一般是22 打开终端 输入cd /etc/ssh/ 查看ssh_con ...

  3. GPS欺骗(一)—无人机的劫持

    本文作者:唯念那抹瑞利蓝 今天我们所讲的是GPS欺骗的方式和简单的定义.让大家对GPS欺骗这个方面有所了解.GPS是全世界地一个卫星定位系统,由美国制造. 0×01 例子2011年伊朗劫持美国无人机 ...

  4. git忽略掉文件权限检查

    有时 git diff 执行显示文件内容没变化,但是有 old mode xxx new mode,原因是文件的权限,被chmod变化了,这种变化也被 diff 识别出来了,让git忽略掉文件权限检查 ...

  5. js处理url中的请求参数(编码/解码)

    在处理 a 链接跳转其他页面时,总会遇到需要传递一些当前页面的信息到其他页面,然后其他页面利用这些信息进行相关操作.利用 get 请求或 hash 传递是常见的方式. 首先,需要对传递的参数进行编码, ...

  6. (原创)定时线程池中scheduleWithFixedDelay和scheduleAtFixedRate的区别

    scheduleAtFixedRate 没有什么歧义,很容易理解,就是每隔多少时间,固定执行任务. scheduleWithFixedDelay 比较容易有歧义 貌似也是推迟一段时间执行任务,但Ora ...

  7. php-echo原理

    1.语法分析 unticked_statement: | T_ECHO echo_expr_list ';' ; echo_expr_list: echo_expr_list TSRMLS_CC); ...

  8. 53.storm简介

    一.简介 1.storm是twitter开源的一个分布式的实时计算系统,用于数据实时分析,持续计算,分布式RPC等等. 官网地址:http://storm-project.net 源码地址:https ...

  9. 一文详解python的类方法,普通方法和静态方法

    首先形式上的区别,实例方法隐含的参数为类实例self,而类方法隐含的参数为类本身cls. 静态方法无隐含参数,主要为了类实例也可以直接调用静态方法. 所以逻辑上,类方法被类调用,实例方法被实例调用,静 ...

  10. csc命令

    CSC.exe把Visual C#程序代码编译成IL文件时,有着很多参数和开关选项.正确的了解和运用这些参数和开关有时会解 决一些看似很棘手的问题.下面就通过一张表来大致说明一下这些参数和开关的具体作 ...