从单独的上下文访问弹簧上下文

Posted

技术标签:

【中文标题】从单独的上下文访问弹簧上下文【英文标题】:Access a spring context from separate context 【发布时间】:2014-05-31 06:18:35 【问题描述】:

我的主 Spring 上下文是在我的应用程序启动时创建的。在此上下文中是数据库连接和嵌入式 Web 服务器。

嵌入式网络服务器随后以 DispatcherServlet 和它自己的 Spring 上下文启动。

我希望从其中一个 DispatcherServlet 访问数据库,但由于连接不在其上下文中,我不能。

解决这个问题的Java/Spring方法是什么?

这是我的 web.xml

<servlet>
    <servlet-name>App</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:/jettycontext.xml</param-value>
    </init-param>
</servlet>

这是入口主方法

try (ConfigurableApplicationContext context = new GenericXmlApplicationContext("maincontext.xml")) 

    JServer server = context.getBean(JServer.class);
    server.start();

这是 JServer.start() 方法

server = new Server(8080);        
server.setHandler(new WebAppContext("./webapp", "/"));
server.start();
server.join();

【问题讨论】:

能否发布您正在使用的 web.xml(如果您确实在使用)? 【参考方案1】:

尝试添加

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:maincontext.xml</param-value> <!-- or wherever else you have the maincontext.xml file-->
</context-param>

<listener>
   <listener-class>
      org.springframework.web.context.ContextLoaderListener
   </listener-class>
</listener>

web.xml

请参阅 this、this 和 this 教程。

This、this 和 this SO 问题描述了两种上下文之间的区别

【讨论】:

呃,我是 Java 新手,但我 99.99% 确信这不是我想要的。这不会只是再次加载主上下文,而是在 servlet 中。 它应该使主上下文成为 Web 上下文的父级(您现在正在 Dispatcher Servlet 中加载它),从而使 Web 上下文的 bean 可以访问根上下文的 bean。这是您在多个教程中遇到的相当标准的设置(我自己也有很多次) 能否将我链接到其中一个教程?

以上是关于从单独的上下文访问弹簧上下文的主要内容,如果未能解决你的问题,请参考以下文章

关闭或停止后重新加载弹簧上下文

上下文中的多个包:组件扫描,弹簧配置

为啥默认情况下每个 SYCL 设备都在单独的上下文中?

为啥默认情况下每个 SYCL 设备都在单独的上下文中?

python 将单独的数据文件转换为一个数据集,从单词或单词中获取向量,从上下文中获取向量

存储在 XSTATE 中以便跨组件访问?