网站首页 > 开源技术 正文
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") String
username, 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: waylau
datasource:
driverClassName: com. mysql. jdbc.Driver
url: jdbc:mysql: / /localhost/test
server:
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: 9000
spring:
profiles: development
server:
port: 9001
spring:
profiles: production
server :
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,大家得空可以学习一下子~~
学以致用,努力提升自己!
猜你喜欢
- 2024-10-25 JAR、WAR、EAR的使用和区别(jars和wars)
- 2024-10-25 详解如何用同一个zabbix监控模板来监控tomcat不同端口
- 2024-10-25 mybatis-generator 初体验(mybatisplus generator)
- 2024-10-25 基于zabbix4.0监控tomcat服务及JVM内存
- 2024-10-25 01. struts2介绍(struts2入门)
- 2024-10-25 MyBatis系列-2-日志配置(mybatis 日志)
- 2024-10-25 Java初学者不得不知的概念:抽丝剥茧JDK、JRE、JVM之间的区别
- 2024-10-25 mysql-connector-java与MySQL 8.X版本建立连接
- 2024-10-25 Jmeter中间件处理-ActiveMQ(jmeter常用的组件有哪些)
- 2024-10-25 苏州众里Apache Log4j2 漏洞处置建议
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)