Java Don';t spring boot starter web和spring boot starter webflux是否一起工作?

Java Don';t spring boot starter web和spring boot starter webflux是否一起工作?,java,spring-boot,spring-webflux,Java,Spring Boot,Spring Webflux,当我开始学习SpringWebFlux时,我有一个关于这个组件的问题 我构建了一个简单的项目,使用maven来管理该项目,并添加了关于spring boot starter web和spring boot starter webflux的依赖项,如: org.springframework.boot 弹簧启动器webflux org.springframework.boot SpringBootStarterWeb 但是它不起作用。当删除spring boot starter web依赖项时

当我开始学习SpringWebFlux时,我有一个关于这个组件的问题

我构建了一个简单的项目,使用maven来管理该项目,并添加了关于spring boot starter web和spring boot starter webflux的依赖项,如:


org.springframework.boot
弹簧启动器webflux
org.springframework.boot
SpringBootStarterWeb
但是它不起作用。当删除spring boot starter web依赖项时,它可以很好地工作。

如中所述,同时添加web和webflux starter将配置spring MVC web应用程序

这是这样的,因为许多现有的Spring Boot web应用程序(使用MVC)将依赖webflux starter来使用WebClient。因此这是一个预期的用例。事实并非如此,因为被动应用程序不太可能使用Spring MVC位

因此,支持同时使用web和webflux启动器,但它将配置一个Spring MVC应用程序。您始终可以强制Spring引导应用程序响应:

SpringApplication.setWebApplicationType(WebApplicationType.REACTIVE)

但是清理依赖项仍然是一个好主意,因为在反应式web应用程序中使用阻塞功能很容易。

我在使用
spring boot starter webflux
spring data geode
时遇到了类似的问题

DEBUG [http-nio-8082-exec-2] org.sprin.web.servl.resou.ResourceHttpRequestHandler 454 handleRequest: Resource not found
通过更改应用程序类型解决了此问题

@SpringBootApplication
public class Web {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(Web.class);
        app.setWebApplicationType(WebApplicationType.REACTIVE);
        SpringApplication.run(Web.class, args);
    }
}
全班同学都是这样的

设置应用程序类型后,如果我没有以静态方式调用
SpringApplication
,我会得到以下结果:


它们是互斥的,您可以使用webflux(反应式API)或web(Servlet API)谢谢,明白了。您确定解决了什么问题吗?因为您声明的
app
变量实际上是无用的,因为您以传统方式运行Spring Boot应用程序(最后一行)…看起来你是对的,看起来应该是
app.run
,但可能是因为
SpringApplication.run
使用类
Web.class
,它是定义
app
的类的名称,它使用该名称而不是默认值。我编辑了上面的代码。这不会改变任何内容;设置
 webApplicationType
转换为SpringApplication未使用的变量。run()无效。
SpringApplication.run()
是一个静态方法,所以一旦Java运行它,
app
变量就丢失了……我用我看到的内容再次更新了这个问题,是的……是的……除了spring
run
至少引用了
Web.class
你确定吗?
SpringApplication.run(Web.class,args)
其中
Web.class
是声明
SpringApplication app
类型为
REACTIVE
的类的名称,它可以工作…
所以不要修复它
?!
@SpringBootApplication
public class Web {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(Web.class);
        app.setWebApplicationType(WebApplicationType.REACTIVE);
        SpringApplication.run(Web.class, args);
    }
}