Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为jetty中部署为服务的两个应用程序设置不同的java系统属性_Java_Deployment_Jetty_Devops_Jetty 9 - Fatal编程技术网

为jetty中部署为服务的两个应用程序设置不同的java系统属性

为jetty中部署为服务的两个应用程序设置不同的java系统属性,java,deployment,jetty,devops,jetty-9,Java,Deployment,Jetty,Devops,Jetty 9,我将jetty(9.2.1)作为部署两个应用程序的服务运行。 这些是我遵循的步骤 开始码头服务 我有两个应用程序要部署在同一个jetty实例中。我在jetty主目录中添加了两个war文件。在“webapps”文件夹中创建了两个xml文件以设置contextpath和war。应用程序在上下文路径中启动 但我有两个WAR需要部署,这两个应用程序需要为系统属性“appConfigPath”提供不同的值。我怎样才能做到这一点 已试用的解决方案 如果它只是一个应用程序,而不是作为服务运行,我可以像

我将jetty(9.2.1)作为部署两个应用程序的服务运行。 这些是我遵循的步骤

  • 开始码头服务

  • 我有两个应用程序要部署在同一个jetty实例中。我在jetty主目录中添加了两个war文件。在“webapps”文件夹中创建了两个xml文件以设置contextpath和war。应用程序在上下文路径中启动

但我有两个WAR需要部署,这两个应用程序需要为系统属性“appConfigPath”提供不同的值。我怎样才能做到这一点

已试用的解决方案

如果它只是一个应用程序,而不是作为服务运行,我可以像这样运行它-java-Dappconfig=service.properties-jarstart.jar

如果只有一个应用程序并且它作为服务运行,我可以在start.ini中指定系统属性

参考了这一点——我尝试在我在webapps中创建的xml文件中添加setProperty,如下图所示,但没有成功

jetty-app1.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/app1</Set>
  <Set name="war">/opt/jetty/app1.war</Set>
  <Call class="java.lang.System" name="setProperty">     
     <Arg>appConfigPath</Arg>     
    <Arg>opt/jetty/service1.properties</Arg>   
  </Call>
</Configure>



/附件1
/opt/jetty/app1.war
appConfigPath
opt/jetty/service1.properties
jetty-app2.xml

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/app2</Set>
  <Set name="war">/opt/jetty/app2.war</Set>
  <Call class="java.lang.System" name="setProperty">     
     <Arg>appConfigPath</Arg>     
    <Arg>opt/jetty/service2.properties</Arg>   
  </Call>
</Configure>

/附件2
/opt/jetty/app2.war
appConfigPath
opt/jetty/service2.properties

正如安德烈亚斯所说。这在Java中是不可能的

系统属性存储在
java.lang.System
类的静态字段中。每个加载的类实例化一个静态字段。因此,您可以在不同的类装入器中拥有静态字段的不同实例。Hawever Java“系统类”(Java.lang.*和其他)需要由根类加载器加载,因此只能有一个
Java.lang.system
类加载到JVM中,因此JVM中的给定系统属性只有一个值

基本上,您在XML中尝试的是将同一属性两次设置为两个不同的值,最后一个要执行的属性将覆盖另一个属性

虽然无法满足您的要求(在同一Jetty实例中运行两个具有不同系统属性的应用程序),但您可以放宽这些要求:

  • 要么使用两个Jetty实例
  • 或者使用相同的系统属性运行这些应用程序(但配置不同,使用JNDI或上下文参数,如您链接的问题中所述)

同样,正如您链接的问题(以及Andreas评论)中所解释的:在Java web应用程序中使用系统属性进行配置是一个错误。我建议将它报告给制作该应用程序的人,并要求他们修复它。

正如安德烈亚斯所说。这在Java中是不可能的

系统属性存储在
java.lang.System
类的静态字段中。每个加载的类实例化一个静态字段。因此,您可以在不同的类装入器中拥有静态字段的不同实例。Hawever Java“系统类”(Java.lang.*和其他)需要由根类加载器加载,因此只能有一个
Java.lang.system
类加载到JVM中,因此JVM中的给定系统属性只有一个值

基本上,您在XML中尝试的是将同一属性两次设置为两个不同的值,最后一个要执行的属性将覆盖另一个属性

虽然无法满足您的要求(在同一Jetty实例中运行两个具有不同系统属性的应用程序),但您可以放宽这些要求:

  • 要么使用两个Jetty实例
  • 或者使用相同的系统属性运行这些应用程序(但配置不同,使用JNDI或上下文参数,如您链接的问题中所述)

同样,正如您链接的问题(以及Andreas评论)中所解释的:在Java web应用程序中使用系统属性进行配置是一个错误。我建议将其报告给制作该应用程序的人,并要求他们修复它。

如果您的Web应用程序希望使用系统属性进行配置,那么它的编码是错误的,我的意思是,它没有在一个容器中进行多个安装的编码。设计良好的webapp将使用在
web.xml
文件中定义的Servlet上下文初始化参数,用于任何需要的配置值,如
appConfigPath
属性。webapp应该执行或依赖于VM全局的任何操作,例如系统属性。我正在部署由其他人创建的应用程序。此appConfigPath系统参数用于指定应用程序的service.properties,该属性在部署场景中必须是自定义的。如果只能使用系统属性告知webapp路径,则您必须在两个单独的Jetty实例中加载这两个webapp。谢谢。我可以将两个独立的jetty实例作为服务运行吗?如果您的webapp希望使用系统属性进行配置,那么它的编码是错误的,这意味着它没有在一个容器中进行多个安装的编码。设计良好的webapp将使用在
web.xml
文件中定义的Servlet上下文初始化参数,用于任何需要的配置值,如
appConfigPath
属性。webapp应该执行或依赖于VM全局的任何操作,例如系统属性。我正在部署由其他人创建的应用程序。此appConfigPath系统参数用于指定应用程序的service.properties,该属性在部署场景中必须是自定义的。如果只能使用系统属性告知webapp路径,则您必须在两个单独的Jetty实例中加载这两个webapp。谢谢。我可以将两个独立的jetty实例作为服务运行吗。?可以从同一台服务器将两个jetty实例作为服务运行吗?@Abhi我认为可以,但这是一个不同的问题。可以从同一台服务器将两个jetty实例作为服务运行吗?@Abhi我认为可以,但这是一个不同的问题。