gpt4 book ai didi

java - spring boot嵌入式tomcat添加war

转载 作者:行者123 更新时间:2023-12-02 03:02:16 24 4
gpt4 key购买 nike

我有一个 spring-boot 2.1.2.RELEASE 应用程序,它使用嵌入式 tomcat web 服务器并使用 OpenKM通过它的 SDK。

现在,我有一些集成测试,它们使用 restassured lib 进行 REST 调用并验证响应结构。我的想法是将 OpenKM.war 集成到这个 wmbedded tomcat 中,并且能够运行此测试,而无需在某些不同的服务器上运行 openkm 应用程序。

这就是我如何使嵌入式 tomcat 读取和部署 openkm.war:

@Configuration
public class TomcatConfig {
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}

@Override
protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) {
new File(tomcat.getServer().getCatalinaBase(), "webapp").mkdirs();
try {
tomcat.addWebapp("/okm", new ClassPathResource("webapp/openkm.war").getFile().toString());
} catch (Exception ex) {
throw new IllegalStateException("Failed to add okm", ex);
}
return super.getTomcatWebServer(tomcat);
}
};

tomcat.addAdditionalTomcatConnectors(redirectConnector());
return tomcat;
}

private Connector redirectConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
}

部署时间比在 openkm 附带的独立 tomcat Web 服务器上要长,但它可以部署。

但是部署过程失败并显示:

IOException parsing XML document from URL [file:/tmp/tomcat.2352216859213135410.8080/openkm.xml]; nested exception is java.io.FileNotFoundException: /tmp/tomcat.2352216859213135410.8080/openkm.xml (No such file or directory)

我有这个文件(加上 server.xml、context.xml)和 openkm.war 文件,但嵌入式 tomcat 似乎不知道它。

所有这些文件都位于src/main/resources/webapp中。

所以,我想知道我缺少什么配置部分或者是否有其他更好的东西来实现我想要的?

最佳答案

你可以尝试做类似的事情;

StandardContext ctx = (StandardContext) tomcat.addWebapp("/okm", new ClassPathResource("webapp/openkm.war").getFile().toString());
WebResourceRoot resources = new StandardRoot(ctx);
resources.addPreResources(new DirResourceSet(resources, "{target mount path}",
new File("src/main/resources/webapp").getAbsolutePath(), "/"));
ctx.setResources(resources);

这样您就可以在 tomcat 部署中将 src/main/resources/webapp/ 文件夹安装到 {target mount path} 上。虽然我不确定这条路?您可以尝试使用 "/" ,或者 "/WEB-INF/" 吗?我目前无法在本地进行测试,但我希望这会有所帮助。

如果您需要 tomcat 中不同文件夹中的不同文件,也可以使用 FileResourceSet 挂载单个文件。

关于java - spring boot嵌入式tomcat添加war,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56114225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com