如何在spring mvc中重新加载/创建sessionFactory bean而不刷新整个web应用程序上下文



在春季与hibernate集成,我有以下要求。我需要重新加载/重新创建/刷新/更新唯一的sessionFactory bean。

但是当使用

((ConfigurableApplicationContext)ApplicationContextProvider.getApplicationContext()).refresh();

重新加载整个应用程序上下文(所有bean)。

你能帮我重新加载一个单一的bean基于一些条件(如用户选择/点击一些选项在UI级别)

谢谢. .

这不是一个直接的答案,但我认为在应用程序上下文中重新加载新的SessionFactory而不重新加载使用它的其他bean 将导致严重的问题。SessionFactory通常是一个单例bean,因此仅在上下文刷新时使用它注入其他bean。因此,即使您设法在应用程序上下文中放置了一个新的SessionFactory bean,也不会有DAO知道这个更改,甚至可能尝试使用封闭工厂……

如果您真的想要刷新SessionFactory bean,您必须:

  • 关闭旧bean
  • 创建一个新的
  • 小心地将它注入到所有 bean(通常是DAO)中,这些bean使用它来模仿spring在刷新时所做的事情
  • 和所有应该是"原子的",在所有bean准备好之前不应该处理任何请求。

这是你的应用程序,但在我看来都是容易出错的。至少要确保为维护人员提供红色闪烁注释…

兄弟。试试吧~

DefaultListableBeanFactory defaultListableBeanFactory =(DefaultListableBeanFactory) xmlWebApplicationContext.getBeanFactory();
        BeanDefinition beanDefinition = defaultListableBeanFactory.getBeanDefinition("pooledConnectionFactory");
        beanDefinition.setBeanClassName(PooledConnectionFactory.class.getName());
        defaultListableBeanFactory.registerBeanDefinition( "pooledConnectionFactory", beanDefinition);

相关内容

最新更新