Spring Boot应用程序无法在AWS上运行 - Tomcat会引发不满意的依赖项异常

时间:2017-03-01 00:57:27

标签: java spring amazon-web-services tomcat spring-boot

我想要在AWS虚拟机上部署一个安静的服务器。该应用程序在我的本地tomcat上运行正常。我可以访问tomcat的默认页面&我的浏览器管理器应用程序,它也可以正常工作。但是当我在tomcat上部署war文件时,它会部署,但是说

  

失败 - 无法启动上下文路径/zift-0.0.1-SNAPSHOT的应用程序

我检查了catalina.out并意识到我主要得到了#34; UnsatisfiedDependencyExceptions",奇怪的是我在自己的计算机上都没有得到它们。这是catalina.out:

0:10:45.466 [http-nio-8080-exec-16] ERROR org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'projectController': Unsatisfied dependency expressed through field 'projectService'; nes$
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4851)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
        at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1284)
        at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:666)
        at org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:217)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:136)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:616)

这与其他组件相同,但有相同的例外情况。

这是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>

    <groupId>com.zift.org</groupId>
    <artifactId>zift</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>ziftorganizasyon</name>
    <description>Zift Organizasyon</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.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.7</java.version>
        <start-class>com.ziftorg.configurations.ZiftInitializer</start-class>
    </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-starter-test</artifactId>
            <scope>test</scope>
        </dependency>



        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.2.RELEASE</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>4.1.3.RELEASE</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.security.oauth</groupId>
            <artifactId>spring-security-oauth2</artifactId>
            <version>2.0.12.RELEASE</version>
        </dependency>


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


        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.5.3</version>
        </dependency>

        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20090211</version>
        </dependency>




    </dependencies>

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


</project>

JavaConfig文件:

package com.ziftorg.configurations;


import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;


public class ZiftInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { ZiftConfiguration.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }




}

而且:

package com.ziftorg.configurations;

import javax.sql.DataSource;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

@Configuration
@EnableWebMvc 
@ComponentScan(basePackages = "com.ziftorg")
public class ZiftConfiguration {


    @Bean
    public ViewResolver viewResolver() {

        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/jsps/");
        viewResolver.setSuffix(".jsp");

        return viewResolver;
    }


    @Bean
    public DataSource dataSource() {
        final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
        dsLookup.setResourceRef(true);
        DataSource dataSource = dsLookup.getDataSource("jdbc/zift");
        return dataSource;
    } 

}

控制器之一:

package com.ziftorg.controllers;

import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriComponentsBuilder;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
//import com.mysql.jdbc.Constants;
import com.ziftorg.models.Chapter;
import com.ziftorg.models.Project;
import com.ziftorg.models.User;
import com.ziftorg.services.ProjectService;

import sun.awt.RepaintArea;

@JsonIgnoreProperties(ignoreUnknown = true)
@RestController
public class ProjectController {

    @Autowired
    private ProjectService projectService;

    // GET METHOD TO RETRIEVE ALL PROJECTS
    @CrossOrigin(origins = com.ziftorg.Constants.CORS_ORIGIN)
    @RequestMapping(value = "/projects", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<List<Project>> getAllProject() {

        List<Project> projects = projectService.findAll();

        return new ResponseEntity<List<Project>>(projects, HttpStatus.OK);
    }

    // GET Request to retrieve a single project by ID Numberto
    @CrossOrigin(origins = com.ziftorg.Constants.CORS_ORIGIN)
    @RequestMapping(value = "/projects/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Project> getSingleProject(@PathVariable("id") long id) {

        Project project = projectService.findById(id);

        if (project == null)
            return new ResponseEntity<Project>(HttpStatus.NOT_FOUND);

        return new ResponseEntity<Project>(project, HttpStatus.OK);
    }

    // POST request to create a BLANK PROJECT and return it back
    @CrossOrigin(origins = com.ziftorg.Constants.CORS_ORIGIN)
    @RequestMapping(value = "/projects", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Project> create(@RequestBody Project project, UriComponentsBuilder ucBuilder) {

        System.out.println("passed project to POST project is : " + project);
        System.out.println("UserID wanted to create a project is: " + project.getAuthorId());

        Project p = projectService.create(project.getAuthorId());

        return new ResponseEntity<Project>(p, HttpStatus.OK);

    }

    @RequestMapping(value = "projects/{id}", method = RequestMethod.DELETE)
    @CrossOrigin(origins = com.ziftorg.Constants.CORS_ORIGIN)
    public ResponseEntity<Project> delete(@PathVariable("id") int id) {

        Project project = projectService.findById(id);
        if (project == null)
            return new ResponseEntity<Project>(HttpStatus.NOT_FOUND);

        projectService.delete(project);
        return new ResponseEntity<Project>(HttpStatus.NO_CONTENT);
    }

    @RequestMapping(value = "projects/{id}", method = RequestMethod.PUT)
    @CrossOrigin(origins = com.ziftorg.Constants.CORS_ORIGIN)
    public ResponseEntity<Project> update(@PathVariable("id") int id, @RequestBody Project project) {

        System.out.println("received project city for update is : " + project.getCity());
        System.out.println("came here too");
        Project currentProject = projectService.findById(id);

        if (currentProject == null)
            return new ResponseEntity<Project>(HttpStatus.NOT_FOUND);

        currentProject.setName(project.getName());
        currentProject.setAuthor(project.getAuthor());
        currentProject.setPartnerCountries(project.getPartnerCountries());
        currentProject.setCity(project.getCity());
        currentProject.setStartDate(project.getStartDate());
        currentProject.setEndDate(project.getEndDate());
        currentProject.setChapters(project.getChapters());

        projectService.update(currentProject);
        return new ResponseEntity<Project>(currentProject, HttpStatus.OK);
    }

    @RequestMapping(value = "projects/{id}/chapters/{chapterID}", method = RequestMethod.PUT)
    @CrossOrigin(origins = com.ziftorg.Constants.CORS_ORIGIN)
    public ResponseEntity<String> update(@PathVariable("id") long id, @PathVariable("chapterID") long chapterID,
            @RequestBody Chapter chapter) {

        Project p = projectService.findById(id);

        List<Chapter> chapters = p.getChapters();

        for (Chapter c : chapters) {

            if (c.getId() == chapterID) {
                System.out.println("will print the subtitles now");
                System.out.println(chapter.getSubtitles().toString());

                projectService.updateChapter(chapter);

            }

        }

        return new ResponseEntity<String>(HttpStatus.OK);

    }

}

这是关于前一个控制器的服务类:

package com.ziftorg.services;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import com.ziftorg.models.Chapter;
import com.ziftorg.models.Project;
import com.ziftorg.models.Subtitle;
import com.ziftorg.repositories.ProjectRepository;

@Service("projectService")
@Qualifier("localProjectRepository")
public class ProjectService {

    @Autowired
    private ProjectRepository projectRepository;

    public void setProjectRepository(ProjectRepository projectRepository) {

        this.projectRepository = projectRepository;
    }

    public List<Project> findAll() {

        return projectRepository.findAll();
    }

    public Project findByName(String name) {

        return projectRepository.findByName(name);
    }

    public Project findById(long id) {

        return projectRepository.findById(id);
    }

    public void update(Project project) {
        projectRepository.update(project);
    }

    public void delete(Project project) {

        projectRepository.delete(project);
    }

    public void create(Project project) {

        projectRepository.create(project);
    }

    public Project create(long userID) {

        return projectRepository.create(userID);
    }

    public boolean projectExists(Project project) {

        return projectRepository.findById((int) project.getId()) != null;
    }

    public void updateChapter(Chapter chapter) {

        projectRepository.updateChapter(chapter);

    }

}

1 个答案:

答案 0 :(得分:0)

当您说您的计算机上没有问题是因为您在STS中的嵌入式tomcat上运行项目?因为如果是这种情况,则必须添加WebApplicationInitializer。