404 在控制器端点 Spring 而在客户服务器上 运行
404 on Controller Endpoint Spring while running on customer server
我在 Gradle spring 项目中一直得到 404,而 运行 在 tomcat 8.5 上。
我从 https://start.spring.io 创建了一个简单的项目并将其导入到 spring 工具套件。
当我 运行 它作为 spring 启动应用程序时,我能够到达端点 http://localhost:8080/healthCheck
但是当我将它添加到我创建的服务器时 (tomcat 8.5),我在同一端点上收到 404 错误。
这是我的简单控制器:
@RestController
public class HealthCheckController {
@GetMapping("/healthCheck")
public String healthCheck() {
return "API is accessible";
}
}
这是我的 build.gradle:
plugins {
id 'org.springframework.boot' version '2.5.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.demo'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-tomcat:2.5.4'
}
test {
useJUnitPlatform()
}
这是我的主要 class:
@SpringBootApplication
public class PracticeApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(PracticeApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(PracticeApplication.class);
}
}
我已将服务器位置更改为使用 Tomcat 安装,因此我可以点击 http://localhost:8080
并显示 tomcat 主页。
这是我的目录结构供参考:
我是 gradle 和 spring 的新手,如果我做错了愚蠢的事情,我深表歉意。
请按如下方式更改您的代码:
@SpringBootApplication
public class PracticeApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(PracticeApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(PracticeApplication.class, HealthCheckController.class);
}
}
看来您需要列出应用程序中的所有配置类和组件。
不过,我想在你的情况下不需要重写 configure()
方法,所以我也会尝试:
@SpringBootApplication
public class PracticeApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(PracticeApplication.class, args);
}
}
所以 Apache Tomcat 不接受 jar 文件,运行 spring 在外部 tomcat 服务器(非嵌入式服务器)上启动应用程序,WAR 需要创建文件。
我将 war 添加到我的 build.gradle 并给它起了一个别名
plugins {
id 'org.springframework.boot' version '2.5.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'war'
}
war {
archiveName = 'practice.war'
}
添加以上内容后,我刷新了 Gradle 项目并重新启动了服务器,然后我点击了以下端点:
http://localhost:8080/practice/healthCheck
这与我们在嵌入式服务器上访问上述端点的方式不同,后者是:
http://localhost:8080/healthCheck
运行 的另一种方法是转到 build/libs/
并将 war 复制到 ROOT 目录,然后从 [=15] 运行 startup.bat
=]
我在 Gradle spring 项目中一直得到 404,而 运行 在 tomcat 8.5 上。 我从 https://start.spring.io 创建了一个简单的项目并将其导入到 spring 工具套件。
当我 运行 它作为 spring 启动应用程序时,我能够到达端点 http://localhost:8080/healthCheck
但是当我将它添加到我创建的服务器时 (tomcat 8.5),我在同一端点上收到 404 错误。
这是我的简单控制器:
@RestController
public class HealthCheckController {
@GetMapping("/healthCheck")
public String healthCheck() {
return "API is accessible";
}
}
这是我的 build.gradle:
plugins {
id 'org.springframework.boot' version '2.5.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.demo'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-tomcat:2.5.4'
}
test {
useJUnitPlatform()
}
这是我的主要 class:
@SpringBootApplication
public class PracticeApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(PracticeApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(PracticeApplication.class);
}
}
我已将服务器位置更改为使用 Tomcat 安装,因此我可以点击 http://localhost:8080
并显示 tomcat 主页。
这是我的目录结构供参考:
我是 gradle 和 spring 的新手,如果我做错了愚蠢的事情,我深表歉意。
请按如下方式更改您的代码:
@SpringBootApplication
public class PracticeApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(PracticeApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(PracticeApplication.class, HealthCheckController.class);
}
}
看来您需要列出应用程序中的所有配置类和组件。
不过,我想在你的情况下不需要重写 configure()
方法,所以我也会尝试:
@SpringBootApplication
public class PracticeApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(PracticeApplication.class, args);
}
}
所以 Apache Tomcat 不接受 jar 文件,运行 spring 在外部 tomcat 服务器(非嵌入式服务器)上启动应用程序,WAR 需要创建文件。
我将 war 添加到我的 build.gradle 并给它起了一个别名
plugins {
id 'org.springframework.boot' version '2.5.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'war'
}
war {
archiveName = 'practice.war'
}
添加以上内容后,我刷新了 Gradle 项目并重新启动了服务器,然后我点击了以下端点:
http://localhost:8080/practice/healthCheck
这与我们在嵌入式服务器上访问上述端点的方式不同,后者是:
http://localhost:8080/healthCheck
运行 的另一种方法是转到 build/libs/
并将 war 复制到 ROOT 目录,然后从 [=15] 运行 startup.bat
=]