问题描述
切换到 Java 11 并将模块添加到充当 REST API 的 Spring Boot 应用程序后,我遇到了问题。运行该应用程序时没有出现任何错误,它在退出代码为0的初始化后关闭了。 Tomcat嵌入式服务器无法启动,调度服务器也无法启动,这将阻止应用程序关闭和监听接收传入的请求。
在我看来,它似乎没有启动嵌入式容器,因为模块化阻止了Spring Boot Autoconfigure查找一些条件Bean来启动REST服务器。
没有错误。就像您在没有控制器的情况下运行该应用程序一样,由于没有服务器阻止该应用程序,因此它将关闭且不会出现错误。我已经在上下文中列出了这些bean,并且HelloController
在其中,但是就像我说的那样,我找不到正在运行的服务器应该存在的任何bean,例如web.servlet.DispatcherServlet
。
我已经尝试过搜索,但是不幸的是,术语模块早在具有不同含义的Java 9之前就已经存在,这使得很难找到任何答案。我很抱歉这个问题是否已经发布。
即使是基本示例,我也无法使其工作
-
Application.java
@SpringBootApplication()
public class SchoolsApplication {
public static void main(String[] args) {
SpringApplication.run(SchoolsApplication.class,args);
}
}
-
HelloController.java
@RestController
public class HelloController {
@GetMapping("hello")
public String hello(){
return "hello";
}
}
-
module-info.java
module controllers {
requires spring.boot;
requires spring.boot.autoconfigure;
requires spring.context;
requires spring.beans;
requires spring.web;
requires com.fasterxml.jackson.databind;
opens package.controllers to spring.core;
}
我正在使用Spring 2.3.4.RELEASE
,实际上我正在使用JDK14,但是目标是Java 11。
我尝试使用必需的模块(即spring.webmvc,tomcat.embedded.core)或搜索要包含的确切Spring Bean,但没有成功。
编辑
明确添加requires org.apache.tomcat.embed.core;
时,服务器启动并因错误而崩溃
org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory]: Factory method 'tomcatServletWebServerFactory' threw exception
...
java.util.ServiceConfigurationError: org.apache.juli.logging.Log: module org.apache.tomcat.embed.core does not declare `uses`
Tomcat版本为9.0.38
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)