生产环境中的 Javalite 框架

Javalite framwork in production env

我将推出第一个基于 Javalite 框架的 webapp 版本。感谢框架,它使开发迅速:)。这是我的生产环境中的一些目标。

  1. 我想使用 maven-assembly-plugin 将所有依赖项 assemble 放入一个 jar 中,命名为 myapp-with-dependencies.jar
  2. 我想 运行 使用命令行的 webapp:java -jar myapp-with-dependencies.jar,这样我就可以为 myapp
  3. 创建守护进程服务

我已经检查了 github 上 Javalite 存储库的所有示例应用程序,下面列出了开发环境 Main.java 中的条目

public class Main {

  public static void main(String[] args) throws Exception {
    Server server = new Server(8080);
    WebAppContext webapp = new WebAppContext("src/main/webapp", "/"); // <- should package as war in production?
    webapp.addAliasCheck(new AllowSymLinkAliasChecker());
    server.setHandler(webapp);
    server.start();
    server.dumpStdErr();
    server.join();
  }
}

new WebAppContext("src/main/webapp", "/"); 只适用于开发模式?以及如何将其更改为生产模式?

问题可能与嵌入式码头有关。如果您有任何在生产环境中发布 Javalite 的经验,可以分享一下吗?谢谢!

您似乎在问 2 个不同的问题。

你想要一个自动执行的 jar 包吗? 如果是这样,那么您将使用 ServletContextHandler 而不是 WAR 或 WebAppContext.

参见:

示例项目位于

如果您想使用 WebAppContext 并让它自动执行,那么基本上您将拥有所谓的 "Live War".

基础知识是您将拥有多个管理不同层的 Maven(或 gradle)项目,您将需要完成这种 live-war 设置。

参见:

  • Error while executing WAR file

示例项目位于

您找到的示例是 运行 嵌入 Jetty 的一种非常简单的方法。您问的另一个问题是关于 运行 在不同环境中的 ActiveWeb 项目。

请参阅 http://javalite.io/app-config。我们总是使用 AppConfig 从 属性 文件中加载与当前环境相对应的属性。该页面包含为不同环境设置系统所需的所有信息

第 1 步:

/app_config
        |
        +--global.properties
        |
        +--development.properties
        |
        +--staging.properties
        |
        +--production.properties

步骤 2

将属性添加到您的 属性 文件,例如 development.properties

first.name=John
phrase= And the name is ${first.name}

步骤 3

使用 p() 方法提取属性:

import static org.javalite.app_config.AppConfig.p;
...
System.out.println(p("phrase"));

当您在本地 运行 时,它会默认读取 development.properties 文件。

如果您设置环境变量 ACTIVE_ENV=production,那么您的代码将从 production.properties 文件中读取。

我们如何 运行 Java生产环境中的精简版应用程序。

通常,我们使用 Jetty Maven 插件进行开发 - 有很多这样的例子:https://github.com/javalite

我们的标准 Maven 构建会创建一个 WAR 文件,其中将所有依赖项作为 jar 文件包含在 WEB_INF/lib 下 - 也就是说,我们不会创建具有依赖项的 jar。 一旦我们有了那个 WAR 文件,我们就将它部署在一个标准的生产容器上,就像任何其他 Java 应用程序(JBoss、Tomcat 等)一样。