Solon

二、应用常用配置说明

</> markdown

约定参考:

//资源路径约定(不用配置;也不能配置)
resources/app.yml( 或 app.properties ) #为应用配置文件

resources/static/     #为静态文件根目录(v2.2.10 后支持)
resources/templates/  #为视图模板文件根目录(v2.2.10 后支持)

属性之间的引用,使用 "${...}":

test.demo1: "${db1.url}"                          #引用应用属性
test.demo2: "jdbc:mysql:${db1.server}"            #引用应用属性并组合
test.demo3: "jdbc:mysql:${db1.server}/${db1.db}"  #引用多个应用属性并组合
test.demo4: "${JAVA_HOME}"                        #引用环境变量

1、服务端基本属性

#服务端口(默认为8080)
server.port: 8080
#服务主机(ip)
server.host: "0.0.0.0"
#服务包装端口(默认为 ${server.port})//v1.12.1 后支持  //一般用docker + 服务注册时才可能用到
server.wrapPort: 8080
#服务包装主机(ip)//v1.12.1 后支持
server.wrapHost: "0.0.0.0"
#服务上下文路径
server.contextPath: "/test-service/" #v1.11.2 后支持(或者 "!/test-service/" 表示原路径不能再请求 v2.6.3 后支持)

#服务 http 信号名称,服务注册时可以为信号指定名称(默认为 ${solon.app.name})
server.http.name: "waterapi"
#服务 http 信号端口(默认为 ${server.port})
server.http.port: 8080
#服务 http 信号主机(ip)
server.http.host: "0.0.0.0"
#服务 http 信号包装端口 //v1.12.1 后支持  //一般用docker + 服务注册时才可能用到
server.http.wrapPort: 8080
#服务 http 信号包装主机(ip)//v1.12.1 后支持
server.http.wrapHost: "0.0.0.0"
#服务 http 最小线程数(默认:0表示自动,支持固定值 2 或 内核倍数 x2)//v1.10.13 后支持 //一般不用配置
server.http.coreThreads: 0 
#服务 http 最大线程数(默认:0表示自动,支持固定值 32 或 内核倍数 x32) //v1.10.13 后支持
server.http.maxThreads: 0
#服务 http 闲置线程或连接超时(0表示自动,一般是1分钟,单位毫秒) //v1.10.13 后支持
server.http.idleTimeout: 0
#服务 http 是否为IO密集型? //v1.12.2 后支持
server.http.ioBound: true

#服务 socket 信号名称,服务注册时可以为信号指定名称(默认为 ${solon.app.name})
server.socket.name: "waterapi.tcp"
#服务 socket 信号端口(默认为 20000+${server.port})
server.socket.port: 28080
#服务 socket 信号主机(ip)
server.socket.host: "0.0.0.0"
#服务 socket 信号包装端口 //v1.12.1 后支持  //一般用docker + 服务注册时才可能用到
server.socket.wrapPort: 28080
#服务 socket 信号包装主机(ip)//v1.12.1 后支持
server.socket.wrapHost: "0.0.0.0"
#服务 socket 最小线程数(默认:0表示自动,支持固定值 2 或 倍数 x2)) //v1.10.13 后支持
server.socket.coreThreads: 0 
#服务 socket 最大线程数(默认:0表示自动,支持固定值 32 或 倍数 x32)) //v1.10.13 后支持
server.socket.maxThreads: 0
#服务 socket 闲置线程或连接超时(0表示自动,单位毫秒)) //v1.10.13 后支持
server.socket.idleTimeout: 0
#服务 socket 是否为IO密集型? //v1.12.2 后支持
server.socket.ioBound: true


#服务 websocket 信号名称,服务注册时可以为信号指定名称(默认为 ${solon.app.name})
server.websocket.name: "waterapi.ws"
#服务 websocket 信号端口(默认为 10000+${server.port})
server.websocket.port: 18080
#服务 websocket 信号主机(ip)
server.websocket.host: "0.0.0.0"
#服务 websocket 信号包装端口 //v1.12.1 后支持  //一般用docker + 服务注册时才可能用到
server.websocket.wrapPort: 18080
#服务 websocket 信号包装主机(ip)//v1.12.1 后支持
server.websocket.wrapHost: "0.0.0.0"
#服务 websocket 最小线程数(默认:0表示自动,支持固定值 2 或 倍数 x2)) //v1.10.13 后支持
server.websocket.coreThreads: 0 
#服务 websocket 最大线程数(默认:0表示自动,支持固定值 32 或 倍数 x32)) //v1.10.13 后支持
server.websocket.maxThreads: 0
#服务 websocket 闲置线程或连接超时(0表示自动,单位毫秒)) //v1.10.13 后支持
server.websocket.idleTimeout: 0
#服务 websocket 是否为IO密集型? //v1.12.2 后支持
server.websocket.ioBound: true

关于包装主机与包装端口的说明:

  • 比如,服务在docker里运行,就相当于被docker包装了一层。
  • 此时,要向外部注册服务,就可能需要使用包装主机与包装端口。

2、请求会话相关

#设定最大的请求包大小(或表单项的值大小)//默认: 2m
server.request.maxBodySize: 2mb #kb,mb
#设定最大的上传文件大小
server.request.maxFileSize: 2mb #kb,mb (默认使用 maxBodySize 配置值)
#设定最大的请求头大小//默认: 8k
server.request.maxHeaderSize: 8kb #kb,mb
#设定上传使用临时文件(v2.7.2 后支持)
server.request.useTempfile: false //默认 false
#设定请求体编码
server.request.encoding: "utf-8"

#设定响应体编码
server.response.encoding: "utf-8"

#设定会话超时秒数(单位:秒)
server.session.timeout: 7200 
#设定会话id的cookieName
server.session.cookieName: "SOLONID"
#设定会话状态的cookie域(默认为当前域名)
server.session.cookieDomain: noear.org

3、服务端SSL证书配置属性(https)

#设定 ssl 证书(支持:solon.boot.jdkhttp 或 solon.boot.jlhttp 或 solon.boot.smarthttp 或 solon.boot.jetty 或 solon.boot.undertow)
#属于所有信号的公共配置
server.ssl.keyStore: "./demo.jks" #或 "./demo.pfx" #把文件放外面
server.ssl.keyPassword: "demo"

#设定 http 信号的 ssl 证书(如果没有,会使用 server.ssl 的配置)//v2.3.7 后支持
server.http.ssl.enable: true
server.http.ssl.keyStore: "./demo.jks" #或 "./demo.pfx" #把文件放外面
server.http.ssl.keyPassword: "demo"

#设定 socket 信号的 ssl 证书(如果没有,会使用 server.ssl 的配置)//v2.3.7 后支持
server.socket.ssl.enable: true
server.socket.ssl.keyStore: "./demo.jks" #或 "./demo.pfx" #把文件放外面
server.socket.ssl.keyPassword: "demo"

#设定 websocket 信号的 ssl 证书(如果没有,会使用 server.ssl 的配置)//v2.3.7 后支持
server.websocket.ssl.enable: true
server.websocket.ssl.keyStore: "./demo.jks" #或 "./demo.pfx" #把文件放外面
server.websocket.ssl.keyPassword: "demo"

注意:添加 ssl 证书后,应用的 "server.port" 端口只能用 https 来访问。

4、服务端压缩输出(gzip)

v2.5.7 后支持

# 设定 http gzip配置
server.http.gzip.enable: false  #是否启用(默认 fasle)
server.http.gzip.minSize: 4096 #最小多少大小才启用(默认 4k)
server.http.gzip.mimeTypes: 'text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml'

注意:mimeTypes 默认的常见的类型,如果有需要增量添加

5、应用基本属性

#应用名称
solon.app.name: "waterapi"
#应用组
solon.app.group: "water"
#应用命名空间(一般用不到,只有支持的组件才用)
solon.app.namespace: "demo"
#应用标题
solon.app.title: "WATER"

#应用体外扩展目录
solon.extend: "ext"

#应用元信息输出开启(输出每个插件的信息)
solon.output.meta: 1

6、应用环境配置切换

#应用环境配置(主要用于切换包内不同的配置文件)
solon.env: dev

#例:
# app.yml      #应用主配置(必然会加载)
# app-dev.yml  #应用dev环境配置
# app-pro.yml  #应用pro环境配置
#
#启动时:java -Dsolon.env=pro -jar demo.jar 或者 java -jar demo.jar --env=pro

7、应用配置增强

#添加外部扩展配置(用于指定外部配置。策略:先加载内部的,再加载外部的盖上去)
solon.config.add: "./app.yml" #把文件放外面(多个用","隔开) //替代已弃用的 solon.config

#添加多个内部配置(在 app.yml 之外,添加配置加载)//v2.2.7 后支持
solon.config.load:
  - "app-ds-${solon.env}.yml"     #可以是环境相关的
  - "app-auth_${solon.env}.yml"
  - "config/common.yml"           #也可以环境无关的或者带目录的

8、视图后缀与模板引擎的映射配置

#默认约定的配置(不需要配置,除非要修改)
solon.view.mapping.htm: BeetlRender #简写
solon.view.mapping.shtm: EnjoyRender
solon.view.mapping.ftl: FreemarkerRender
solon.view.mapping.jsp: JspRender
solon.view.mapping.html: ThymeleafRender

#添加自义定映射时,需要写全类名
solon.view.mapping.vm: org.noear.solon.view.velocity.VelocityRender #全名(一般用简写)

9、MIME 配置

一般有特别的静态资源后缀,才会用到

#添加MIME印射(如果有需要?)
solon.mime:
  vue: "text/html"
  map: "application/json"
  log: "text/plain" #这三行只是示例一下!

10、安全停止配置

solon.stop.safe: 0   #安全停止(0或1)//(v2.1.0 后支持;之前只能用接口启用)
solon.stop.delay: 10   #安全停止的延时秒数(默认10秒)

11、虚拟线程配置

solon.threads.virtual.enabled: false #启用虚拟线程池(默认false)//v2.7.3 后支持