Fork me on GitHub

Configuration and modes

Configuration

按照约定,Ninja将在conf / application.conf中查找配置文件.

application.conf是具有键和值的简单属性文件. "#"为注释.

# an arbitrary comment
application.name=Ninja demo application
application.cookie.prefix=NINJA

像任何其他Ninja文件一样,它都以UTF-8编码. 确保您的编辑器以正确的编码读取并保存文件.

Ninja属性可以做的比传统Java属性要多得多. 例如,可以通过名称来引用其他属性并将其组合.

serverName=myserver.com
serverPort=80
fullServerName=${serverName}:${serverPort}

fullServerName引用键的先前设置的值,并将返回myserver.com:80.

在您的应用程序内部,有两种访问属性的基本方法.

第一种方法是使用NinjaProperties.get(…) . 您必须先注入NinjaProperties,然后才能使用各种方法来检索属性.

@Inject 
NinjaProperties ninjaProperties;

public void myMethod() {
    String value = ninjaProperties.get("fullServerName")
    ... do even more...
}

获取属性的第二种方法是通过@Named(" fullServerName")注入属性.

/** An arbitrary constructor */
@Inject
ApplicationController(@Named("fullServerName") String fullServerName) {
    ... do something ...
}

顺便说说. 这真的很重要:属性由出色的Apache Configurations库读取和管理. 有关高级用法的更多信息,请参阅其手册 .

Configuring the modes

Ninja使用三种预定义模式(如NinjaConstant.java中定义的testdevprod ). 如果未明确设置任何模式,Ninja将使用生产模式. 这意味着,如果您通过war文件将Ninja部署到任意servlet容器,Ninja将使用生产模式.

Ninja的SuperDevMode会将模式设置为dev . Ninja的测试用例将默认使用模式测试 .

您可以通过设置Java系统属性ninja.mode来设置模式.

On the command line:
> java -Dninja.mode=dev

Or programmatically:
System.setProperty(NinjaConstant.MODE_KEY_NAME, NinjaConstant.MODE_DEV)

确保尽早设置系统属性,以便忍者从一开始就了解其模式.

如果要为不同的环境定义不同的属性,这些模式非常方便. 您可能要在运行测试时使用database1,在开发时使用database2,在生产环境中运行时使用database3.

Ninja通过在属性键之前使用模式前缀来支持该用例.

database.name=database_production   # will be used when no mode is set (or prod)
%prod.database.name=database_prod   # will be used when running in prod mode
%dev.database.name=database_dev     # will be used when running in dev mode
%test.database.name=database_test   # will be used when running in test mode

约定是使用"%"和模式名称后跟".".

HTTPS (SSL) support

从5.2.3版开始,Ninja在独立和SuperDevMode中都支持基本HTTPS(SSL). 尽管强烈建议使用其他在生产中处理SSL的方法(例如nginx),但在开发,测试或轻量产品使用期间,它可以方便地使用Ninja的内置支持.

Ninja附带了一个自签名SSL证书,该证书默认在开发测试模式下配置. 要在开发模式或测试模式下启用SSL,您只需设置要启动HTTPS服务器的端口即可.

ninja.ssl.port=8443

这可以通过将其添加到conf / application.conf配置文件中或在运行Ninja的maven插件时在命令行上完成

mvn ninja:run -Dninja.ssl.port=8443

Ninja支持同时运行HTTP和HTTPS连接器. 如果您只想运行HTTPS,只需将ninja.port设置为-1以将其禁用.

ninja.port=-1               # disable clear text http connector
ninja.ssl.port=8443         # enable ssl https connector

还可以配置SSL密钥库和信任库值. uri值可以是classpath:resourceName格式的路径资源,也可以是任何其他有效的Java URL值,因为使用了底层URL.openStream() . 请注意,在开发和测试模式下,默认密钥库为classpath:/ninja/standalone/ninja-development.keystore ,默认信任库为classpath:/ninja/standalone/ninja-development.truststore

ninja.ssl.keystore.uri=file:///var/etc/mysite.keystore
ninja.ssl.keystore.password=changeit
ninja.ssl.truststore.uri=file:///var/etc/mysite.truststore
ninja.ssl.truststore.password=changeit

Disabling diagnostic mode

从4.0.7版开始,Ninja对开发人员模式进行了新的诊断扩展,从ninja.NinjaDefault返回详细的诊断错误页面,而不是从System / views中提取模板的典型Result.

例如,在4.0.7之前的版本中,如果您的控制器类方法引发Exception,ninja.NinjaDefault的默认行为是在onException方法中捕获该异常 ,并使用模板views / system / 500internalServerError.ftl返回结果. html . 默认系统视图是基本的,比开发期间更适合在生产中使用.

从版本4.0.7开始, ninja.NinjaDefault中所有方法的默认行为是首先检查开发模式是否打开以及NinjaProperties.areDiagnosticsEnabled()是否为true. 如果两者都为true,则返回Result ,并将renderable设置为DiagnosticError实例. 由于DiagnosticError实现Renderable ,因此它知道如何将自身呈现到输出流,并且将绕过TemplateEngine .

诊断模式在PROD / TEST模式下自动禁用,但在DEV模式下也可以禁用. 只需将以下内容添加到您的application.conf中

application.diagnostics=false

Retaining diagnostic mode if you provide conf.Ninja

如果提供自己的conf.Ninja并扩展ninja.NinjaDefault,则可能会丢失针对您覆盖的特定方法的诊断模式. 您可以通过调用super方法并有条件地返回其结果而不是您自己的结果来保留功能.

public class Ninja extends NinjaDefault {

    @Override
    public Result getInternalServerErrorResult(Context context, Exception exception) {
        if (isDiagnosticsEnabled()) {
            return super.getInternalServerErrorResult(context, exception);
        }

        // your impl only active in test/prod or dev (with diagnostic disabled)
    }

}

Configuring application’s base package

如果您想将所有Java代码保留在特定的程序包中,则可以定义

application.modules.package=com.someorganinization.somepackage

在这种情况下,您必须将路线

com.someorganization.somepackage.conf.Routes.java

和Guice应用程序配置模块位于

com.someorganization.somepackage.conf.Module.java

com.someorganization.somepackage.conf.ServletModule.java

accordingly.

External configuration for deployment

在服务器上运行时,您可能需要使用完全不同的配置. 这可以通过设置Java系统属性来完成:

java -Dninja.external.configuration=conf/production.conf

这告诉Ninja加载conf / production.conf. 它还将照常加载conf / application.conf,但是conf / production.conf中的值将覆盖conf / application.conf中的值.

这样,您可以与项目分开管理生产配置. 例如,当您的服务器密码仅对特定人群可用,而对全世界不可用时,您可能需要这样做. 或者,如果您的云托管服务商使用与产品,测试或开发人员完全不同的配置.

Ninja尝试从多个位置加载ninja.external.configuration中指定的文件:

它尝试按以下顺序加载:

  • 从URL.
  • 从绝对文件路径.
  • 从相对文件路径.
  • 从用户的主目录.
  • 从类路径.

Ninja使用出色的Apache Configurations库进行加载. 有关更多信息,请参阅其手册 .

System properties to override

从Ninja v6.1.1开始,系统属性可以覆盖标准conf / application.conf或外部配置文件中设置的任何配置键. 例如,如果在conf / production.conf中将键db.connection.password设置为mypass ,则可以在运行时通过系统属性将其覆盖到otherpass ,如下所示:

java -Dninja.external.configuration=conf/production.conf -Ddb.connection.password=otherpass

前缀系统属性也受到尊重. 使用前面的示例,如果只希望该属性在测试模式下生效,则可以执行以下操作:

java -Dninja.external.configuration=conf/production.conf -D%test.db.connection.password=otherpass

Hot-reloading external configuration

默认情况下,Ninja不会重新加载您的外部配置. 但是,对于某些安装,热重载此配置而不是重新启动应用程序可能非常有用.

java -Dninja.external.reload=true -Dninja.external.configuration=conf/production.conf

如果运行时修改了配置,这会告诉Ninja重新加载您的配置.

Referencing environment variables in configuration files

您可以使用默认的Apache Commons配置语法在配置文件中引用系统属性:

%prod.db.connection.password=${env:DB_PASSWORD}

当涉及到在应用程序代码中不应该知道的生产凭证时,这特别方便.

Disabling or replacing splash image

您可以使用以下属性在启动日志中禁用忍者徽标:

 ninja.splash.display=false

您还可以通过将ascii文件放置在ninja / logo.txt中 ,将其替换为自定义徽标. 该文件应至少包含一个{}占位符,它将被忍者版本取代.


by  ICOPY.SITE