我跟着this tutorial。现在,如果我通过Spring Boot使用它,它可以工作,但如果我尝试在Apache Tomcat 7上部署它(删除应用程序类),我会收到404响应。我也尝试过自己的配置 - 就像这样:
@Configuration
public class MongoConfiguration {
public @Bean MongoDbFactory mongoDbFactory() throws Exception {
return new SimpleMongoDbFactory(new Mongo("127.0.0.1", 27017), "movies");
}
public @Bean MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory());
}
}
它仍然不起作用。所以有2个问题。
注意:默认情况下,它使用测试vile运行spring boot,我可以通过简单的控制器(而不是@RepositoryRestResource
)使其工作,但我希望能够卷曲http://localhost:8080
并获得选项响应。
答案 0 :(得分:19)
您是否确定已按照引导参考文档的section on traditional deployments进行操作?根据您的描述,它看起来不像Spring Data REST或MongoDB不起作用,但部署根本不起作用。
诀窍应该是让主配置类实现一个特殊的接口,以便servlet容器可以找到引导程序的配置(从参考文档中获取的样本):
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
SpringBootServletInitializer
是这里的关键方面,因为它是挂钩到传统Web应用程序的Servlet 3引导程序机制的类型。在Servlet 3.0之前,参考文档还有instructions如何使引导应用程序在Servlet容器中工作。
另请注意,当应用程序部署到独立容器中时,通常不能通过根(即http://localhost:8080/
)使用它,而是在部署WAR文件后命名的专用上下文(例如http://localhost:8080/my-app
)
答案 1 :(得分:0)
由于java版本,我遇到了这个问题的不同版本。所有配置在pom中都是正确的。
<properties>
...
<tomcat.version>8.0.39</tomcat.version>
<java.version>1.8</java.version>
...
</properties>
结果是服务器运行的是OpenJDK版本7.启动时tomcat日志中没有错误,但Spring应用程序也没有输出。
将服务器升级到Oracle JDK版本8后,一切都运行良好。
答案 2 :(得分:0)
我遇到了与更新的Tomcat(7.0.82)相同的问题。在此处描述的其他解决方案对我不起作用后,我能够通过实现另一个类ServletInitializer.java
来解决问题:
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MyApp.class);
}
}
而不是扩展MyApp.java
:
...
@SpringBootApplication
public class MyApp extends SpringBootServletInitializer {
...
}
有关完整教程,请参阅https://www.youtube.com/watch?v=92ceKwUZoA0。
答案 3 :(得分:0)
只需删除:<scope>provided</scope>
,除非您最终希望将其部署到其他tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--<scope>provided</scope>-->
</dependency>