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

  注意:访问静态资源时不用带上静态资源所在的目录名称!!!加上目录名就找不到了!!

spring boot入门笔记(四) - 多环境配置、加载顺序、静态资源映射能访问到的: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什么时候都要带上

上一篇:十三、jdk命令之Java内存之本地内存分析神器:NMT 和 pmap


下一篇:Base-Android快速开发框架(五)--网络操作之RequestModel、ResponeModel、CustomAsyncHttpClient