springboot配置文件支持配置的环境,springboot基本配置
00-1010 1配置文件1.1 yaml文件1.1.1基本语法1.1.2数据格式1.2数据绑定时的关键字提示2 web开发2.1静态资源的存储和访问2.2 webjars2.3 web提示2.3.1索引页面2.3.2 Web图标2.4 Web场景源代码分析
00-1010之前说配置文件大致分为两种:properties和yaml。其中,properties是最常见的配置文件类型:各种参数都是以key-value到等号的格式配置的,带后缀。属性,所以这里就不赘述了。先说yaml文件。
00-1010 YAML代表YAML的Aint(不是)标记语言,是一种直观的数据序列化格式,可以被计算机识别。YAML以数据为核心,比传统的xml方法更简洁。书写格式简洁,表达层次明显,非常适合以数据为中心的配置文件。Yaml文件有后缀。yml或者。yaml。
00-1010 K3360V用于键值映射,V前的空格用作区分大小写的分隔符。缩进用来表示层次关系。语法层面不能用缩进,只能手动输入空格。空格的数量并不重要。只要相同数量的空格表示相同的层次关系,同一级别的缩进空格就应该相同。但实际操作中,还是用tab键,不会有问题。注释使用#字符。
00-1010 YAML文件的数据格式可以使用以下格式约束。这种类型的内联写作被注释掉,你可以选择你自己习惯的形式来使用它。注意字符串类型数据可以不用引号括起来,但是如果使用引号,单引号会将转义字符输出为字符串,但是双引号会在转义后输出转义字符,例如n单引号是n双引号是符号变化字符。
00-1010使用yaml配置文件进行配置时,不会有代码补全的提示,这样不仅会大大降低代码编写的效率,还会增加出错的概率。所以,现在有一个方法:在项目中加入配置处理器,可以在编写yaml文件时提示关键字。该方法如下:
步骤1:导入相关依赖项
依赖关系groupIdorg.springframework.boot/groupId工件Spring-Boot-Configuration-处理器/工件ID可选True/可选/依赖关系步骤2:重启项目
单击运行或重启按钮重启SpringBoot项目。
第三步:测试。
步骤4:在pom.xml文件中添加代码
也就是在键入jar包的时候不会将配置处理器输入到jar包中,否则会降低项目的效率。
目录
00-1010静态资源可以理解为固定的前端页面,包含HTML、CSS、JS、图片等。并且可以直接显示,无需检查数据库或程序处理。
存储路径:编程时所有静态资源都放在类路径下的一个文件夹中。默认情况下,该文件夹匹配以下四个名称中的任何一个:static、public、resources、/META-INF/resources。
资源访问模式:
启动项目后,使用当前项目根路径/静态资源名称来访问静态资源。的所有静态资源映射地址都是/* *
当一个静态资源和一个控制器请求相同的名称时,资源解析器将首先转到具有该名称的控制器,看它是否可以被处理。所有不能处理的请求都交给静态资源处理器去寻找静态资源。如果找不到静态资源,它将响应404页。
自定义存储路径和访问方法:
您可以通过修改配置文件中spring . web . resources . static-locations的配置项来更改默认的静态资源存储路径。
修改配置文件中spring.mvc.static-path-pattern的配置项,使带有指定前缀的请求可以访问静态资源。如下所示,只有带/res前缀的静态资源名
访问的时候才会访问到相应的静态资源
2.2 webjars/h3> webjars就是将前端所需要的技术jar(比如jquery)使用依赖进行导入,webjars的官方文档就是展示jar对应的依赖,使用的时候直接复制到pom.xml文件即可。webjars的官方文档:https://www.webjars.org/
2.3 web小技巧
2.3.1 index页面
不管是默认的还是自定义的静态资源路径,只要在下面创建一个index.html文件,这个页面就将会被当做项目的欢迎页面,也就是说访问localhost: 端口号的时候就会访问到index.html页面。但是需要注意的是,不能自定义静态资源的访问方式,否则就会导致上述效果失效。
2.3.2 网页小图标
不管是默认的还是自定义的静态资源路径,只要在下面添加一个命名为favicon.ico的图片,即可将该图片设置成网页的小图标。同时需要注意的是,不能自定义静态资源的访问方式,否则就会导致上述效果失效。
2.4 web场景源码浅析
生效自动配置类: SpringBoot启动的时候默认加载xxxAutoConfiguration类(自动配置类)是相关场景生效,SpringMVC功能的自动配置类是 WebMvcAutoConfiguration
配置绑定:
@EnableConfigurationProperties注解将配置文件的相关属性和xxx配置类进行了绑定,可以用于更改默认的配置信息。而通过分析源码可知在WebMvcAutoConfiguration自动配置类里的WebMvcAutoConfigurationAdapter静态类上有如下注解,注解参数中有两个配置类,其中配置类与配置文件中的属性绑定关系如下:WebMvcProperties.class --> spring.mvc WebProperties.class --> spring.web
@EnableConfigurationProperties({WebMvcProperties.class, WebProperties.class})
源码中资源处理器的解析: 在SpringBoot的源码中有一个规则:有参构造器所有参数的值都会从容器中拿,于是在WebMvcAutoConfigurationAdapter静态类里的有参构造器中,所有的参数都将直接从容器中获取。
//ResourceProperties resourceProperties --> 获取和spring.resources绑定的所有的值的对象//WebMvcProperties mvcProperties --> 获取和spring.mvc绑定的所有的值的对象//ListableBeanFactory beanFactory --> Spring的beanFactory//HttpMessageConverters --> 找到所有的HttpMessageConverters//ResourceHandlerRegistrationCustomizer --> 找到资源处理器的自定义(重点解析)//DispatcherServletPath --> 找到资源的路径//ServletRegistrationBean --> 给应用注册Servlet、Filter....public WebMvcAutoConfigurationAdapter(ResourceProperties resourceProperties, WebMvcProperties mvcProperties,ListableBeanFactory beanFactory, ObjectProvider<HttpMessageConverters> messageConvertersProvider,ObjectProvider<ResourceHandlerRegistrationCustomizer> resourceHandlerRegistrationCustomizerProvider,ObjectProvider<DispatcherServletPath> dispatcherServletPath,ObjectProvider<ServletRegistrationBean<?>> servletRegistrations) {this.resourceProperties = resourceProperties;this.mvcProperties = mvcProperties;this.beanFactory = beanFactory;this.messageConvertersProvider = messageConvertersProvider;this.resourceHandlerRegistrationCustomizer = resourceHandlerRegistrationCustomizerProvider.getIfAvailable();this.dispatcherServletPath = dispatcherServletPath;this.servletRegistrations = servletRegistrations;}
通过对WebMvcAutoConfigurationAdapter静态类里的addResourceHandlers方法解析,得知资源解析器中资源处理的默认规则
public void addResourceHandlers(ResourceHandlerRegistry registry) {// 判断resource.add-mappings的值true/false(默认为true,可以在配置文件修改配置项)if (!this.resourceProperties.isAddMappings()) {// resource.add-mappings的值为false,则禁用所有的静态资源的访问规则,debug日志输出下面这句话logger.debug("Default resource handling disabled");return;}// resource.add-mappings的值true的话,定义规则// 定义缓存的相关配置Duration cachePeriod = this.resourceProperties.getCache().getPeriod();CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();// 定义webjars的资源存储规则和缓存时间 if (!registry.hasMappingForPattern("/webjars/**")) {customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/").setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));} // 定义静态资源的访问规则// this.mvcProperties.getStaticPathPattern() --> 获取静态资源的访问方式,默认是/**String staticPathPattern = this.mvcProperties.getStaticPathPattern();if (!registry.hasMappingForPattern(staticPathPattern)) {customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern)// getStaticLocations()方法中.addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));}}
源码中欢迎页的解析:
@Beanpublic WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext, FormattingConversionService mvcConversionService, ResourceUrlProvider mvcResourceUrlProvider) {// 下面 welcomePageHandlerMapping 的有参函数在下面图片 WelcomePageHandlerMapping welcomePageHandlerMapping = new WelcomePageHandlerMapping(new TemplateAvailabilityProviders(applicationContext), applicationContext, this.getWelcomePage(), this.mvcProperties.getStaticPathPattern()); welcomePageHandlerMapping.setInterceptors(this.getInterceptors(mvcConversionService, mvcResourceUrlProvider)); welcomePageHandlerMapping.setCorsConfigurations(this.getCorsConfigurations()); return welcomePageHandlerMapping;}
下图解释了为什么:自定义静态资源的访问方式会导致欢迎页无法起到作用。SpringBoot的源码中已经将这部分条件写死了。
到此这篇关于SpringBoot2零基础到精通之配置文件与web开发的文章就介绍到这了,更多相关SpringBoot2 配置文件内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。