通过 url 访问 spring 启动应用程序
Access spring boot application by url
我正在尝试做一个简单的 spring 引导应用程序,但在访问此应用程序的路径时遇到问题。
我的应用程序非常简单。这是 pom:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</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-actuator</artifactId>
</dependency>
</dependencies>
<build>
<finalName>demospringboot</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
<packaging>jar</packaging>
这是主要的class
@SpringBootApplication
@ComponentScan(basePackages = "main")
@EnableAutoConfiguration
public class ApplicationMain {
public static void main(String[] args) {
SpringApplication.run(ApplicationMain.class, args);
}
}
这是 de Controller class
@RestController
public class ControllerMain {
@RequestMapping("/springboot/hello")
public @ResponseBody String home() {
return "Hello World";
}
}
好吧,当我在localhost all 运行 正确执行应用程序时,我可以在浏览器中输入http://localhost:8080/springboot/hello 并显示结果。
当我将生成的 jar 放在生产服务器上时,我的问题就开始了。此服务器是典型的 VPS(虚拟专用服务器),带有 Plesk,集成了 Apache 服务器和 Tomcat。
首先,我停止了服务器的 tomcat 服务,因为我的 spring 启动应用程序嵌入了 Tomcat,这会在两个 Tomcat 服务器之间产生冲突。
在我将 de jar 文件上传到服务器并执行它之后:
java -jar demospringboot.jar
我看到了显示应用程序部署方式的跟踪,但是当我在浏览器中输入类似 http://myserverdomain/springboot/hello 的内容时,我收到 404 错误。
我的服务器安装了 mod_jk 以让 apache 服务器和 tomcat 服务器同时提供静态文件和 java 应用程序,为此我将此配置添加到 httpd.conf 中虚拟主机
<IfModule mod_jk.c>
JkMount /springboot ajp13
JkMount /springboot/* ajp13
</IfModule>
当我添加此配置时,错误 404 传递到错误 503 服务不可用。
部署 spring 引导应用程序 jar 的步骤是什么,其中 tomcat 嵌入到 VPS 中?
我终于找到了解决问题的方法。首先,我将其添加到我的 application.properties 文件中:
server.port=8082
server.use-forward-headers=true
server.contextPath=/mainstay
在我创建这个之后class
@Controller
public class ServletConfig {
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
Connector ajpConnector = new Connector("AJP/1.3");
ajpConnector.setProtocol("AJP/1.3");
ajpConnector.setPort(9090);
ajpConnector.setSecure(false);
ajpConnector.setAllowTrace(false);
ajpConnector.setScheme("http");
tomcat.addAdditionalTomcatConnectors(ajpConnector);
return tomcat;
}
}
我已经编译了我的应用程序并将 jar 上传到我的服务器。有了这个,我编辑了我的服务器的工作文件并添加了这个:
worker.list=ajp13,spring
worker.ajp13.port=9008
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.spring.port=9090
worker.spring.host=localhost
worker.spring.type=ajp13
我已经用这个
编辑了httpd.conf文件
<IfModule mod_jk.c>
JkMount /mainstay spring
JkMount /mainstay/* spring
</IfModule>
我已经重新启动了可以访问我的应用程序的 httpd 服务
我正在尝试做一个简单的 spring 引导应用程序,但在访问此应用程序的路径时遇到问题。 我的应用程序非常简单。这是 pom:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</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-actuator</artifactId>
</dependency>
</dependencies>
<build>
<finalName>demospringboot</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
<packaging>jar</packaging>
这是主要的class
@SpringBootApplication
@ComponentScan(basePackages = "main")
@EnableAutoConfiguration
public class ApplicationMain {
public static void main(String[] args) {
SpringApplication.run(ApplicationMain.class, args);
}
}
这是 de Controller class
@RestController
public class ControllerMain {
@RequestMapping("/springboot/hello")
public @ResponseBody String home() {
return "Hello World";
}
}
好吧,当我在localhost all 运行 正确执行应用程序时,我可以在浏览器中输入http://localhost:8080/springboot/hello 并显示结果。 当我将生成的 jar 放在生产服务器上时,我的问题就开始了。此服务器是典型的 VPS(虚拟专用服务器),带有 Plesk,集成了 Apache 服务器和 Tomcat。 首先,我停止了服务器的 tomcat 服务,因为我的 spring 启动应用程序嵌入了 Tomcat,这会在两个 Tomcat 服务器之间产生冲突。 在我将 de jar 文件上传到服务器并执行它之后:
java -jar demospringboot.jar
我看到了显示应用程序部署方式的跟踪,但是当我在浏览器中输入类似 http://myserverdomain/springboot/hello 的内容时,我收到 404 错误。 我的服务器安装了 mod_jk 以让 apache 服务器和 tomcat 服务器同时提供静态文件和 java 应用程序,为此我将此配置添加到 httpd.conf 中虚拟主机
<IfModule mod_jk.c>
JkMount /springboot ajp13
JkMount /springboot/* ajp13
</IfModule>
当我添加此配置时,错误 404 传递到错误 503 服务不可用。 部署 spring 引导应用程序 jar 的步骤是什么,其中 tomcat 嵌入到 VPS 中?
我终于找到了解决问题的方法。首先,我将其添加到我的 application.properties 文件中:
server.port=8082
server.use-forward-headers=true
server.contextPath=/mainstay
在我创建这个之后class
@Controller
public class ServletConfig {
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
Connector ajpConnector = new Connector("AJP/1.3");
ajpConnector.setProtocol("AJP/1.3");
ajpConnector.setPort(9090);
ajpConnector.setSecure(false);
ajpConnector.setAllowTrace(false);
ajpConnector.setScheme("http");
tomcat.addAdditionalTomcatConnectors(ajpConnector);
return tomcat;
}
}
我已经编译了我的应用程序并将 jar 上传到我的服务器。有了这个,我编辑了我的服务器的工作文件并添加了这个:
worker.list=ajp13,spring
worker.ajp13.port=9008
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.spring.port=9090
worker.spring.host=localhost
worker.spring.type=ajp13
我已经用这个
编辑了httpd.conf文件<IfModule mod_jk.c>
JkMount /mainstay spring
JkMount /mainstay/* spring
</IfModule>
我已经重新启动了可以访问我的应用程序的 httpd 服务