关于spring web应用程序在IDE中的嵌入式tomcat中运行的问题


  1. 要将Spring web应用程序作为Maven项目运行,我需要添加spring-boot-starter-tomcat作为pom.xml中的依赖项。但对于gradle项目,build.gradle中不需要它。为什么会这样?我在Intellij中运行这两个。

  2. 将Spring web应用程序作为Maven项目运行,如果在Spring boot starter tomcat依赖项中将scope指定为"provided",则该应用程序将无错误启动并结束。我需要注释作用域"provided"以作为服务器连续运行。这是作用域"提供"上的控制台输出:

Starting CourseidServiceApplication using Java 17.0.4 on ES-LAPTOP-876 with PID 21352 (C:ProjWScourseid-servicetargetclasses started by kakoli.sen in C:ProjWScourseid-service)
2022-08-14 10:28:06.919  INFO 21352 --- [           main] c.p.l.s.s.c.CourseidServiceApplication   : No active profile set, falling back to 1 default profile: "default"
2022-08-14 10:28:07.574  INFO 21352 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2022-08-14 10:28:07.641  INFO 21352 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 56 ms. Found 1 JPA repository interfaces.
2022-08-14 10:28:08.300  INFO 21352 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2022-08-14 10:28:08.354  INFO 21352 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.6.10.Final
2022-08-14 10:28:08.520  INFO 21352 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2022-08-14 10:28:08.686  INFO 21352 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2022-08-14 10:28:09.050  INFO 21352 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2022-08-14 10:28:09.066  INFO 21352 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
2022-08-14 10:28:09.787  INFO 21352 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2022-08-14 10:28:09.795  INFO 21352 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2022-08-14 10:28:10.309  INFO 21352 --- [           main] c.p.l.s.s.c.CourseidServiceApplication   : Started CourseidServiceApplication in 3.86 seconds (JVM running for 4.392)
After
2022-08-14 10:28:10.317  INFO 21352 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2022-08-14 10:28:10.320  INFO 21352 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2022-08-14 10:28:10.333  INFO 21352 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
========
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.pearson.ltg.sms.services.courseid</groupId>
<artifactId>courseid-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>courseid-service</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

我认为您不需要tomcat启动器:

你已经有了

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

默认情况下,它插入了嵌入式tomcat和springMVC,因此不需要其他依赖

打开Spring Initializr项目并创建一个示例项目,指定webmvc并查看它产生了什么。。。

最新更新