WildFly中多个EAR间的静态变量是否共享?
问题解答
结论
这个静态变量不会在10个EAR之间共享,每个EAR的该变量都是独立的,各自赋值不会互相覆盖,正好满足你的需求。
为什么不会共享?
核心原因就是类加载器的隔离机制,这是Java EE应用服务器的标准特性:
- WildFly会给每个部署的EAR分配一个独立的模块类加载器。
- 每个EAR自己
/lib目录下的my-lib.jar,会被当前EAR的专属类加载器单独加载——等于10个EAR会加载出10个完全独立的MyClassUsedForSomethingImportant类。 - 在JVM里,类的唯一性是由「类加载器 + 全限定类名」共同决定的。不同类加载器加载的同名类,JVM会当成完全不同的类,它们的静态变量自然也是各自独立的,互相不干扰。
补充提醒
只有当你把my-lib.jar部署成WildFly的全局共享模块(比如放到modules目录并配置全局可见)时,所有EAR才会共用同一个类实例,静态变量才会被共享。但你现在是把JAR放在每个EAR内部的/lib下,属于EAR私有资源,完全不会有共享问题。
内容的提问来源于stack exchange,提问作者Vitor
相关产品推荐
相关产品推荐

