java.lang.IllegalStateException: Cannot initialize context because there is already a root applicati...

本文探讨了在Spring Boot项目中使用Jersey时遇到的上下文初始化问题,详细介绍了如何通过修改web.xml文件来确保Jersey和自定义上下文的正确初始化顺序,避免随机初始化导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@Controller
@ComponentScan
@Configuration
@EnableScheduling
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, RedisAutoConfiguration.class, MybatisAutoConfiguration.class})
@ImportResource(locations = {"classpath*:app.xml"})
public class AppMain extends SpringBootServletInitializer implements ApplicationContextAware {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// return super.configure(builder);
return builder.sources(AppMain.class);
}

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setInitParameter("logSystem","log4j,logback");
servletContext.setInitParameter("loggingLevel", "INFO");
servletContext.setInitParameter("loggingCharset", "UTF-8");
servletContext.setInitParameter("contextConfigLocation", "<NONE>");
super.onStartup(servletContext);
}
}



 

For anyone with a similar problem - turns out that spring-jersey used in the project was setting up its own context. My context and the spring-jersey one were initialized in random order apparently. More info here: 
https://java.net/jira/browse/JERSEY-2038 
https://java.net/projects/jersey/lists/users/archive/2014-03/message/124 
The suggested solution of adding:

servletContext.setInitParameter("contextConfigLocation", "<NONE>");

In WebAppInitializer implementation didn't work reliably due to initialization order. What solved the problem was adding its xml equivalent: 

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value></param-value>
</context-param> 

as the firt parameter in web.xml, ensuring that its set before the context is initialized.

转载于:https://www.cnblogs.com/exmyth/p/11093458.html

2025-06-20 15:21:57.290 INFO 15724 --- [ main] com.kucun.DemoApplication : Started DemoApplication in 7.126 seconds (JVM running for 17.488) 2025-06-20 15:21:57.300 ERROR 15724 --- [ main] o.a.c.c.C.[.[localhost].[/KuCun2] : 异常将上下文初始化事件发送到类的侦听器实例.[org.springframework.web.context.ContextLoaderListener] java.lang.IllegalStateException: Cannot initialize context because there is already a root application context present - check whether you have multiple ContextLoader* definitions in your web.xml! at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:263) ~[spring-web-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103) ~[spring-web-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4678) [catalina.jar:9.0.37] at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5139) [catalina.jar:9.0.37] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.37] at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717) [catalina.jar:9.0.37] at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690) [catalina.jar:9.0.37] at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705) [catalina.jar:9.0.37] at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1133) [catalina.jar:9.0.37] at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1866) [catalina.jar:9.0.37] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_331] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_331] at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-util.jar:9.0.37] at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112) [na:1.8.0_331] at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1045) [catalina.jar:9.0.37] at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:429) [catalina.jar:9.0.37] at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576) [catalina.jar:9.0.37] at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309) [catalina.jar:9.0.37] at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) [catalina.jar:9.0.37] at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423) [catalina.jar:9.0.37] at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366) [catalina.jar:9.0.37] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936) [catalina.jar:9.0.37] at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841) [catalina.jar:9.0.37] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.37] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384) [catalina.jar:9.0.37] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374) [catalina.jar:9.0.37] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_331] at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-util.jar:9.0.37]
06-21
### 三级标题:Android Studio 编译报错:java.lang.IllegalStateException: Cannot find an Android module 在 Android Studio 编译过程中,若出现 `java.lang.IllegalStateException` 并提示 `Cannot find an Android module`,通常表明 Gradle 插件在同步过程中无法识别项目中的 Android 模块。此问题可能由模块配置错误、Gradle 版本不兼容、或模块未正确注册至 `settings.gradle` 文件中引起。 首先,应检查 `settings.gradle` 文件是否包含所有必要的模块声明。每个模块必须通过 `include` 指令被正确引用。若模块位于项目根目录之外,需使用 `projectDir` 明确指定其路径: ```groovy include ':librarymodule' project(':librarymodule').projectDir = new File('../path/to/module') ``` 其次,确保每个模块的 `build.gradle` 文件中都包含 `apply plugin: 'com.android.application'` 或 `apply plugin: 'com.android.library'`,具体取决于模块类型。缺少该插件声明会导致 Gradle 无法识别其为 Android 模块 [^1]。 Gradle 插件版本与 Gradle 分发版本之间的兼容性问题也可能导致此类错误。检查 `gradle.properties` 文件中的 `distributionUrl` 是否与当前使用的 Android Gradle 插件版本兼容。例如: ```properties distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip ``` 如果问题仍然存在,可以尝试清除项目缓存并重新同步。关闭 Android Studio,删除项目中的 `.idea` 文件夹和 `build` 文件夹,然后重新打开项目并进行同步操作。该方法有助于排除因缓存数据损坏导致的模块识别问题 [^1]。 若使用了 Git 子模块作为模块依赖,确保这些子模块已被正确初始化并包含在项目结构中。可使用以下命令初始化和更新子模块: ```bash git submodule init git submodule update ``` 同时,确保子模块目录已正确添加至 `settings.gradle` 文件中,并且其 `build.gradle` 文件配置无误。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值