使用Spring Boot和Gradle创建项目

来源:互联网 发布:树莓派重启网络命令 编辑:程序博客网 时间:2024/06/05 18:18

原文:http://blog.javachen.com/2015/01/06/build-app-with-spring-boot-and-gradle.html
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
本文主要是记录使用 Spring Boot 和 Gradle 创建项目的过程,其中会包括 Spring Boot 的安装及使用方法,希望通过这篇文章能够快速搭建一个项目。
开发环境

操作系统: mac
JDK:1.7.0_60
Gradle:2.2.1
创建项目

你可以通过 Spring Initializr 来创建一个空的项目,也可以手动创建,这里我使用的是手动创建 gradle 项目。

参考使用Gradle构建项目 创建一个 helloworld 项目,执行的命令如下:

$ mkdir helloworld && cd helloworld$ gradle init

helloworld 目录结构如下:

➜  helloworld  tree.├── build.gradle├── gradle│   └── wrapper│       ├── gradle-wrapper.jar│       └── gradle-wrapper.properties├── gradlew├── gradlew.bat└── settings.gradle2 directories, 6 files

然后修改build.gradle文件:

buildscript {    repositories {        maven { url "https://repo.spring.io/libs-release" }        mavenLocal()        mavenCentral()    }    dependencies {        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.10.RELEASE")    }}apply plugin: 'java'apply plugin: 'eclipse'apply plugin: 'idea'apply plugin: 'spring-boot'jar {    baseName = 'helloworld'    version =  '0.1.0'}repositories {    mavenLocal()    mavenCentral()    maven { url "https://repo.spring.io/libs-release" }}dependencies {    compile("org.springframework.boot:spring-boot-starter-web")    testCompile("junit:junit")}task wrapper(type: Wrapper) {    gradleVersion = '2.2.1'}

创建一个实体类

新建一个符合Maven规范的目录结构, src/main/java/hello:

$ mkdir -p src/main/java/hello

创建一个实体类 src/main/java/hello/Greeting.java:

package hello;public class Greeting {    private final long id;    private final String content;    public Greeting(long id, String content) {        this.id = id;        this.content = content;    }    public long getId() {        return id;    }    public String getContent() {        return content;    }}

创建控制类

创建一个标准的控制类 src/main/java/hello/GreetingController.java:

package hello;import java.util.concurrent.atomic.AtomicLong;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;@Controllerpublic class GreetingController {    private static final String template = "Hello, %s!";    private final AtomicLong counter = new AtomicLong();    @RequestMapping("/greeting")    public @ResponseBody Greeting greeting(            @RequestParam(value="name", required=false, defaultValue="World") String name) {        System.out.println("==== in greeting ====");        return new Greeting(counter.incrementAndGet(),                            String.format(template, name));    }}

Greeting 对象会被转换成 JSON 字符串,这得益于 Spring 的 HTTP 消息转换支持,你不必人工处理。由于 Jackson2 在 classpath 里,Spring的 MappingJackson2HttpMessageConverter 会自动完成这一工作。

上面的代码还可以这样写:

package hello;import java.util.concurrent.atomic.AtomicLong;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class GreetingController {    private static final String template = "Hello, %s!";    private final AtomicLong counter = new AtomicLong();    @RequestMapping("/greeting")    public Greeting greeting(@RequestParam(value="name", required=false, defaultValue="World") String name) {        return new Greeting(counter.incrementAndGet(),                            String.format(template, name));    }}

这段代码使用 Spring4 新的注解: @RestController ,表明该类的每个方法返回对象而不是视图。它实际就是 @Controller 和 @ResponseBody 混合使用的简写方法。

创建一个可执行的类

尽管你可以将这个服务打包成传统的 WAR 文件部署到应用服务器,但下面将会创建一个独立的应用,使用 main 方法可以将所有东西打包到一个可执行的jar文件。并且,你将使用 Sping 对内嵌 Tomcat servlet 容器的支持,作为 HTPP 运行时环境,没必要部署成一个 tomcat 外部实例。

创建一个包含 main 方法的类 src/main/java/hello/Application.java:

package hello;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.boot.SpringApplication;import org.springframework.context.annotation.ComponentScan;@Configuration@ComponentScan@EnableAutoConfigurationpublic class Application {    public static void main(String[] args) {    SpringApplication.run(Application.class, args);    System.out.println("Let's inspect the beans provided by Spring Boot:");    String[] beanNames = ctx.getBeanDefinitionNames();    Arrays.sort(beanNames);    for (String beanName : beanNames) {        System.out.println(beanName);    }    }}

main 方法使用了 SpringApplication 工具类。这将告诉Spring去读取 Application 的元信息,并在Spring的应用上下文作为一个组件被管理。

@Configuration 注解告诉 spring 该类定义了 application context 的 bean 的一些配置。

@ComponentScan 注解告诉 Spring 遍历带有 @Component 注解的类。这将保证 Spring 能找到并注册 GreetingController,因为它被 @RestController 标记,这也是 @Component 的一种。

@EnableAutoConfiguration 注解会基于你的类加载路径的内容切换合理的默认行为。比如,因为应用要依赖内嵌版本的 tomcat,所以一个tomcat服务器会被启动并代替你进行合理的配置。再比如,因为应用要依赖 Spring 的 MVC 框架,一个 Spring MVC 的 DispatcherServlet 将被配置并注册,并且不再需要 web.xml 文件。

你还可以添加 @EnableWebMvc 注解配置 Spring Mvc。

运行项目

可以在项目根路径直接运行下面命令:

./gradlew bootRun

也可以先 build 生成一个 jar 文件,然后执行该 jar 文件:

./gradlew build && java -jar build/libs/helloworld-0.1.0.jar

启动过程中你回看到如下内容:

Let's inspect the beans provided by Spring Boot:applicationbeanNameHandlerMappingdefaultServletHandlerMappingdispatcherServletembeddedServletContainerCustomizerBeanPostProcessorhandlerExceptionResolverhelloControllerhttpRequestHandlerAdaptermessageSourcemvcContentNegotiationManagermvcConversionServicemvcValidatororg.springframework.boot.autoconfigure.MessageSourceAutoConfigurationorg.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfigurationorg.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfigurationorg.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$DispatcherServletConfigurationorg.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$EmbeddedTomcatorg.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfigurationorg.springframework.boot.context.embedded.properties.ServerPropertiesorg.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessororg.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessororg.springframework.context.annotation.internalAutowiredAnnotationProcessororg.springframework.context.annotation.internalCommonAnnotationProcessororg.springframework.context.annotation.internalConfigurationAnnotationProcessororg.springframework.context.annotation.internalRequiredAnnotationProcessororg.springframework.web.servlet.config.annotation.DelegatingWebMvcConfigurationpropertySourcesBinderpropertySourcesPlaceholderConfigurerrequestMappingHandlerAdapterrequestMappingHandlerMappingresourceHandlerMappingsimpleControllerHandlerAdaptertomcatEmbeddedServletContainerFactoryviewControllerHandlerMapping

测试

打开浏览器访问 http://localhost:8080/greeting ,可以看到页面输出下面内容:

{"id":1,"content":"Hello, World!"}

添加一个参数,访问 http://localhost:8080/greeting?name=User ,这时候页面输出下面内容:

{"id":2,"content":"Hello, User!"}

创建静态页面

创建 public/hello.js:

$(document).ready(function() {     $.ajax({          url: "http://localhost:8080/greeting"     }).then(function(data, status, jqxhr) {         $('.greeting-id').append(data.id);         $('.greeting-content').append(data.content);         console.log(jqxhr);     });});

创建一个页面 public/index.html:

<!DOCTYPE html><html>    <head>        <title>Hello jQuery</title>        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>        <script src="hello.js"></script>    </head>    <body>        <div>            <p class="greeting-id">The ID is </p>            <p class="greeting-content">The content is </p>        </div>        <h4>Response headers:</h4>        <div class="response-headers">        </div>    </body></html>

现在可以使用 Spring Boot CLI 启动一个嵌入式的 tomcat 服务来访问静态页面,你需要创建 app.groovy 告诉 Spring Boot 你需要运行 tomcat:

@Controller class JsApp { }

Spring Boot CLI 在 mac 系统上通过 brew 安装的方法如下:

brew tap pivotal/tapbrew install springboot

接下来可以指定端口运行一个 tomcat:

spring run app.groovy -- --server.port=9000

总结

本文主要参考 Sping 官方例子来了解和熟悉使用 Gradle 创建 Spring Boot 项目的过程,希望能对你有所帮助。

0 0
原创粉丝点击