java - 注入(inject)组件到已部署的 Tomcat 服务器 [Spring Boot] 失败

标签 java spring-boot tomcat

当我尝试在 Tomcat 服务器上部署我的 .war 项目 (Spring Boot) 时,我在日志中收到以下异常。请注意,此异常不会在本地发生,因此我只能在服务器环境中重现它。

完整的堆栈跟踪 https://pastebin.com/8uFqwk0U

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mappingComponent': Failed to introspect bean class [com.project.components.MappingComponent] for lookup method metadata: could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: java/time/temporal/Temporal
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:269) ~[spring-beans-4.3.5.RELEASE.jar:4.3.5.RELEASE]

当然,我搜索了这个问题,我已经更改了对 pom.xml 的一些依赖,还删除和添加了构造函数以防万一,但我无法弄清楚为什么会这样。

MappingComponent异常发生的调用

@Component
public class MappingComponent {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    Repository1 repo1;

    @Autowired
    Repository2 repo2;

    //no constructors
    //methods that are using the repositories

  }

MappingController 注入(inject)MappingComponent

的类
@RestController
@CrossOrigin
@RequestMapping("/services")
public class MappingController {

      @Autowired
      private ClientComponent clientComponent;

      @Autowired
      private MappingComponent mappingComponent;

      //no constructors
      //services that are using the components

 }

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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>services</groupId>
    <artifactId>services</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>services</name>
    <description>Services</description>
    <packaging>war</packaging>  
    <properties>
        <java.version>1.7</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-tomcat</artifactId>
            <scope>provided</scope>
        </dependency> 

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </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-jpa</artifactId>
        </dependency>
        <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-entitymanager</artifactId>
            </dependency>

            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
            </dependency>


        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>


    </dependencies>

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

             <plugin>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-maven-plugin</artifactId>
                            <executions>
                              <execution>
                                <goals>
                                  <goal>repackage</goal>
                                </goals>
                              </execution>
                            </executions>
                        </plugin>
        </plugins>
    </build>

</project>

主类

@SpringBootApplication
public class ServicesApplication extends SpringBootServletInitializer {


    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(ServicesApplication.class);
    }

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

}

我知道 java 和 spring 都已经过时了,但不依赖于我将它们升级到更新的版本。这不是问题,因为有其他服务部署了相同的版本(和相同的 pom.xml)。

最佳答案

时间类仅在 1.8 中引入,在您的 pom 中我看到您使用的是 1.7。 当您不确定某个类何时被引入时,只需检查 Javadoc 中的 @Since 标记即可。

关于java - 注入(inject)组件到已部署的 Tomcat 服务器 [Spring Boot] 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56489579/

相关文章:

java - 如何在 Spring Data Repository 方法中使用 Regex 关键字

java - 如何更改 ActionBar 的高度?

java - Tomcat:如何将不同的目录指向同一个 WEB-INF

java - 在 Java 中运行 Daemon 类时出错?

java - 使用流 Java 8 转换 Map<K,V> 中的 List<V>

java - Spring Boot Web 应用程序没有缓存控制 header

java - 在 Spring JPA 中是否有更简洁的方式构建 MappedSuperclass Tree 类?

spring-boot - Elasticsearch高级休息客户端无法映射geo_point

tomcat 8.5 servlet 参数 : webappBasePath

spring - 性能 - Spring Boot - 服务器响应时间