当前位置: 首页 > 知识库问答 >
问题:

将tomcat替换为spring boot KeyCoap项目的undertow服务器会导致非法状态异常:未设置ServletContext

昌和悦
2023-03-14

我正在尝试设置一个简单的Spring启动示例项目(keycloak教程),但我陷入了启动错误。与原始配置不同的唯一地方是我想使用undertow服务器而不是tomcat。

在没有任何更改的情况下运行主类是成功的(用@SpringBootApplication注释的主类)(mvn spring-boot:干净后运行

在pom中进行以下更改后,我得到一个错误:

java.lang.IllegalStateException:没有设置ServletContext

详情见下文:

POM变化:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

而不是

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

使用回流时出现Spring启动错误:

12: 48:55.077[main]操作系统启动错误。SpringApplication-应用程序在org.springframework.beans.factory中运行失败。BeanCreationException:创建名为“resourceHandlerMapping”的bean时出错,该bean在类路径resource[org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]中定义:通过工厂方法实例化bean失败;嵌套异常是org.springframework.bean。BeanInstantiationException:未能实例化[org.springframework.web.servlet.HandlerMapping]:工厂方法“ResourceHandlerMaping”引发异常;嵌套异常是java.lang.IllegalStateException:在org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:655)和org.spring Framework.Bean.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(Constructor Resolver.java:635)中未设置ServletContextorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(abstractautowireCapable BeanFactory.java:1336)位于org.spring framework.beans.factory.support.absstractAutowiredCapableBean factory.createBeanInstance(abstract AutowirecapableBeanFactory.java:1176)位于org.springframe.bean.factory.support(AbstractAutowireCapableBeanFactory.java:556)位于org.springframework.beans.factory.support.AbstractautowireCapable BeanFactory.createBean(AbstractAUTOwireCapabileBeanFactoryy.java:516)位于org.springframework.bean.factory.support.AbstractBeanFactory.lambda$doGetBean$0(Abstract BeanFactorys.java:324)位于org.springframework.beans.factory.support.DefaultSingleton BeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)位于org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)位于org.springframework.beans.factory.support.AbtractBeanFactory.getBean(abstractBean factory.java:202)位于org.springframework.beans.factory.factory.support.DefaultListableBeanFactory.PreInstanceSingles(DefaultlistableBean factory.java:897)位于org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplication context.java:879)位于org.spring Framework.context.support.AbstractApplicationContext.refresh(AbstractionApplicationContext.java:551)位于org.springframework.boot.web.servlet.context。ServletWebServerApplicationContext。refreshorg.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)位于org.spring framework.boot.springapplion.refres(SpringApplication.java:750)位于org.springframe.boot.springappl.refreshContext(springapp.java:397)位于org.springfra框.boot.SpringApplication.run(spring application.java:315)位于orgorg.springframework.boot.SpringApplication.run(SpringApplication.java:1226)和com.baeldung.keycoap.SpringBoot.main(springboo.java:11)上的SpringApplication.java。BeanInstantiationException:未能实例化[org.springframework.web.servlet.HandlerMapping]:工厂方法“ResourceHandlerMaping”引发异常;嵌套异常是java.lang.IllegalStateException:在org.springframework.beans.factory.support.SimpleInstationStrategy.instantiate(SimpleInstanceStrategy.java:185)和org.Spring Framework.Bean.factory.support.ConstructorResolver.Instantite(ConstructorResolver.java:650)上没有设置ServletContext。由于以下原因,省略了20个常见帧:java.lang.IlleGalStateExc:没有设置ServeletContext位于org.springframework.util.Assert.state(Assert.java:76),位于org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.resourceHandlerMapping(WebMVCCConfigurationSupport.java:534),位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl。在java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess.Impl.java:62)和java.base/jdk/internal.reflect.delegatingMethodAccessitorImpl.invoke(DelegatingmethodAccessor.java:43)和org.springframework.beans.factory.support.SimpleInstationStrategy.Instancee(SimpleInstallationStrategy.java:154)…省略了21个公共帧

Spring-boot.version使用的是2.3.3.RELEASE(如父 pom 中所述)。

我怎样才能让它和一个回流服务器一起工作呢?

共有1个答案

鲜于念
2023-03-14

固定

当如下所示的部分从原始SecurityConfig类中分离时,它将与undertow一起工作:

(新班级)

@Configuration
public class KeycloakConfig {
  @Bean
  public KeycloakSpringBootConfigResolver KeycloakConfigResolver() {
    return new KeycloakSpringBootConfigResolver();
  }
}
 类似资料:
  • 我的主类似乎找不到我的 fmxl 文件,但我很确定路径是正确的。我不明白发生了什么。 这里是我的主要 我收到的错误是 Main.java:74 的错误是我的加载程序调用我不明白错误是由找不到我的fxml文件引起的?

  • 异常跟踪: “”java.lang.IllegalStateException:在org.apache.catalina.core.applicationDispatcher.doForward(applicationDispatcher.java:328)在org.apache.catalina.core.applicationDispatcher.doForward(applicationDi

  • 在spring boot应用程序中,当将一个对象索引到es中时,我会遇到以下异常。 这个类有两个静态字段和两个类型为的实例变量,还有一个视图方法,其中一个是被重写的toString。 映射如下。没有映射,索引就可以正常工作。但是,由于对象可以为null,因此需要配置null_值。 我试图将替换为,但是,文档声明:“一个字符串值,它被展平对象字段中的任何显式空值替换。默认值为null,这意味着空si

  • 问题内容: 如何将轮询线程传递给另一个线程进行处理。程序执行在具有主方法和线程池的控制器类中: 主类控制器 具有轮询类的线程的方法 具有proc类的线程的方法 轮询类和控制器类 我的任务和问题是: 1.控制器应同时处理轮询器和处理器线程,并且应仅调用轮询器和处理器线程 2.现在我的问题是如何使轮询线程等待3秒并并行通知处理器。 我得到如下错误: 这里如何实现异步处理? 问题答案: 你需要阅读的东西

  • 我正在尝试实现View.OnClickListener接口和GoogleApiclient如下 但这失败了,错误如下 错误:任务': app: dexDebug'执行失败。com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException: Process'命令'C:\Program F

  • 我的Android应用程序使用FragmentTabHost,有4个选项卡A、B、C、D。我在选项卡A中有片段A1,我导航到选项卡A中的第二个片段A2,然后切换到选项卡B,然后切换回选项卡A。现在我单击返回按钮,该按钮将调用popBackStack()方法,我遇到崩溃,说IllegalStateException片段A1已经添加。你能帮忙吗?这是我用来在主选项卡活动中创建选项卡的代码, 我用这段代