我想要在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);
}
}
答案 0 :(得分:0)
当您说您的计算机上没有问题是因为您在STS中的嵌入式tomcat上运行项目?因为如果是这种情况,则必须添加WebApplicationInitializer。