簡體   English   中英

在 Tomcat 服務器上使用 Gradle 構建部署 Spring 應用程序

[英]Deploy Spring application using Gradle build on Tomcat server

我是 spring 和 Gradle 的新手。 我正在嘗試在 Tomcat 服務器上使用 Gradle 構建部署 Spring 應用程序。 我能夠生成一個war文件,但我沒有用於映射servlet的web.xml文件,也沒有映射servlet。 我有一個主類和配置類。

那么,為了在 tomcat 上部署我的應用程序,我需要做什么? 我找不到合適的端到端文章。 我瀏覽了這個http://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html (這篇文章主要涵蓋了 maven 存儲庫/插件而不是 Gradle 部分)並且我只能生成war文件。 由於我沒有任何 web.xml,我不確定如何部署它。 任何人都可以幫我解決這個問題。

   buildscript {
  repositories {
    maven { url "" }
    mavenLocal()
   }
   dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-     plugin:1.0.2.RELEASE")

}
    }

 apply plugin: 'java'
 apply plugin: 'eclipse'
 apply plugin: 'idea'
 apply plugin: 'spring-boot'


 apply plugin: 'war'

war {
baseName = 'abc-service'
version =  '0.1.0'
}


 repositories {
mavenCentral()
maven { url "" }
}

dependencies {
compile("org.springframework:spring-jdbc")
compile("org.springframework:spring-oxm")
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile("com.fasterxml.jackson.core:jackson-databind")
compile("com.h2database:h2")
compile("mysql:mysql-connector-java:5.1.16")
compile("com.paypal.sdk:rest-api-sdk:1.4.1")

compile("commons-dbcp:commons-dbcp:1.4")
compile("com.sun.mail:javax.mail:1.5.5")
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat");
testCompile("junit:junit")
}

task wrapper(type: Wrapper) {
gradleVersion = '2.1'
 }

這是我的用戶控制器的示例代碼:

 @Controller
public class AuthenticationController {
@RequestMapping(value =    "/authentication/userLogin")
 public @ResponseBody
 ResponseEntity<Object> user(@RequestParam(value="username", required=true)      String username,
@RequestParam(value="password", required=true) String password,
HttpServletResponse response) {
 return this.authenticationService.loginUser(username, password);
 } 
 @RequestMapping(value = "/authentication/register")
public @ResponseBody
 Response register(@RequestBody String jsonRequest,
HttpServletResponse response) {
 AuthenticationService authenticationService = new AuthenticationService();
 Response registerResponse =     authenticationService.registerUser(jsonRequest);
 return registerResponse;
 }}

只要您定義了控制器,您的應用程序就可以正常運行。 Spring-boot 的最佳特性之一是,它為您完成了大部分臟活。 您必須使用@RequestMapping("/your-path")將控制器和 url 路徑定義為注釋。 此外,使用@RestController注釋該類。 如果您可以提供此應用程序代碼的 url,如果它具有所有必要的定義,我將能夠進一步研究它。 此外,我會推薦一些更改。

將 spring-boot-version 更新到最新的 1.3.5

classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.5.RELEASE")

更新 Gradle 版本

task wrapper(type: Wrapper) {

    gradleVersion = '2.13'
}

也更新其他依賴項。 然后調用以下命令。

gradle wrapper
./gradlew clean build 

第一行將下載設置您的項目以使用 Gradle 2.13 版運行並將其下載到一個臨時目錄,而不管您計算機中安裝的 Gradle 版本如何。 第二行將使用下載的最新 Gradle 構建您的項目。 然后檢查您的<project-root-directory>/build/libs目錄。 您將看到abc-service-0.1.0-SNAPSHOT.war文件。 只需拿起那場戰爭並將其部署在您的 Tomcat 服務器中即可。

如果您將 war 文件部署到 Tomcat,您應該將應用程序構建名稱添加到 URL 以訪問您的映射,因為 Tomcat 使用 war 文件的文件名作為上下文路徑(請查看此處)。 例如: localhost:8080/abc-service-0.1.0-SNAPSHOT/your-mapping/ 您可以使用 baseName 屬性指定戰爭的命名方式。 例如,如果您不希望在應用程序 URL 中使用版本號,則可以去掉它。

war {
   baseName = 'abc-service'
}

或者,您可以在 Gradle 構建之后復制到 Tomcat 之前,簡單地將您的 war 文件重命名為您想要的任何根上下文。

我喜歡 spring-boot 的另一個特性是,您不需要外部 Tomcat 服務器來部署 spring-boot 應用程序。 它已經有一個嵌入式 Tomcat 服務器。 要利用此功能,您可以將應用程序構建為 jar 文件,並作為 java 應用程序運行。 為此,首先,去掉apply plugin: 'war' 並將您的戰爭配置更改為 jar 配置。

jar {
   baseName = 'abc-service'
   version =  '0.1.0'
}

並將其作為 jar 文件運行。

java -jar <project-root-directory>/build/libs/abc-service-0.1.0-SNAPSHOT.jar

如果您使用的是 jar 文件,您可以簡單地使用您指定的任何映射。 例如: localhost:8080/your-mapping

根據您的控制器,您對用戶(身份驗證)的 REST 調用應該是localhost:8080/authentication/userLogin?username=<user-name>&password=<pass-word> 如果您錯過了用戶名或密碼,您將收到錯誤消息,因為它們是基於您的代碼的必填 ( required=true ) 字段。 此外,您的注冊方法應該配置為 post 並且您應該傳遞一個請求正文。您可以使用 Advanced REST Client/POSTMAN Google Chrome 擴展程序來發出 post 請求。

@RequestMapping(value = "/authentication/register", method = RequestMethod.POST)
public @ResponseBody Response register(@RequestBody String jsonRequest,
   HttpServletResponse response) {
  AuthenticationService authenticationService = new AuthenticationService();
  Response registerResponse =   authenticationService.registerUser(jsonRequest);
  return registerResponse;
}}

檢查您的 Spring Boot Application 類是否正在擴展 SpringBootServletInitializer。 如果您的 Application 類沒有擴展 SpringBootServletInitializer,那么使用 catalina.sh 運行腳本運行 tomcat 服務器將不起作用。 您需要使用 java -jar /usr/local/tomcat/webapps/app_name.war。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM