我有一个非常简单的渐变( 7.0-rc-1
)使用嵌入的tomcat示例初始化单个spring5“helloworld”端点的脚本。原始代码取自我在互联网上找到的一个随机示例。我的gradle项目示例可以在这里找到。
我不知道它是如何工作的,但不知怎么的,web服务器知道如何调用 WebApplicationInitializer.onStartup(ServletContext)
方法,以便Spring初始化。
这在Java8上正常工作;但当我将gradle构建定义中的以下工具链规范更改为java16时失败。
java {
toolchain {
// languageVersion = JavaLanguageVersion.of(16)
languageVersion = JavaLanguageVersion.of(8)
}
}
当使用Java8时,spring被正确初始化,端点工作。
当使用Java16时 onStartup()
方法没有被调用,因此spring没有初始化,端点也不起作用(尽管tomcat仍然启动并响应一个错误)。
日志显示了这样一条消息,尽管没有stacktrace:
INFO: No Spring WebApplicationInitializer types detected on classpath
我需要做什么才能在Java16上工作?
请注意,我不想使用Spring Boot,请不要建议它。
1条答案
按热度按时间txu3uszq1#
我找到了一个解决方案,可以配置spring并响应
/hello
终结点。但我不知道为什么这样做有效,也不知道这样做是否正确。如果有人能回答这个问题并解释一下Java16到底发生了什么-我很乐意将其标记为公认的答案。
变通办法
我的工作是以编程方式添加
ServletContainerInitializer
班级。所以在我打电话给
addWebapp()
方法:我现在显式地添加spring初始化器:
更新了github上的代码。