Spring boot 2.0.3.RELEASE, Spring data rest, application error, failed to start

Posted

技术标签:

【中文标题】Spring boot 2.0.3.RELEASE, Spring data rest, application error, failed to start【英文标题】: 【发布时间】:2019-04-25 02:11:40 【问题描述】:

无法启动 Spring Boot 应用程序。

存储库及其关联域

import com.vircosolutions.mobileapi.domain.Awards;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

@RepositoryRestResource(exported = false)
public interface AwardsRepository extends JpaRepository<Integer, 
Awards> 

import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date; 
import java.util.Objects;

@Getter
@Setter
@Entity
@Table(name = "awards")
public class Awards implements Serializable 


private static final long serialVersionUID = -170576994834461289L;


@Id
@Column(name = "id_awards", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@ManyToOne
@JoinColumn(name = "id_user", nullable = false)
private Users user;

@Column (name = "rating", nullable = false)
private float rating;

@Column (name = "award_type", nullable = false)
private String awardType;

@Column (name = "award_date", nullable = false)
private Date awardDate;

@Override
public boolean equals(Object o) 
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Awards awards = (Awards) o;
    return id == awards.id &&
            Float.compare(awards.rating, rating) == 0 &&
            Objects.equals(user, awards.user) &&
            Objects.equals(awardType, awards.awardType) &&
            Objects.equals(awardDate, awards.awardDate);


@Override
public int hashCode() 

    return Objects.hash(id, user, rating, awardType, awardDate);


@Override
public String toString() 
    return "Awards" +
            "id=" + id +
            ", user=" + user +
            ", rating=" + rating +
            ", awardType='" + awardType + '\'' +
            ", awardDate=" + awardDate +
            '';

主应用程序文件看起来像

@EnableSpringDataWebSupport
@SpringBootApplication
public class MobileApplication extends SpringBootServletInitializer 

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) 
        return super.configure(builder);
    

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

我调试了很多,但无法找出根本原因。下面给出了 Stach 跟踪。如果您需要任何其他文件和代码,可以提供。任何帮助将不胜感激。

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2018-11-22

16:30:35,341 错误方法:[main] boot.SpringApplication (SpringApplication.java:842) - 应用程序运行失败 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名称为“repositorySearchController”的 bean 时出错 网址 [jar:文件:/home/rashid/.m2/repository/org/springframework/data/spring-data-rest-webmvc/3.0.8.RELEASE/spring-data-rest-webmvc-3.0.8.RELEASE.jar !/org/springframework/data/rest/webmvc/RepositorySearchController.class]: 通过构造函数参数 0 表示的不满足的依赖关系; 嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建类中定义的名称为“pagedResourcesAssembler”的bean 路径资源 [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]: 通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.data.web.PagedResourcesAssembler]: 工厂方法“pagedResourcesAssembler”抛出异常;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 在类路径中定义名称为“pageableResolver”的 bean 创建错误 资源 [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]: 通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.data.web.PageableHandlerMethodArgumentResolver]: 工厂方法“pageableResolver”抛出异常;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建在类路径资源中定义的名称为“sortResolver”的bean [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]: 通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.data.web.HateoasSortHandlerMethodArgumentResolver]: 工厂方法“sortResolver”抛出异常;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建类中定义的名称为“repositoryRestConfiguration”的bean 路径资源 [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]: 通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.data.rest.core.config.RepositoryRestConfiguration]: 工厂方法“repositoryRestConfiguration”抛出异常;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 在类路径中定义名称为“存储库”的 bean 创建错误 资源 [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]: 通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.data.repository.support.Repositories]:工厂 方法“存储库”抛出异常;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为“awardsRepository”的bean:调用init方法 失败的;嵌套异常是 java.lang.IllegalArgumentException: Not a 托管类型:class java.lang.Integer at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:732) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:197) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1276) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1133) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] 在 com.vircosolutions.mobileapi.MobileApplication.main(MobileApplication.java:19) [classes/:?] 引起: org.springframework.beans.factory.BeanCreationException:错误 创建类中定义的名称为“pagedResourcesAssembler”的bean 路径资源 [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]: 通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.data.web.PagedResourcesAssembler]: 工厂方法“pagedResourcesAssembler”抛出异常;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 在类路径中定义名称为“pageableResolver”的 bean 创建错误 资源 [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]: 通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.data.web.PageableHandlerMethodArgumentResolver]: 工厂方法“pageableResolver”抛出异常;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建在类路径资源中定义的名称为“sortResolver”的bean [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]: 通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.data.web.HateoasSortHandlerMethodArgumentResolver]: 工厂方法“sortResolver”抛出异常;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建类中定义的名称为“repositoryRestConfiguration”的bean 路径资源 [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]: 通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.data.rest.core.config.RepositoryRestConfiguration]: 工厂方法“repositoryRestConfiguration”抛出异常;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 在类路径中定义名称为“存储库”的 bean 创建错误 资源 [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]: 通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.data.repository.support.Repositories]:工厂 方法“存储库”抛出异常;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为“awardsRepository”的bean:调用init方法 失败的;嵌套异常是 java.lang.IllegalArgumentException: Not a 托管类型:class java.lang.Integer at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:590) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]

【问题讨论】:

更新了您的问题:删除 POM 并发布 AwardsRepository 及其关联实体的代码。我猜你已经颠倒了泛型参数声明的顺序。 @AlanHay 已更新。 【参考方案1】:

您以错误的顺序指定了泛型类型,因此出现错误Not a managed type: class java.lang.Integer

试试:

@RepositoryRestResource(exported = false)
public interface AwardsRepository extends JpaRepository<Awards, Integer> 

顺便说一句,根据命名约定,您还应该将实体 Awards 重命名为 Award,并相应地重命名存储库。

【讨论】:

认真的喜欢。我想我现在需要休息,停止编码,现在就去睡觉。不管怎样,谢谢你,你救了我。

以上是关于Spring boot 2.0.3.RELEASE, Spring data rest, application error, failed to start的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot 2.0.3.RELEASE, Spring data rest, application error, failed to start

Spring Boot 2.0.3RELEASE+Swagger2 2.9.2+Swagger ui 2.9.2 + easypoi 3.2.0版本不兼容

基于Spring Boot 2.0.3的Spring Cloud Eureka Server与Client

spring boot2 集成Redis

Spring Boot MessageSource 在 application.properties 中不起作用

Spring boot->redis value值出现两个双引号