You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在IntelliJ IDEA中使用外部Tomcat运行Spring Boot Maven项目

在IntelliJ IDEA中用外部Tomcat 8.0.50运行Maven+Spring Boot项目的方案

当然可行!Spring Boot项目完全可以打包成war包部署到外部Tomcat,而且IntelliJ IDEA也有类似Eclipse“Run on server”的便捷流程,下面我一步步给你讲清楚怎么做:


一、先确认项目配置的关键要点

你的pom.xml已经做对了两个核心配置:

  • 设置了<packaging>war</packaging>,指定打包为war格式
  • spring-boot-starter-tomcat的scope设为provided,避免和外部Tomcat的容器依赖冲突

不过你的主应用类需要做一点修改,让它能被外部Tomcat正确加载:

修改主应用类

原来的主类只包含main方法,需要继承SpringBootServletInitializer并重写configure方法,这样外部Tomcat启动时才能初始化Spring Boot的上下文:

@SpringBootApplication 
public class DemoApplication extends SpringBootServletInitializer { 
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(DemoApplication.class);
    }

    public static void main(String[] args) { 
        SpringApplication.run(DemoApplication.class, args); 
    } 
}

二、在IntelliJ中配置外部Tomcat 8.0.50

这一步就对应Eclipse的“Run on server”,配置一次之后下次直接点击运行即可:

  1. 点击右上角运行按钮旁边的下拉菜单,选择Edit Configurations
  2. 点击左上角的+号,找到Tomcat Server -> Local
  3. 切换到Server标签页,点击Configure按钮,选择你本地Tomcat 8.0.50的安装目录
  4. 切换到Deployment标签页,点击+号,选择Artifact,然后选中你的项目对应的war exploded(推荐选这个,支持热部署,修改代码后无需重启Tomcat)
  5. 设置Application context(比如填/,这样访问路径就是http://localhost:8080/,或者填你的项目名)
  6. 检查JRE版本是否为1.8,和你pom.xml里的java.version保持一致

三、启动并测试项目

配置完成后,点击运行按钮启动Tomcat,等控制台输出Tomcat启动成功的日志后,就可以访问你的控制器接口了。比如你控制器里的/index路径,就可以访问http://localhost:8080/index(根据你设置的Application context调整)。

如果用的是war exploded,修改代码后按Ctrl+F9就能触发热部署,Tomcat会自动重新加载修改后的内容,非常方便。


附上你提供的完整配置代码

pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.example</groupId> 
<artifactId>demo</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>war</packaging> 
<name>demo</name> 
<description>Demo project for Spring Boot</description> 
<parent> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-parent</artifactId> 
<version>2.0.2.RELEASE</version> 
<relativePath/> 
<!-- lookup parent from repository --> 
</parent> 
<properties> 
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
<java.version>1.8</java.version> 
</properties> 
<dependencies> 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-cache</artifactId> 
</dependency> 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-data-jpa</artifactId> 
</dependency> 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-data-rest</artifactId> 
</dependency> 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-hateoas</artifactId> 
</dependency> 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-jersey</artifactId> 
</dependency> 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-security</artifactId> 
</dependency> 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-thymeleaf</artifactId> 
</dependency> 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-validation</artifactId> 
</dependency> 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-web</artifactId> 
</dependency> 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-web-services</artifactId> 
</dependency> 
<dependency> 
<groupId>org.springframework.session</groupId> 
<artifactId>spring-session-core</artifactId> 
</dependency> 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-devtools</artifactId> 
<scope>runtime</scope> 
</dependency> 
<dependency> 
<groupId>mysql</groupId> 
<artifactId>mysql-connector-java</artifactId> 
<scope>runtime</scope> 
</dependency> 
<dependency> 
<groupId>org.projectlombok</groupId> 
<artifactId>lombok</artifactId> 
<optional>true</optional> 
</dependency> 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-tomcat</artifactId> 
<scope>provided</scope> 
</dependency> 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-test</artifactId> 
<scope>test</scope> 
</dependency> 
<dependency> 
<groupId>org.springframework.security</groupId> 
<artifactId>spring-security-test</artifactId> 
<scope>test</scope> 
</dependency> 
</dependencies> 
<build> 
<plugins> 
<plugin> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-maven-plugin</artifactId> 
</plugin> 
</plugins> 
</build> 
</project>

完整的控制器示例(补充你未写完的部分)

@RestController 
public class Controller { 
    private final String SIGNIN_PAGE = "/index"; 

    @GetMapping(SIGNIN_PAGE)
    public String getSignInPage() {
        return "Welcome to the sign-in page!";
    }
}

内容的提问来源于stack exchange,提问作者Gopal

火山引擎 最新活动