【问题标题】:Access spring boot application by url通过url访问spring boot应用
【发布时间】:2017-02-08 20:12:59
【问题描述】:

我正在处理一个简单的 Spring Boot 应用程序,但访问该应用程序的路径时遇到问题。 我的应用程序非常简单。这是 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>

这是主类

@SpringBootApplication
@ComponentScan(basePackages = "main")
@EnableAutoConfiguration
public class ApplicationMain {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationMain.class, args);
    }
}

这是 de Controller 类

@RestController
public class ControllerMain {

    @RequestMapping("/springboot/hello")
    public @ResponseBody String home() {

        return "Hello World";
    }
}

好吧,当我在 localhost 中执行应用程序一切正常时,我可以在浏览器中输入http://localhost:8080/springboot/hello 并显示结果。 当我将生成的 jar 放在生产服务器上时,我的问题就开始了。该服务器是带有 Plesk 的典型 VPS(虚拟专用服务器),集成了 Apache 服务器和 Tomcat。 首先,我停止服务器的 tomcat 服务,因为我的 spring boot 应用程序嵌入了 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 服务不可用。 像我一样在VPS中部署一个带有tomcat的spring boot应用程序jar的步骤是什么?

【问题讨论】:

    标签: spring-boot vps


    【解决方案1】:

    我终于找到了解决问题的方法。首先,我将它添加到我的 application.properties 文件中:

    server.port=8082
    server.use-forward-headers=true
    server.contextPath=/mainstay
    

    在我创建了这个类之后

    @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 服务

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-14
      • 2021-11-15
      • 1970-01-01
      • 2017-11-18
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多