找不到必填字段,类型为Bean。错误的springboot API部署到ubuntu

时间:2019-07-04 11:22:22

标签: spring-boot tomcat ubuntu-18.04

几天来我一直在努力解决这个问题,但没有找到任何帮助,所以我会在这里询问。

我有这样的程序。如果我在本地计算机上的本地主机中对其进行测试,则可以正常工作。如果在ubuntu 18.04 tomcat中添加war,问题就开始了。 我已经在同一台服务器上测试了Jar,它可以工作。还测试了Heroku部署并在其中工作。也许我在制作战争包装Itellij时遇到问题,或者可能是什么问题?

Tomcat catalina.out错误:

***************************
APPLICATION FAILED TO START
***************************

Description:

Field forestDataServicesInterface in forestData.me24Spring.ForestDataController required a bean of type 'forestData.me24Spring.services.ForestDataServicesInterface' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'forestData.me24Spring.services.ForestDataServicesInterface' in your configuration.

04-Jul-2019 15:54:26.679 SEVERE [localhost-startStop-13] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start: 
    org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/me24Spring-0.0.1-SNAPSHOT]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:744)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:980)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1851)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'forestDataController': Unsatisfied dependency expressed through field 'forestDataServicesInterface'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'forestData.me24Spring.services.ForestDataServicesInterface' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596)
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1411)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:843)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
        at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:157)
        at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:137)
        at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:91)
        at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:171)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5225)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 10 more
    Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'forestData.me24Spring.services.ForestDataServicesInterface' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1655)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1214)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1168)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)
        ... 32 more
04-Jul-2019 15:54:26.681 SEVERE [localhost-startStop-13] org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive [/opt/tomcat/apache-tomcat-8.5.42/webapps/me24Spring-0.0.1-SNAPSHOT.war]
    java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/me24Spring-0.0.1-SNAPSHOT]]
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:758)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:744)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:980)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1851)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
04-Jul-2019 15:54:26.682 INFO [localhost-startStop-13] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/opt/tomcat/apache-tomcat-8.5.42/webapps/me24Spring-0.0.1-SNAPSHOT.war] has finished in [3,522] ms

打包forestData.me24Spring.services

public interface ForestDataServicesInterface extends JpaRepository<ForestDataMaaamet, Integer> {

     @Query(value = "SELECT * FROM public.ff2", nativeQuery = true)
     List<ForestDataMaaamet> findAll();


     @Query(value = "SELECT * FROM public.ff2 where iscorrect = true", nativeQuery = true)
     List<ForestDataMaaamet> findCorrectForestData();

}

打包forestData.me24Spring

@SpringBootApplication
public class Me24SpringApplication extends SpringBootServletInitializer {

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

  @Override
  protected SpringApplicationBuilder configure (SpringApplicationBuilder builder) {
     return builder.sources(ForestDataController.class);
  }     

}

包forestData.me24Spring.controller

@RestController
public class ForestDataController {

    @Autowired
    ForestDataServicesInterface forestDataServicesInterface;

    @CrossOrigin(origins = "http://localhost:3000")
    @RequestMapping(value = "/findAll", method = RequestMethod.GET)
    public List<ForestDataMaaamet> fetchAllForestData() {
        return forestDataServicesInterface.findAll();
    }
}

依赖项

<dependencies>

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

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>

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

        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>

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

        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.json/json -->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20180813</version>
        </dependency>

        <dependency>
            <groupId>rome</groupId>
            <artifactId>rome</artifactId>
            <version>1.0</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>1.10.19</version>
        </dependency>

        <dependency>
            <groupId>org.decimal4j</groupId>
            <artifactId>decimal4j</artifactId>
            <version>1.0.3</version>
        </dependency>

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

        <dependency>
            <groupId>org.apache.maven.plugin-tools</groupId>
            <artifactId>maven-plugin-annotations</artifactId>
            <version>3.5.2</version>
        </dependency>

    </dependencies>

我拥有的结构

src/
|__ main/
    └── java/
    |   |   
    |   |___forestData.me24Spring/
    |       |
    |       ├── configuration/
    |       |   └── WebSecurityConfig.java
    |       ├── model/
    |       |   └── ForestData.java
    |       ├── repository/
    |       |   |__ repo.java
    |       └── services/
    |       |   └── ForestDataServicesInterface.java
    |       |
    |       |___Me24SpringApplication.java
    |       |
    |       |__ForestDataController.java
    |       
    └── resources/
        └── application.properties

1 个答案:

答案 0 :(得分:0)

您需要使用构造型注释之一,以使springboot识别用于自动接线的bean。在@Repository顶部使用ForestDataServicesInterface注释。

@Repository
public interface ForestDataServicesInterface extends JpaRepository<ForestDataMaaamet, Integer> {

     @Query(value = "SELECT * FROM public.ff2", nativeQuery = true)
     List<ForestDataMaaamet> findAll();


     @Query(value = "SELECT * FROM public.ff2 where iscorrect = true", nativeQuery = true)
     List<ForestDataMaaamet> findCorrectForestData();

}

您可以使用以下任何注释,但由于您的界面是存储库,因此建议使用@Repository

  1. @Component
  2. @存储库
  3. @Controller
  4. @服务