第三章:分析Spring Boot 核心配置(一)

spring Boot 简化了Spring配置的管理和读取,只需要一个application.properties,并提供了多种读取配置文件的方式 

一:服务器常规配置

1、端口号配置

Spring Boot默认启动的是8080端口,Web上下文是“/”,可以通过配置application.properties来重新配置Spring Boot

##访问端口,由默认的8080端口改为8090,方案有三种,这里采用方案一
# 方案一:server.port=8090
# 方案二:亦可以在命令行中指定启动端口,比如传入参数--server.port=8090
####### java -jar boosample.jar --server.port=8090
# 方案三:传入虚拟机系统属性:
######## java -Dserver.port=8090 -jar bootsample.jar
server.port=8090

以上三种方式都可以指定Web监听端口,Spring Boot的所有配置属性也都支持者三种方式,一般而言,传入虚拟机系统属性较为适用。

在一台机器上部署多份Spring Boot应用有很多好处,比如:提升系统吞吐量和性能,防止误操作关掉某一台应用,或者应用升级的时候,可以逐个升级而不影响系统服务,为了实现这个功能,只需要配置不同的监听端口就可以了。

2、上下文根配置

Spring Boot 默认应用配置的上下文访问目录是“/”,可以通过配置文件或者命令行配置server.context-path:

server.servlet.context-path=/black

3、自定义配置

###自定义配置
black.msg=hi, hello Spring Boot!

如下图:

代码如下:

package com.black.example.helloworld.web;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by 10250H on 2018/5/15.
 */
@RestController
public class HelloWorldHandler {
    //获取application.properties自定义配置的值
    @Value("${black.msg}")
    private String msg;

    @RequestMapping(value = "/index.html")
    public String index(){
        return "Hello Black!!!!!";
    }
    @RequestMapping(value = "/customConfig.html")
    public String customConfig(){
        return this.msg;
    }
}

重启服务,访问效果如下:http://localhost:8090/black/customConfig.html

根据上图得出结论,打印配置文件中的内容,上下文根,端口号以及自定义配置均已生效。

4、配置变量的引用和随机值配置

###配置变量的引用
black.append=hello black
####随机值变量
black.number=${random.int}
###自定义配置
black.msg=hi, hello Spring Boot! ${black.append} ${black.number}

    效果如下:

     

5、随机端口

作用:微服务中,像spring Cloud是不需要记住IP和端口号的,所以没必要设置ip和端口号,但是若不设置,默认端口号为8080,容易导致冲突;

server.port=${random.int[1024,9999]}

重启即可查看效果

6、cookie、session配置

#指定session cookie的comment
server.session.cookie.comment
#指定session cookie的domain
server.session.cookie.domain
##是否开启HttpOnly.
server.session.cookie.http-only
#设定session cookie的最大age.
server.session.cookie.max-age
#设定Session cookie 的名称.
server.session.cookie.name
#设定session cookie的路径.
server.session.cookie.path
#设定session cookie的“Secure” flag.
server.session.cookie.secure
#重启时是否持久化session,默认false
server.session.persistent
#session的超时时间
server.session.timeout
#设定Session的追踪模式(cookie, url, ssl).
server.session.tracking-modes

其他常用的服务器配置属性如下:

属性 描述
server.address 服务器ip绑定地址,如果你的主机有多个网卡,可以绑定一个ip地址
server.session.timeout 会话过期时间,以秒为单位
server.error.path 服务器出错后的处理路径/error,后续会详解异常处理机制

二:yml配置文件,创建“application.yml”,可以代替默认的application.properties

作用:yml是一种配置文件的语言,树状结构的模式展示

注意:port:后面要有个空格,否则不生效,启动会报错

个人习惯使用application.properties

三:使用其他常用的web服务器

Spring Boot 内置了Tomcat,同时还支持Jetty、Undertow作为web服务器,使用这些应用只需要引入相应的starter。默认使用Tomcat

1、使用Undertow服务器

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
   <!--使用其他Web服务器,去除Tomcat依赖-->
   <exclusions>
      <exclusion>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-tomcat</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<!--使用web服务器  Undertow,同时需要在starter-Web 中去除Tomcat依赖-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

配置好上述pom引用,重启服务

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.2.RELEASE)

中间部分省略............................

2018-05-16 08:56:20.890  INFO 351460 --- [  restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-16 08:56:20.971  INFO 351460 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2018-05-16 08:56:20.990  INFO 351460 --- [  restartedMain] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-05-16 08:56:21.022  INFO 351460 --- [  restartedMain] o.s.b.w.e.u.UndertowServletWebServer     : Undertow started on port(s) 8090 (http) with context path '/black'
2018-05-16 08:56:21.025  INFO 351460 --- [  restartedMain] c.b.e.helloworld.HelloworldApplication   : Started HelloworldApplication in 1.508 seconds (JVM running for 1.833)

访问地址:http://localhost:8090/black/customConfig.html

打印日志如下:

2018-05-16 08:59:45.975  INFO 351460 --- [  XNIO-2 task-1] io.undertow.servlet                      : Initializing Spring FrameworkServlet 'dispatcherServlet'
2018-05-16 08:59:45.975  INFO 351460 --- [  XNIO-2 task-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2018-05-16 08:59:45.983  INFO 351460 --- [  XNIO-2 task-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 8 ms

2、使用Jetty服务器

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
   <!--使用其他Web服务器,去除Tomcat依赖-->
   <exclusions>
      <exclusion>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-tomcat</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<!--使用web服务器  Jetty-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jetty</artifactId>
</dependency> 

总结:目前为止Undertow的性能要优于Tomcat和Jetty,推荐使用Undertow作为Spring Boot的应用服务器。

四:web服务器常用配置

server.tomcat.*包含了Tomcat的相关配置,较为重要的配置如下:

##server.tomcat.*包含了Tomcat的相关配置
#打开Tocmat访问日志
server.tomcat.accesslog.enabled=false
#访问日志所在的目录
server.tomcat.accesslog.directory=logs
#允许Http请求缓存到请求队列的的最大个数,默认不限制
server.tomcat.accept-count=
#最大连接数,默认不限制,如果一旦链接数到达,剩下的链接将会保存到请求缓存队列里,也就是accept-count指定队列
server.tomcat.max-connections=
#最大工作线程数
server.tomcat.max-threads=
#Http post内容最大长度,默认不限制
server.tomcat.max-http-post-size=

server.undertow.*包含了undertow的相关配置,较为重要的配置如下: 

## server.undertow.*的相关配置
server.undertow.accesslog.enabled=false
#日志路径
server.undertow.accesslog.dir=logs
#创建工作线程的I/O线程,默认为2或者cpu的个数
server.undertow.io-threads=
#工作线程个数,默认为I/O线程个数的8倍
server.undertow.worker-threads=
#Http post内容最大长度,默认不限制
server.undertow.max-http-post-size=

server.jetty.*包含了jetty的相关配置,较为重要的配置如下:

## server.jetty.*的相关配置
server.jetty.accesslog.enabled=false
#acceptors线程个数,用来接受访问请求,相当于工作线程
server.jetty.acceptors=
##selectors线程个数,和cpu个数相关,默认是可用(CPU+1)/2,用于分配请求给工作线程
server.jetty.selectors=

  

猜你喜欢

转载自my.oschina.net/zupengliu/blog/1813116