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=