2016-09-30 101 views
1

我正在做一個簡單的彈簧啓動應用程序,但訪問這個應用程序的路線有問題。 我的應用程序非常簡單。這個POM:通過url訪問彈簧啓動應用程序

<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); 
    } 
} 

而這個去Controller類

@RestController 
public class ControllerMain { 

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

     return "Hello World"; 
    } 
} 

好吧,當我執行在localhost上的應用程序都運行正確,我可以將http://localhost:8080/springboot/hello放入瀏覽器中,並顯示結果。 當我在生產服務器上生成jar時,我的問題就開始了。該服務器是一個典型的VPS(虛擬專用服務器),帶有Plesk,它具有Apache服務器並集成了Tomcat。 首先我停止服務器的tomcat服務,因爲我的spring啓動應用程序嵌入了Tomcat,這會在兩個Tomcat服務器之間產生衝突。 後,我去上傳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服務不可用。 與我一樣,將Tomcat嵌入VPS中部署彈簧引導應用程序jar的步驟是什麼?

回答

2

最後我找到了解決我的問題。我創建了這個類

@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到我的服務器後

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

:首先,我已經加入這個我application.properties文件。有了這個,我已經編輯我的服務器的工人文件,我已經加入這個:

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 

而且我已經編輯這個

<IfModule mod_jk.c> 
    JkMount /mainstay spring 
    JkMount /mainstay/* spring 
</IfModule> 

我重新啓動httpd服務我的httpd.conf文件可以訪問我的應用程序

相關問題