Spring Boot应用无法启动嵌入式Tomcat

4

我是一个新手,正在学习Spring Boot应用程序。我的任务是创建一个通用的CRUD(创建、读取、更新、删除)存储库,应该由REST控制器进行处理。我刚开始尝试了一些例子,但我的应用程序没有启动嵌入式Tomcat。此外,我的REST控制器URI没有映射。这是一个Maven模块项目,所有依赖项都在父级Maven中配置。如何解决这个问题。

以下是我的代码:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
 public class CRUDEngineApplication {

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

控制器是

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;

import com.scm.services.CRUDEngineService;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@RestController("/api")
public class CRUDEngineController {
@Autowired
private CRUDEngineService crudEngineService;

public static final Logger logger = 
LoggerFactory.getLogger(CRUDEngineController.class);


/* public void setProductService(CRUDEngineService crudEngineService) {
    this.crudEngineService = crudEngineService;
}*/
@RequestMapping(value = "/user", method = RequestMethod.POST)
public ResponseEntity<?> createUser(@RequestBody Object entity) {
    System.out.println("Check point entered.");
    crudEngineService.save(entity);
    return new ResponseEntity<String>( HttpStatus.CREATED);
}
}

服务接口是

import java.util.UUID;

public interface CRUDEngineService {

void save(Object entity);

void delete(UUID id);
}

服务实现类是

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.scm.repositories.CRUDEngineRespository;
import java.util.UUID;

@Service
public class CRUDEngineServiceImpl implements CRUDEngineService {

@Autowired
private CRUDEngineRespository productRepository;

@Override
public void save(Object entity) {
    productRepository.save(entity);
}

@Override
public void delete(UUID id) {
    productRepository.delete(id);
}
}

而 crud 存储库的实现是

import java.util.UUID;
import org.springframework.data.repository.CrudRepository;

public interface CRUDEngineRespository extends CrudRepository<Object, UUID> 
{

}

子pom.xml文件是

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd" 
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.scm</groupId>
<artifactId>scm-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>crudEngineService</artifactId>
<packaging>war</packaging>
<name>crudEngineService</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <scope>test</scope>
</dependency>
</dependencies>
</project>

父POM是:

<?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.scm</groupId>
<artifactId>scm-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<name>scm-parent</name>
<description>scm project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.7.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-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-cassandra</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-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.4.1.Final</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>


<modules>
    <module>userService</module>
    <module>authenticationService</module>
    <module>dataLayerService</module>
    <module>uiService</module>
    <module>crudEngineService</module>
</modules>

控制台输出结果为

2017-10-07 13:03:32.348  INFO 6508 --- [           main] 
c.s.configuration.CRUDEngineApplication  : Starting CRUDEngineApplication on 
STS-STP-A808 with PID 6508 (started by muthuvignesh.k in E:\Septa_Bench\STS 
Septa Repo\ppts_scm\scm-parent\crudEngineService)
2017-10-07 13:03:32.350  INFO 6508 --- [           main] 
c.s.configuration.CRUDEngineApplication  : No active profile set, falling 
back to default profiles: default
2017-10-07 13:03:32.378  INFO 6508 --- [           main] 
s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@4df828
d7: startup date [Sat Oct 07 13:03:32 IST 2017]; root of context hierarchy
2017-10-07 13:03:32.766  WARN 6508 --- [           main] 
o.h.v.m.ParameterMessageInterpolator     : HV000184: 
ParameterMessageInterpolator has been chosen, EL interpolation will not be supported
2017-10-07 13:03:32.872  WARN 6508 --- [           main] o.h.v.m.ParameterMessageInterpolator     : HV000184: ParameterMessageInterpolator has been chosen, EL interpolation will not be supported
2017-10-07 13:03:33.052  INFO 6508 --- [           main] com.datastax.driver.core.Native          : Could not load JNR C Library, native system calls through this library will not be available (set this logger level to DEBUG to see the full stack trace).
2017-10-07 13:03:33.052  INFO 6508 --- [           main] com.datastax.driver.core.ClockFactory    : Using java.lang.System clock to generate timestamps.
2017-10-07 13:03:33.197  INFO 6508 --- [           main] com.datastax.driver.core.NettyUtil       : Did not find Netty's native epoll transport in the classpath, defaulting to NIO.
2017-10-07 13:03:33.541  INFO 6508 --- [           main] c.d.d.c.p.DCAwareRoundRobinPolicy        : Using data-center name 'datacenter1' for DCAwareRoundRobinPolicy (if this is incorrect, please provide the correct datacenter name with DCAwareRoundRobinPolicy constructor)
2017-10-07 13:03:33.543  INFO 6508 --- [           main] com.datastax.driver.core.Cluster         : New Cassandra host /10.10.30.125:9042 added
2017-10-07 13:03:33.795  INFO 6508 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2017-10-07 13:03:33.804  INFO 6508 --- [           main] c.s.configuration.CRUDEngineApplication  : Started CRUDEngineApplication in 1.619 seconds (JVM running for 2.002)

1
“not started” 是什么意思?你是否收到任何错误消息?请粘贴 catalina.out 日志。 - zuckermanori
我已经更新了控制台结果 @zuckermanori - Muthu vignesh k
2
没有容器,你将作用域设置为 provided,意味着它在运行时不可用,因此没有任何可以启动的东西。 - M. Deinum
有没有可能添加运行时? - Muthu vignesh k
你为什么将Tomcat定义为“provided”?这样做的目的是什么? - khmarbaise
2个回答

16

从pom.xml文件中删除<scope>provided</scope>并尝试重新运行。如果想要部署WAR文件到其他独立的Tomcat服务器,请使用provided

参考: Spring Boot嵌入式Tomcat


我也遇到了同样的问题。但是我在使用Gradle。那么我该怎么办? - Pash0002

0
尝试依赖管理:
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接