通过url访问spring boot应用程序

时间:2016-09-30 09:35:56

标签: spring-boot vps

我正在进行一个简单的春季启动应用程序,但是对于访问此应用程序的路径存在问题。 我的应用很简单。这是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启动应用程序嵌入了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启动应用程序jar的步骤是什么?

1 个答案:

答案 0 :(得分:4)

最后,我找到了解决问题的方法。首先我将它添加到我的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上传到我的服务器。有了这个,我编辑了服务器的workers文件,并添加了这个:

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