java - 在 Tomcat 服务器上使用 Gradle 构建部署 Spring 应用程序

标签 java spring hibernate tomcat gradle

我是 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 的示例代码:

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

最佳答案

只要您定义了 Controller ,您的应用程序就可以按原样运行。 Spring-boot 的最佳特性之一是,它会为您完成大部分脏活。您必须使用 @RequestMapping("/your-path") 将 Controller 和 url 路径定义为注释.另外,用 @RestController 注释类.如果您可以提供此应用程序代码的 url,如果它具有所有必要的定义,我将能够进一步研究它。此外,我建议进行一些更改。

更新spring-boot-版本到最新的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文件。只需拿起那场 war 并将其部署在您的 Tomcat 服务器中。

如果您将 war 文件部署到 Tomcat,您应该将应用程序构建名称添加到 URL 以访问您的映射,因为 Tomcat 使用 war 文件的文件名作为上下文路径 (check here)。例如:localhost:8080/abc-service-0.1.0-SNAPSHOT/your-mapping/ .您可以使用 baseName 属性指定 war 的命名方式。例如,如果您不想在应用程序 URL 中使用版本号,则可以去掉它。

war {
   baseName = 'abc-service'
}

或者您可以在复制到 Tomcat 之前在 Gradle 构建之后简单地将您的 war 文件重命名为您想要的任何根上下文。

我喜欢 spring-boot 的另一个特性是,您不需要外部 Tomcat 服务器来部署 spring-boot 应用程序。它已经有一个嵌入式 Tomcat 服务器。要利用此功能,您可以将应用程序构建为 jar 文件,并作为 java 应用程序运行。为此,首先,删除 apply plugin: 'war' 行.并将您的 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 .

根据您的 Controller ,您对用户(身份验证)的 REST 调用应该是 localhost:8080/authentication/userLogin?username=<user-name>&password=<pass-word> .如果您错过了用户名或密码,您将收到错误消息,因为根据您的代码,它们是必需的 (required=true) 字段。此外,您的注册方法应配置为发布,并且您应该传递请求正文。您可以使用 Advanced REST Client/POSTMAN Google Chrome 扩展来发出发布请求。

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

关于java - 在 Tomcat 服务器上使用 Gradle 构建部署 Spring 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37798549/

相关文章:

java - 我如何使用这个 hibernate 查询获取行?

java - 获取变量声明

java - JSplitPane 设置可调整大小为 false

java - 如何使用 API 导出跑道中的评论部分

hibernate - 如何测试具有不可空集合的持久实体

java - 在 Hibernate 5.1 中通过自定义 SQL 查询定义实体

java - 矩阵格式的控制台输出

java - 如何使用 Jackson 和 MongoDB 传递 JSON 消息中的属性?

java - org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V

Spring Boot @Formula 在每个结果上显示相同的 likeCount