相关疑难解决方法(0)

Spring Boot 2中缺少TomcatEmbeddedServletContainerFactory

我有Spring Boot应用程序版本1.5.x,它正在使用org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory,我正在尝试将其迁移到Spring Boot 2,但该应用程序无法编译,尽管它具有依赖性org.springframework.boot:spring-boot-starter-tomcat.编译器发出以下错误:

error: package org.springframework.boot.context.embedded.tomcat
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot

53
推荐指数
3
解决办法
3万
查看次数

如何将war文件部署到独立于INSIDE的Spring Boot应用程序的内置Tomcat服务器?

我有一个server依赖于web模块的模块:

<dependency>
    <groupId>org.ema.server</groupId>
    <artifactId>web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <type>war</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这是spring-boot-maven-plugin为了获得一个独立的重新打包:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <fork>true</fork>
        <mainClass>org.ema.server.Server</mainClass>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

到目前为止一切正常.该web模块将被包含在最终的jar中BOOT-INF/lib/web-0.0.1-SNAPSHOT.war.

我知道Spring允许在运行时为Tomcat加载额外的war文件,但是看起来这样的war文件必须位于文件系统的某个地方,否则我做错了.

问题是我如何保持独立的感觉,但仍然能够将war文件添加到我的最终独立jar并将它们部署到内置的Tomcat?

下面的代码显示了如何做到这一点,但我不确定它是否可以按我要求的方式完成:

@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {

    LOGGER.info("Adding web app");

    return new TomcatEmbeddedServletContainerFactory() {

        @Override
        protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(Tomcat tomcat) {

            // Ignore that since it's not working anyway.
            String resourcePath = getClass().getResource("/../lib/web-0.0.1-SNAPSHOT.war").getPath().toString();

            try {
                tomcat.addWebapp("/web", resourcePath);
            } …
Run Code Online (Sandbox Code Playgroud)

tomcat spring-boot

9
推荐指数
0
解决办法
539
查看次数

Spring Boot 可执行 jar 抛出 java.lang.ClassNotFoundException: org.apache.tomcat.util.descriptor.web.ServletDef

我创建了一个简单的测试用例,显示了我目前面临的问题。

我试图做的是手动启动从 CommandLineRunner 嵌入的 Tomcat 并手动部署文件系统上某处可用的 war 文件:

package example;

import java.io.File;

import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class MyCommandLineRunner implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {

        File tomcatBaseDir = new File("<tomcat-base-dir>");
        File warToBeDeployed = new File("<war-to-be-deployed>");

        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8080);
        tomcat.setBaseDir(tomcatBaseDir.getAbsolutePath());
        tomcat.getHost().setAppBase(tomcatBaseDir.getAbsolutePath());
        tomcat.getHost().setAutoDeploy(true);
        tomcat.getHost().setDeployOnStartup(true);

        try {
            tomcat.start();
            System.out.println("Tomcat started on " + tomcat.getHost());
        } catch (LifecycleException e) {
            System.err.println("Tomcat could not be started");
            System.exit(-1);
        }

        Context appContext …
Run Code Online (Sandbox Code Playgroud)

java maven spring-boot spring-boot-maven-plugin

5
推荐指数
1
解决办法
6774
查看次数