生产配置
你在生产模式可以有许多不同类型的配置。有三种主要类型:
每个类型都具有不同的方法来配置它们。
一般配置
Play有很多配置选项。你可以配置数据库连接URLs, 应用程序secret, HTTP端口, SSL配置, 如此等等。
多数Play的配置是定义在多种.conf
文件中, 使用HOCON格式。主配置文件是使用application.conf
文件。你可以在项目内的conf/application.conf
找到这个文件。application.conf
文件在运行从类路径中加载(或者你也可以重写它从哪里加载)。每个项目只能有一个application.conf
。
其它.conf
也是一样加载。库定义的默认设置在reference.conf
文件中。这些文件保存在库的JARs中 — 每个JAR只有一个reference.conf
— 并且在运行时聚合在一起。reference.conf
文件提供默认设置; 他们可以通过在application.conf
文件中定义的设置重写。
Play的配置也可以通过使用系统属性和环境变量来定义。当设置环境的变化时,这可以方便; 当你的应用程序运行在不同的环境时,你可以使用application.conf
作为公共设置, 但使用系统属性和环境变量来改变设置。
系统属性重写在application.conf
中的设置, 并且application.conf
重写在各种reference.conf
文件中的默认设置。
你有几种方式可以在运行时重写配置。当在多变的环境中时这很方便;你可以为每个环境动态更改配置。这里是在运行时配置的几种选择:
- 使用一个替换的
application.conf
文件。 - 使用系统属性重写单独的设置。
- 使用环境变量注入配置值。
指定一个替换的配置文件
默认情况下是从类路径加载application.conf
文件。如果需要,你可以指定一个替换的配置文件:
使用 -Dconfig.resource
这会在应用程序类路径搜索一个替换配置文件(通常是在打包前把这些替换配置文件放到应用程序conf/
目录)。Play会查找conf/
,所以你不需要添加conf/
。
$ /path/to/bin/ -Dconfig.resource=prod.conf
使用 -Dconfig.file
你也可以指定另一个本机其它位置的配置文件,不打包到你的应用程序中:
$ /path/to/bin/ -Dconfig.file=/opt/conf/prod.conf
注意你总是可以在新的
prod.conf
文件引用原始配置文件,使用include
指令, 如:include "application.conf" key.to.override=blah
使用系统属性来重写配置
有时候您不想指定一个完整的配置文件, 但只覆盖一堆的特定键。你可以通过指定他们作为Java系统属性:
$ /path/to/bin/ -Dplay.crypto.secret=abcdefghijk -Ddb.default.password=toto
使用系统属性指定HTTP服务器地址和端口
你可以使用系统属性很容易的提供HTTP端口和地址。默认是在0.0.0.0
地址的9000
端口(所有地址)。
$ /path/to/bin/ -Dhttp.port=1234 -Dhttp.address=127.0.0.1
更改RUNNING_PID的路径
可以更改包含启动应用程序的进程id的文件路径。通常这个文件是放在你的play项目的根目录下, 但是建议你把它放在重新启动时它会自动清除的某个地方,如/var/run
:
$ /path/to/bin/ -Dpidfile.path=/var/run/play.pid
要确保这个目录是存在的,并且运行Play应用程序的用户有这个目录的写入权限。
使用这个文件, 你可以使用kill
命令停止你的应用程序, 例如:
$ kill $(cat /var/run/play.pid)
使用环境变量
你可以从application.conf
文件引用环境变量:
my.key = defaultvalue
my.key = ${?MY_KEY_ENV}
这里, 如果没有MY_KEY_ENV
这个环境变量的值,my.key = ${?MY_KEY_ENV}
字段就会忽略, 但如果你设置了环境变量MY_KEY_ENV
, 它就会被使用。
服务器配置选项
服务器配置选项的完整列表, 包括默认的, 就像下面看到的:
play {
server {
# The root directory for the Play server instance. This value can
# be set by providing a path as the first argument to the Play server
# launcher script. See `ServerConfig.loadConfiguration`.
dir = ${?user.dir}
# HTTP configuration
http {
# The HTTP port of the server. Use a value of "disabled" if the server
# shouldn't bind an HTTP port.
port = 9000
port = ${?http.port}
# The interface address to bind to.
address = "0.0.0.0"
address = ${?http.address}
}
# HTTPS configuration
https {
# The HTTPS port of the server.
port = ${?https.port}
# The interface address to bind to
address = "0.0.0.0"
address = ${?https.address}
# The SSL engine provider
engineProvider = "play.core.server.ssl.DefaultSSLEngineProvider"
engineProvider = ${?play.http.sslengineprovider}
# HTTPS keystore configuration, used by the default SSL engine provider
keyStore {
# The path to the keystore
path = ${?https.keyStore}
# The type of the keystore
type = "JKS"
type = ${?https.keyStoreType}
# The password for the keystore
password = ""
password = ${?https.keyStorePassword}
# The algorithm to use. If not set, uses the platform default algorithm.
algorithm = ${?https.keyStoreAlgorithm}
}
# HTTPS truststore configuration
trustStore {
# If true, does not do CA verification on client side certificates
noCaVerification = false
}
}
# The type of ServerProvider that should be used to create the server.
# If not provided, the ServerStart class that instantiates the server
# will provide a default value.
provider = ${?server.provider}
# The path to the process id file created by the server when it runs.
# If set to "/dev/null" then no pid file will be created.
pidfile.path = ${play.server.dir}/RUNNING_PID
pidfile.path = ${?pidfile.path}
# Configuration options specific to Netty
netty {
# The maximum length of the initial line. This effectively restricts the maximum length of a URL that the server will
# accept, the initial line consists of the method (3-7 characters), the URL, and the HTTP version (8 characters),
# including typical whitespace, the maximum URL length will be this number - 18.
maxInitialLineLength = 4096
maxInitialLineLength = ${?http.netty.maxInitialLineLength}
# The maximum length of the HTTP headers. The most common effect of this is a restriction in cookie length, including
# number of cookies and size of cookie values.
maxHeaderSize = 8192
maxHeaderSize = ${?http.netty.maxHeaderSize}
# The maximum length of body bytes that Netty will read into memory at a time.
# This is used in many ways. Note that this setting has no relation to HTTP chunked transfer encoding - Netty will
# read "chunks", that is, byte buffers worth of content at a time and pass it to Play, regardless of whether the body
# is using HTTP chunked transfer encoding. A single HTTP chunk could span multiple Netty chunks if it exceeds this.
# A body that is not HTTP chunked will span multiple Netty chunks if it exceeds this or if no content length is
# specified. This only controls the maximum length of the Netty chunk byte buffers.
maxChunkSize = 8192
maxChunkSize = ${?http.netty.maxChunkSize}
# Whether the Netty wire should be logged
log.wire = false
log.wire = ${?http.netty.log.wire}
# Netty options. Possible keys here are defined by:
#
# http://netty.io/3.9/api/org/jboss/netty/channel/socket/SocketChannelConfig.html
# http://netty.io/3.9/api/org/jboss/netty/channel/socket/ServerSocketChannelConfig.html
# http://netty.io/3.9/api/org/jboss/netty/channel/socket/nio/NioSocketChannelConfig.html
#
# Options that pertain to the listening server socket are defined at the top level, options for the sockets associated
# with received client connections are prefixed with child.*
option {
# Set whether connections should use TCP keep alive
# child.keepAlive = false
# Set whether the TCP no delay flag is set
# child.tcpNoDelay = false
# Set the size of the backlog of TCP connections. The default and exact meaning of this parameter is JDK specific.
# backlog = 100
}
}
}
# Configuration specific to Play's experimental Akka HTTP backend
akka {
# How long to wait when binding to the listening socket
http-bind-timeout = 5 seconds
}
}
日志配置
可以通过创建一个logback配置文件来配置日志。您的应用程序通过以下方法使用日志:
绑定一个自定义logback配置文件到你的应用程序
创建一个叫logback.xml
的替换logback配置文件,并拷贝到<app>/conf
你也可以通过系统属性指定另一个logback配置文件。请注意如果配置文件没有指定,那么play 会使用默认logback.xml
,它在play生产模式自带。这意味着在application.conf
文件中的任何日志级别设置会被重写。一个好的方式是总是指定你的logback.xml
。
使用 -Dlogger.resource
指定另一个logback配置文件以从类路径中加载:
$ /path/to/bin/ -Dlogger.resource=conf/prod-logger.xml
使用 -Dlogger.file
指定另一个logback配置文件以从文件系统加载:
$ /path/to/bin/ -Dlogger.file=/opt/prod/prod-logger.xml
使用 -Dlogger.url
指定另一个logback配置文件以从一个URL加载:
$ /path/to/bin/ -Dlogger.url=http://conf.mycompany.com/logger.xml
JVM 配置
你可以指定任何JVM参数到应用程序启动脚本,否则就使用默认JVM设置:
$ /path/to/bin/ -J-Xms128M -J-Xmx512m -J-server
为方便起见,你也可以一次性设置内存min, max, permgen 和保留代码缓存大小; 有一个计算公式用来确定这些值给定的支持参数(代表最大内存):
$ /path/to/bin/ -mem 512 -J-server