Spring Boot学习备忘

Spring Boot学习备忘

Spring Boot简化了基于Spring的应用开发,只需要“run”就能创建一个独立的,产品级别的Spring应用。工作即将使用到Spring Boot,这里将自学Spring Boot的一些操作经验记录一下。

Spring Boot Cli

创建第一个Spring Boot应用有多种方式,我这里选用最简单的Spring Boot Cli方案。

安装Spring Boot Cli

我是使用macOS系统的,已经安装了Java8、maven、OSX Homebrew,安装Spring Cli就变得很简单了。

brew tap pivotal/tap
brew install springboot
spring version #验证安装的Spring Boot版本

使用Spring Boot Cli

验证Spring Boot Cli是否可正常工作也比较简单,先写一个app.groovy, 内容如下:

@RestController
class ThisWillActuallyRun {

    @RequestMapping("/")
    String home() {
        "Hello World!"
    }

}

然后执行下面的命令:

1

spring run app.groovy

最后请求测试一下:

1

curl http://127.0.0.1:8080

使用Spring Boot Cli创建工程:

spring init --groupId=personal.jeremyxu --artifactId=springboottest --name=springboottest --description="Spring Boot Test Project" --dependencies=web
mkdir springboottest
unzip springboottest.zip -d springboottest

spring init执行时可以有不少参数,可以通过执行spring init --list命令来查看,详细文档可以参看这里

工程创建后,简单地添加一个测试Controller,如下:

package personal.jeremyxu.springboottest.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by jeremy on 2017/9/10.
 */
@RestController
public class GreetingController {

    @RequestMapping(value = "/")
    public String sayHello(){
        return "Hello World!";
    }
}

再在SpringboottestApplication里加上@EnableAutoConfiguration,然后便可运行Spring Boot应用了:

cd springboottest
spring run .

还是通过命令测试一下:

1

curl http://127.0.0.1:8080

代码写完后,执行下面的命令打包:

cd springboottest

mkdir -p ./target

spring jar ./target/springboottest.jar .

后面执行下面的命令就可以简单将工程运行起来了:

1

java -jar ./target/springboottest.jar

编写测试用例

以前写代码时不怎么关注测试用例,其实测试用例还是很重要的,这里将上面的小例子补上测试用例,测试用例的写法可以参考这里

SpringboottestApplicationTests.java

import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.rule.OutputCapture;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SpringboottestApplicationTests {

	private static final String SPRING_STARTUP = "root of context hierarchy";

	@Rule
	public OutputCapture outputCapture = new OutputCapture();

	@Test
	public void contextLoads() {
		SpringboottestApplication.main(getArgs());
		Assert.assertTrue(getOutput().contains(SPRING_STARTUP));
	}

	private String[] getArgs(String... args) {
		List<String> list = new ArrayList<>(Arrays.asList(
				"--spring.main.webEnvironment=false", "--spring.main.showBanner=OFF",
				"--spring.main.registerShutdownHook=false"));
		if (args.length > 0) {
			list.add("--spring.main.sources="
					+ StringUtils.arrayToCommaDelimitedString(args));
		}
		return list.toArray(new String[list.size()]);
	}

	private String getOutput() {
		return this.outputCapture.toString();
	}

}

GreetingControllerTests.java

import org.hamcrest.Matchers;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;


/**
 * Created by jeremy on 2017/9/10.
 */
@RunWith(SpringRunner.class)
@WebMvcTest(GreetingController.class)
public class GreetingControllerTests {

    @Autowired
    private MockMvc mvc;

    @Test
    public void sayHello() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/sayHello")
                .accept(MediaType.TEXT_PLAIN))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content().string(Matchers.equalTo("Hello World!")));
    }
}

在IDEA里选中工程包,然后Run 'Tests in …' with Coverage, 然后就可以看到源代码的测试代码覆盖率为100%了,perfect!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏DeveWork

TGM Plugin Activation:为WordPress 主题添加“插件推荐安装”功能

TGM Plugin Activation 是一个php库,通过TGM Plugin Activation 可以很方便的在你开发的主题上集成“插件推荐安装”功能...

2395
来自专栏Netkiller

DevOps Tools

DevOps Tools OS Software Configure Managment Install Ubuntu $ cd /usr/local/src/...

3574
来自专栏后台及大数据开发

CentOS下 elasticsearch集群安装

4.修改/root/elasticsearch-node3/config/elasticsearch.yml 为如下内容(注意红色部分为三个节点不一致的地方)

1063
来自专栏pangguoming

NodeJS 各websocket框架性能分析

For a current project at WhoScored, I needed to learn JavaScript, Node.js and We...

1.3K5
来自专栏颇忒脱的技术博客

Spring MVC异步处理简介

本文讲到的所有特性皆是基于Servlet 3.0 Async Processing的,不是基于Servlet 3.1 Async IO的。

3143
来自专栏用户2442861的专栏

CMake使用总结

CMake意为cross-platform make,可用于管理c/c++工程。CMake解析配置文件CMakeLists.txt生成Makefile,相比直...

1121
来自专栏陈满iOS

CocoaPods与Ruby安装,配置,及使用详细记录(Mac环境)

附:笔者介绍另一种导入第三方库工具Carthage的文章,可以另外点击进入查看http://www.jianshu.com/p/1de99aeedbf6

1293
来自专栏名山丶深处

springboot集成redis(mybatis、分布式session)

2018
来自专栏潇涧技术专栏

Android NDK and OpenCV development with Android Studio

Android NDK and OpenCV development with Android Studio

932
来自专栏JAVA后端开发

spring boot2集成activiti6的问题记录

经查,是因为我用mybatis plus,要求用mybatis3.4.6,而activiti用的是mybatis3.4.2,两边有冲突,直接排除activiti...

1.1K3

扫码关注云+社区

领取腾讯云代金券