Spring Boot的配置详解

在本节中,我们将重点聚焦在Spring Boot的配置方面。

理解Spring Boot的自动配置

按照“约定大于配置”的原则,Spring Boot通过扫描依赖关系来使用类路径中可用的库。对于每个pom文件中的“pring-boot-starter-*” 依赖,Spring Boot会执行默认的AutoConiguration类。

AutoConfiguration类使用*AutoConfiguration词法模式,其中*代表类库。例如,JPA 存储库的自动配置是通过JpaRepositoriesAutoConfiguration来实现的。

使用-deboug运行应用程序可以查看自动配置的相关报告。下面的命令用于显示在3.1节中“spring-boot-rest"应用的自动配置报告。

$ java -jar build/libs/spring-boot-rest-1.0.0.jar --debug

以下是自动配置类的一-些示例:

●ServerPropertiesAutoConfiguration;

●RepositoryRestMvcAutoConfiguration;

●JpaRepositoriesAutoConfiguration; .

●JmsAutoConfiguration。

如果应用程序有特殊的要求,比如需要排除某些库的自动配置,也是能够完全实现的。以下是排除DataSourceAutoConfiguration的示例。

@EnableAutoConfiguration (exclude= {DataSourceAutoConfiguration.class})

重写默认的配置值

也可以使用应用程序覆盖默认配置值。重写的配置值配置在application.properties文件中即可。

比如,如果想更改应用启动的端口号,则可以在application.properties文件中添加如下内容。

server .port=8081

这样,这个应用程序再次启动时,就会使用端口8081。

更换配置文件的位置

默认情况下,Spring Boot将所有配置外部化到application.properties文件中。但是, 它仍然是应用程序构建的一部分。

此外,可以通过设置来实现从外部读取属性。以下是设置的属性:

●spring.config.name: 配置文件名;

●spring.config.location: 配置文件的位置。

这里,spring.config.location 可以是本地文件位置。

以下命令从外部启动Spring Boot应用程序来提供配置文件。

$ java -jar build/ libs/ spring-boot-rest-1.0.0.jar -- spring . config . name=bootrest. properties

自定义配置

开发者可以将自定义属性添加到application.properties文件中。

例如,我们自定义了一个名为“ile.server.url"” 的属性在application.properties 文件中。在Spring Boot启动后,我们就能将该属性自动注入应用中。

下面是完整的例子。

@Controller@RequestMapping("/u")public class UserspaceController {@Value("$ {file.server.url}")private String fileServerUrl;@GetMapping ("/ {username} /blogs/edit")public ModelAndView createBlog (@PathVariable ("username") Stringusername, Model model) {model . addAttribute ("blog", new Blog (null,null, null)) ;model . addAttribute ("fileServerUrl", fileServerUrl) ;//文件服务器的地址返回给客户端return new ModelAndView (" /userspace/blogedit", "blogModel", mod-el) ;

使用.yaml 作为配置文件

我们使用的是.yaml文件,以此来作为application.properties文件的一种替代方式。YAML与平面属性文件相比,提供了类似JSON的结构化配置。YAML数据结构可以用类似大纲的缩排方式呈现,结构通过缩进来表示,连续的项目通过减号“_”来表示,map结构里面的key/value对用冒号“:来分隔。样例如下。

spring: application:name: waylaudatasource:driverClassName: com. mysql. jdbc.Driverurl: jdbc:mysql: / /localhost/testserver:port: 8081

profiles的支持

Spring Boot支持profiles,即不同的环境使用不同的配置。通常需要设置-一个系统属性( spring.profiles.active )或OS环境变量( SPRING_ PROFILES_ ACTIVE) 。例如,使用-D参数启动应用程序(记住将其放在主类或jar之前)。$ java -jar -Dspring . profiles.active-production

build/ libs/spring-boot-rest-1.0.0.jar

在Spring Boot中,还可以在aplication.properties中设置激活的配置文件,例如,

spring. profiles .active=production

YAML文件实际上是由“__” 行分隔的文档序列,每个文档分别解析为平坦化的映射。

如果-一个YAML文档包含-一个spring.profiles键,那么配置文件的值(逗号分隔的配置文件列表)将被反馈到Spring Enironmentaccptsrofiles)中,并且如果这些配置文件中的任何-一个被激活,那么文档被包含在最终的合并中。

例如,

server:port: 9000spring:profiles: developmentserver:port: 9001spring:profiles: productionserver :port: 0

在此示例中,默认端口为9000,但是如果Spring profile的“development" 处于激活状态,则端口为9001,如果“production” 处于激活状态,则为0。

要使.properties文件做同样的事情,可以使用“aplication-S {profile};properties”的方式来指定特定于配置文件的值。


内嵌Servlet容器

Spring Boot Web Starter 内嵌了Tomcat服务器。在应用中使用嵌人式的Servlet容器,可以方便我们来进行项目的启动和调试。

Spring Boot包括支持嵌入式Tomcat、Jetty 和Undertow服务器。默认情况下,嵌入式服务器将侦听端口 8080上的 HTTP 请求。

注册Servlet、过滤器和监听器

当使用嵌人式Servlet容器时,可以通过使用Spring bean或扫描Servlet组件从Servlet规范(如HttpSessionListener )中注册Servlet、 过滤器和所有监听器。

默认情况下,如果上下文只包含-一个Servlet, 它将映射到“/” 路径。在多个Servlet bean的情况下,bean名称将被用作路径前缀,过滤器将映射到“/*” 路径。

如果觉得基于惯例的映射不够灵活,可以使用ServletRegistrationBean. FilterRegistrationBean和ServletListenerRegistrationBean类进行完全控制。

Servlet上下文初始化

嵌人式Servlet 容器不会直接执行Servlet 3.0+的javax.servlet. ServletContainerInitializer接口或Spring的org.springframework. web.WebApplicationitializer接口。这是因为在war中运行的第三方库会带来破坏Spring Boot应用程序的风险。

如果您需要在Spring Boot应用程序中执行Servlet上下文初始化,则应注册一个实现org.springframework.boot.web.servlet.ServletContextInitializer接口的bean。onStartup 方法提供对Servlet-Context的访问,并且如果需要,可以轻松地用作现有WebApplicationInitializer的适配器。

当使用嵌人式容器时,可以使用@ServletComponentScan来自动注入启用了@WebServlet、@WebFilter和@WebListener注解的类。

需要注意的是,@ServletComponentScan 在独立部署的容器中不起作用,这是因为在独立部署的容器中将使用容器内置的发现机制。

ServletWebServerApplicationContext

Spring Boot使用一种新型的ApplicationContext 来支持嵌人式的Servlet 容器。ServletWeb-

ServerApplicationContext 就是这样- - 种特殊类型的WebApplicationContext,它通过搜索单个Serv-

letWebServerFactory bean来引导自身。通常, TomcatServletWebServerFactory 、JettyServletWebServer

Factory或UndertowServletWebServerFactory将被自动配置。

通常,开发者并不需要关心这些实现类。在大多数应用程序中将被自动配置,并将创建适当的ApplicationContext和ServletWebServerFactory。

更改内嵌Servlet容器

Spring Boot Web Starter默认使用了Tomcat 来作为内嵌的容器。在依赖中加入相应Servlet 容器的Starter,就能实现默认容器的替换,如下所示。

spring-boot- starterjetty: 使用Jetty 作为内嵌容器,可以替换spring bot-starter-tomcat。

springoboot-starter-undertow:使用Undertow作为内嵌容器,可以替换spring-boot-starter-tomcat。

可以使用Spring Environment属性配置常见的Servlet 容器的相关设置。通常将在application.properties文件中来定义属性。

常见的Servlet容器设置如下所示。

●网络设置:监听HTTP请求的端口( server.port)、绑定 到server.address 的接口地址等。

会话设置:会话是否持久( server.session.persistence)、会话超时( server.session.timeout)、会话数据的位置( server.session.store-dir )和会话cookie配置( serversession.cookie.* )错误管理:错误页面的位置( serererror.path)等。

SSL。

●HTTP压缩。

Spring Boot尽可能地尝试公开这些常见公用设置,但也会有一些特殊的配置。对于这些例外的情况,SpringBoot提供了专用命名空间来对应特定于服务器的配置(比如server.tomcat和server.undertow )。

本篇给大家讲解的是SpringBoot的配置详解+内嵌Servlet容器这两块儿的内容,觉得内容不错的朋友可以转发关注小编一下!

下篇文章将介绍基于Sprin Security 实现的基本认证及 OAuth2,大家得空可以学习一下子~~

学以致用,努力提升自己!

creo配置文件config选项详解_5年资深架构师重点聚焦:SpringBoot的配置详解+内嵌Servlet容器相关推荐

  1. SpringBoot的配置详解application

    SpringBoot的配置文件application有两种文件格式,两种配置的内容是一致的,只是格式不一致. 1.application.properties 2.application.yml或者a ...

  2. 阿里P8架构师谈:主流RPC框架详解,以及与SOA、SOAP、REST的区别

    什么是RPC RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 简言之,RPC使 ...

  3. 阿里P8架构师谈:Quartz调度框架详解、运用场景、与集群部署实践

    以下将分别从Quartz架构简介.集群部署实践.Quartz监控.集群原理分析详解Quartz任务调度框架. Quartz简介 Quartz是Java领域最著名的开源任务调度工具,是一个任务调度框架, ...

  4. Creo服务器管理器配置文件,Creo配置文件Config介绍及设置方法 | 坐倚北风

    1.Config的作用 Config文件是Creo的系统配置文件,它几乎可以满足你对Creo的所有要求.包括系统的精度.显示设置.单位.打印机的设置.快捷键的设置.输入输出设置等.通过这些设置你可以把 ...

  5. creo 计算机配置,config配置文件乱码,creo配置文件config

    近期在windows 操作系统中有用户反应遇到了加载配置文件时出错 对路径C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.co ...

  6. iis5.1配置php5.3.1详解,WinXP IIS 5.1 PHP 5.3 VC9.0 配置详解

    IIS上安装PHP5.3的完整教程方法(及5.3.0以后版本的方法) 由于PHP5.3的全新特效及改进,原有的isapi方式解析PHP 脚本已经不被支持,PHP从5.3 .0以后的版本开始使用微软的f ...

  7. cacti安装配置详解_MySQL实战001:8.0免安装版服务配置详解

    首先我们需要先下载MySQL的安装包,MYSQL官方下载地址:https://dev.mysql.com/downloads/mysql/,这里我下载的是MySQL Community Server ...

  8. nginx反向代理模块配置详解_Nginx(三):反向代理负载均衡集群配置详解

    概述: 本篇主要总结Nginx实现反向代理和负载均衡功能相关模块的配置说明.主要使用到的模块如下:ngx_http_proxy_moduleNginx实现反向代理功能 ngx_http_upstrea ...

  9. 架构师进阶之独孤九剑:设计模式详解

    我们继续架构师进阶之独孤九剑进阶,目前我们仍然在第一阶段:程序设计和开发环节. " 设计模式不仅仅只是一种规范,更多的是一种设计思路和经验总结,目的只有一个:提高你高质量编码的能力.以下主要 ...

最新文章

  1. 超全汇总!机器学习常用术语词汇表
  2. 方向键 上下左右的转译
  3. 数据结构源码笔记(C语言):线性表的单链表示
  4. iOS 获取网络状态
  5. 把虚拟机装到内存里(打开PScs3只需要2秒)
  6. 如何通过shell脚本操作MongoDB
  7. 适合python爬虫使用的浏览器_python爬虫:使用Selenium模拟浏览器
  8. vue 父循环怎么拿子循环中的值_Vue 父组件循环使用refs调用子组件方法出现undefined的问题...
  9. jquery监听textarea内容变化
  10. python高级编程教程_python高级编程——入门语法(一)
  11. Java后端验证苹果登录
  12. 微信开放平台PC端扫码登录功能个人总结
  13. addon游戏_SnowMobile Addon
  14. [精华] nucleus实时操作系统MTK手机软件系统工程和配置简介
  15. 解决Arial字体“高低肩问题”
  16. 强化学习 V.S. 自然语言处理,计算机保研er应该选哪个?
  17. CMMI——认证流程
  18. Arcpy基础入门-6、arcpy要素属性操作
  19. iText7---Adding low-level content添加低层级内容
  20. 解决Chrome 无法保存密码问题

热门文章

  1. C/C++获取CPU相关信息(非WMI)
  2. HTML作业-花店网页商城
  3. linux中的socket编程,linux中socket编程
  4. python输入的数字为什么不能计算_计算器为什么只能进行个位数的计算,每次只能输入一个数字,求...
  5. java map 赋值_java Listmap赋值的问题
  6. php支持 的编码,php编码转换函数(自动转换字符集支持数组转换)
  7. [git] git fsck --lost-found命令用法
  8. java 超时集合_Java之集合(二十三)SynchronousQueue
  9. 九、XML和Json的特点
  10. JUnit 4测试驱动开发结构图