我想创建一个从春季启动应用程序,我可以部署到一个独立的Tomcat容器战争文件,而不是使用嵌入式之一。春季启动war文件可与嵌入,但不是独立的Tomcat
我可以创建war文件并使用"java -jar pdfjs-annotator.war"
自己运行它,它工作正常。
我建立gradle bootRepackage
的应用程序(使用摇篮,Tomcat7,爪哇1.7)。
但是,当我将war文件部署到独立的Tomcat并启动它时,该应用程序似乎根据日志无误启动,但我无法访问任何资源,也无法控制器网址工作。
例如,我的index.html是src/main/resources/static/index.html下的一个静态html页面,我通常可以通过localhost:8080/index.html调用该页面,但是当部署到独立的Tomcat ,页面不获取传递(它,然后在WEB-INF /班/静态/ index.html的战争文件)通过同一网址。而且任何类型的控制器映射似乎都不起作用。我得到一个404错误,而不是。
的build.gradle:
buildscript {
ext {
springBootVersion = '1.2.3.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("io.spring.gradle:dependency-management-plugin:0.5.0.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'war'
war {
baseName = 'pdfjs-annotator'
version = '1.0.0-SNAPSHOT'
}
allprojects {
apply plugin: 'java'
sourceCompatibility = 1.6
targetCompatibility = 1.6
}
repositories {
mavenCentral()
}
configurations {
providedRuntime
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile("org.springframework.boot:spring-boot-starter-data-rest")
compile("org.springframework.boot:spring-boot-starter-web")
runtime("mysql:mysql-connector-java")
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
testCompile("org.springframework.boot:spring-boot-starter-test")
compile ('org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final')
}
eclipse {
classpath {
containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7'
}
}
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
我的主要应用类:
@EnableJpaRepositories
@SpringBootApplication
public class PdfAnnotator extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(PdfAnnotator.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(PdfAnnotator.class);
}
}
当我看着分解的战争,我确实看到以下META-INF /清单.MF:
Manifest-Version: 1.0
Start-Class: com.mypackage.pdfcomment.PdfAnnotator
Spring-Boot-Version: 1.2.3.RELEASE
Main-Class: org.springframework.boot.loader.WarLauncher
通常产生两级战的文物,一个命名的.war,一个名为.war.original的gradle这个生成过程 - 将.war是持有正确的MANIFEST.MF条目中的一个,它是我用来部署到独立的Tomcat的一个。
什么是缺失?我已经检查其他问题在这里SO:
,也是春季启动文档,但找不到的什么是错的提示。
* ===更新=== *
我安装了一个全新的Tomcat7,部署war文件那里,一切都工作正常。似乎与我运行的Tomcat实例/配置有关。不知道究竟是什么问题,但我不打算进一步检查它,因为现在使用新的Tomcat工作正常。
Spring Boot gradle插件通常会创建两个工件,一个用于Tomcat,另一个不用。我忘了命名,但只是尝试两个。除此之外,我会使用战争文件。我知道这不再是必要的,但要安全。 –
@ mh-dev对,我想你的意思是.war和.war.original - 我会试试看。到目前为止,我刚刚使用了.war。 –
@ mh-dev我尝试了两种,但没有区别。无论如何,我使用的.war应该是正确的,因为这是唯一拥有正确MANIFEST.MF条目的。 –