gpt4 book ai didi

java - 同一 JVM 上每个 Java 程序的单独 JVM 属性

转载 作者:行者123 更新时间:2023-12-02 03:12:46 25 4
gpt4 key购买 nike

我在 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);
}
}

当我为每个应用程序部署 war 并看到 key1 属性的值时,它被加载的第二个应用程序覆盖。

正如我在这里展示的,加载 app1 时,属性 key1 的值

value1

加载 app2 时,属性 key1 的值 valu2

但是加载 app2 后,它会覆盖 app1 的 key1

valu1_for_app1

上面的代码非常简单,

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 属性。

最佳答案

对于应用程序属性,您不想使用虚拟机参数。正如您所发现的,这些对于整个容器来说是全局的。相反,您应该使用在应用程序加载时加载的属性文件。我喜欢使用的一种方法是将资源包加载到静态映射中。假设 WEB-INF/classes 目录中有一个“application.properties”文件。像这样:

//common-service library used in both web-apps
public class CommonService {

public static Map< String, String > APPLICATION_PROPERTIES = new HashMap<>();

static {
ResourceBundle bundle = ResourceBundle.getBundle( "application" );
for( String key : bundle.keySet() ) {
APPLICATION_PROPERTIES.put( key, ( String )bundle.getObject( key ) );
}
}
}

然后,当您想要访问应用程序属性时,可以在代码中执行如下操作:

String key1Value = CommonService.APPLICATION_PROPERTIES.get( "key1" );

关于java - 同一 JVM 上每个 Java 程序的单独 JVM 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40804252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com