Cách sử dụng Gradle-Spring-Boot

Tôi đang ở giữa việc thu thập các yêu cầu cho một dự án, và sự thiếu tập trung của tôi đã khiến tôi từ chối thu thập các yêu cầu để tìm kiếm các công nghệ mới mà tôi có thể sử dụng. Đối với công cụ build, tôi đã quyết định rằng đã là thời gian cao để tiếp tục và học Gradle thay vì Maven mà tôi đã tin tưởng trong một thời gian dài. Đây là một so sánh của Gradle vs Maven nếu bạn cần một cái gì đó thuyết phục để đọc. Đối với framework của tôi, không có gì có nhiều buzz hơn Spring Framework. Nó cũng có rất nhiều đề xuất rằng bỏ qua nó sẽ không thể. Và có Spring Boot với một plugin Gradle giúp bạn thiết lập môi trường dev của mình một cách thuận tiện hơn. Trước hết, bạn có biết cách sử dụng gradle? Nếu không, tôi khuyên bạn nên Khóa học Udacity này, chắc chắn nó đáng để bạn dành thời gian. Hãy thử xem, nó hoàn toàn miễn phí. Rất tốt! Sau khi bạn quay trở lại. Bây giờ, đã đến lúc thiết lập build.gradle, mô tả dự án của bạn. Ồ, bạn đã biết điều đó rồi à ?! Được rồi, đây là build.gradle sẽ giúp bạn bắt đầu.

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.3.RELEASE")
    }
}

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

jar {
    baseName = 'Project'
    version = 1.0
}

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'
    testCompile 'org.springframework.boot:spring-boot-starter-test'
}

Khối buildscript là cần thiết để có thể sử dụng plugin spring boot, nó nói với Gradle cách tìm plugin. Sau đó bạn áp dụng plugin java và spring boot. Bạn cần phải làm điều này để tận dụng lợi ích của các tác vụ được thêm vào plugin. Khối jar mô tả đầu ra jar khi bạn hoàn thành việc build project Sự phụ thuộc thời gian biên dịch spring-boot-starter-web cũng sẽ bao gồm tất cả các dependencies cần thiết để bắt đầu một ứng dụng web dựa vào spring. Nó cũng bao gồm một tomcat kèm theo như là bộ chứa servlet mặc định, logback như là logging framework mặc định. Vâng, tôi biết. Thật tuyệt vời!

Cấu trúc

Cấu trúc dự án sẽ theo cấu trúc dự án java thông thường. Các tệp nguồn chính nằm trong src / main / java. Tài nguyên trong src / main / resources. Và các tài nguyên web (.html, .js, .css) trong src / main / webapp / WEB-INF. Bất cứ điều gì liên quan đến test ở src / test. Nhìn vào cấu trúc bên dưới, điển hình phải không?

project
+- src
   +- main
   |  +- java
   |  |  +- com
   |  |     +- acme
   |  |        +- project
   |  +- resources
   |  +- webapp
   |     +- WEB-INF
   +- test

Spring Boot Configuration

Điều đầu tiên cần làm là cấu hình ứng dụng spring của bạn. Chúng tôi sẽ làm theo cách của Spring, không có XML!

package com.acme.project;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * Base config class for Spring Framework
 */
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application{

  /**
   * Default Spring-Boot main method
   * @param args
   */
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

Bạn sẽ cần phải khai báo cấu hình chính của bạn trong gói cơ sở mà bạn muốn quét phần chú thích thành phần bắt đầu. Đây là một thực hành tốt vì bạn sẽ không cần phải xác định bằng tay nơi mà các thành phần quét sẽ bắt đầu. Thực tiễn tốt nhất là đặt nó vào gói cấp cao nhất của bạn, com.acme.project và cũng có thể rằng lớp cấu hình này chứa phương thức main Chú giải @Configuration có nghĩa là lớp này là một lớp cấu hình spring. The @Component nói rằng việc quét các chú thích sẽ bắt đầu từ gói của lớp này và nó là các gói phụ. Các @EnableAutoConfiguration tự động nhận diện loại ứng dụng bạn đang cố gắng để phát triển và tự động cung cấp các cấu hình cơ bản..

Resource Resolution

Để giải quyết các tập tin html của bạn, bạn sẽ cần một chiến lược để giải quyết tài nguyên và may mắn cho bạn nó chỉ là một cấu hình!

package com.acme.project;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

/**
* Configuration class intended for Spring MVC (template resolution 
* etc.)
*/
@Configuration
@EnableWebMvc
public class ApplicationMvcConfig extends WebMvcConfigurerAdapter {

@Bean
public ViewResolver getViewResolver() {
  InternalResourceViewResolver resolver = 
    new InternalResourceViewResolver();
  resolver.setPrefix("/WEB-INF/");
  resolver.setSuffix(".html");
  return resolver;
}

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  //enable mapping to template (.html/.jsp) files
  configurer.enable();
}
}

Điều chính ở đây là để thiết lập làm thế nào mapping nên làm việc. Như bạn thấy trong phương thức getViewResolver(), chúng tôi đã chỉ ra rằng tài nguyên của chúng ta kết thúc bằng .html và có thể tìm thấy tại thư mục WEB-INF. Điều quan trọng là bạn kích hoạt tính năng giải quyết tài nguyên này như đã được chỉ ra trong câu trả lời StackOverflow này. Tôi không biết (có nghĩa là tôi đã không bận tâm nghiên cứu) tại sao điều này không phải là tự động, hầu hết các thứ trong spring framework là tự động. Nó được thực hiện trong phương thức configureDefaultServletHandling với một dòng lệnh configurer.enable ();

The Controller

Cuối cùng là controller của chúng tôi. Điều này sẽ chặn yêu cầu URL và trả lại đúng tệp .html được ánh xạ bởi Resource Resolution mà chúng tôi đã thiết lập.

package com.acme.project.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * Controller for web pages.
 * Only two request mappings included intended for secured "single" 
 * page applications.
 */
@Controller
public class BaseController {

  @RequestMapping("/")
  public String home() {
    return "home";
  }

  @RequestMapping("/login")
  public String login(){
    return "login";
  }
}

Method home sẽ trỏ trang localhost: 8080 vào src main/webapp/WEB-INF/home.html và phương thức login sẽ trỏ localhost:8080/login vào src/main/webapp/WEB-INF/login.html

Run

Bạn muốn chạy ứng dụng spring của mình? Để làm điều này chỉ cần chạy câu lệnh này trong commandline.

> gradle bootRun

Chúc mừng!!!! Bây giờ bạn có thể truy cập: localhost:8080.