【问题标题】:Spring Beans survive application restart?Spring Beans 在应用程序重启后仍然存在?
【发布时间】:2011-12-12 10:33:48
【问题描述】:

我这里有一个非常非常奇怪的问题。我有一个用Spring 3.0.5-ReleaseJava 6.0 编写的桌面应用程序。我还在 UI 中使用 Swing。

在启动时,应用程序读取一个application-context.xml 文件并从那里实例化一个配置bean,如下所示:

<bean id="config" class="my.blabla.Configuration">
    <property name="port" value="5555"></property>
    <property name="user" value="myUser"></property>
</bean>

在我的应用程序中,我正在使用此配置 bean 中的属性。

现在的问题如下:

我将应用程序打包成一个 jar 文件并将其部署在机器上。 我遵循以下步骤:

  1. application-context.xml 中,我将属性user 更改为userA
  2. 现在我运行应用程序。一切运行良好。在日志文件属性中,用户显示 userA
  3. 我关闭应用程序

  4. application-context.xml 中,我将属性 user 更改为 userB

  5. 我运行应用程序。但是在日志文件属性 user 中显示 userA

更多信息。调试应用程序时不会发生这种情况。它仅在应用程序被打包并从命令行执行时出现。 我通过默认关闭按钮关闭我的应用程序并设置了这个:

 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

任何想法,这里发生了什么? spring bean 是否有可能在应用程序重新启动后以某种方式幸存下来?有没有可能java进程没有关闭?

我快疯了。非常感谢任何帮助。

【问题讨论】:

  • 只是一个疯狂的猜测 - 旧的应用程序上下文是否被缓存在任何地方?检查打包文件中的应用上下文 - 也许会有所帮助。

标签: java spring swing


【解决方案1】:

您是从 JAR 文件运行的吗?该 JAR 文件中是否包含应用程序上下文 XML?将 bean 从 userA 更改为 userB 后是否重新创建了 JAR?这可以解释神秘的行为。

Spring bean 无法在重新启动后幸存下来,就像任何内存中的值一样。您的期望与现实不符。

【讨论】:

  • 是的,我从 jar 文件运行。应用程序上下文在 jar 文件之外。如果我在更改 bean 后重新创建 jar 文件,一切正常。如果我不重新创建,我会得到所描述的行为。
  • 您必须重新创建 JAR。您不应该在 JAR 之外拥有应用上下文。
  • 需要娱乐的原因是什么?为什么我不能在 jar 之外拥有应用程序上下文?有什么我不知道的问题吗?
  • 我猜你的应用没有按照你的想法做。除非我看到您的代码,否则我无法判断。您如何访问应用程序上下文?从 CLASSPATH 加载?你如何告诉应用应用上下文在哪里?
  • 感谢您的帮助,您为我指明了正确的方向,我可以弄清楚。如果 jar 位于带有空格的文件夹中,我的“查找应用程序上下文”算法似乎失败了......
猜你喜欢
  • 2020-01-07
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多