【发布时间】:2016-11-25 11:42:50
【问题描述】:
我在 tomat 主机进程中运行两个 Web 应用程序,这意味着我认为应该有两个独立的程序,每个应用程序一个。
另一件事是两个应用程序都使用了一个 JVM 属性,我希望它是特定于应用程序的。
//common-service library used in both web-apps
public class CommonService {
private static Logger logger = LogManager.getLogger(CommonService.class);
static {
String uuid = UUID.randomUUID().toString();
logger.debug("CommonService initialization for {}" , uuid);
System.setProperty("key1", "value1-"+ uuid);
}
}
当我为每个应用程序部署战争并查看 key1 属性的值时,它会被加载的第二个应用程序覆盖。
正如我在这里展示的那样,
加载 app1 时,属性 key1 的值
但是app2加载后,它会覆盖app1的key1。
上面的代码很简单,
public class Service1Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
CommonService commonService = new CommonService();
System.out.println("Service1 key1= " + System.getProperty("key1"));
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<h1>" + System.getProperty("key1")+ "</h1>");
out.println("</body>");
out.println("</html>");
}
}
所以,似乎我只能在单个 JVM 中使用全局 JVM 参数,但是我的服务器上运行着多个服务,每个服务都需要有自己的一组 JVM 参数,基于这些参数还有另一个实际使用的 api那个 JVM 属性。
【问题讨论】:
-
不确定您真正要求的是什么……但如果您的服务不使用系统属性,而是依赖不同的属性文件,这可能会有所帮助;也许这有帮助:stackoverflow.com/questions/12280787/…?
-
properties for each java process on same JVMJVM 是一个进程(不包括 LWP)。一个 JVM 上没有更多进程这样的事情 -
没错,系统属性是每个 JVM 的 - 您正在查看应用程序级别的内容
-
您只能在命令行上全局设置系统属性。您可以将它们设为本地应用程序,但您将如何设置它们?
标签: java jvm jvm-arguments