1. spring boot 可以使你通过很小的前期配置尽可能快的启动和运行项目,spring boot用自己的观点来创建产品已有的应用
2. 启动:
使用spring boot创建一个应用:
本指南提供了spring boot如何帮助你加快和促进应用的开发。和你看过的其他启动指南一样,在本指南中你会看到更多spring boot的使用案例。
意味着给你一个更快的spring boot体验。如果你想要创建自己的spring boot项目,访问Spring Initializr,填写你的详细项目信息,选择你的
选项,你可以下载maven构建文件,或将一个打包的项目作为zip文件下载。
你将要创建什么:
你将要使用spring boot创建一个简单的web应用并给他添加一些有用的而服务。
你需要什么:
大约15分钟
一个喜爱的文本编辑器或集成开发环境
1.8或以上JDK
Gradle 4+ 或 Maven 3.2+
你也可以直接将代码导入你的集成开发环境:
Spring Tool Suite (STS)
IntelliJ IDEA
如何完成这次引导:
和其他的spring启动指南一样,你可以从头开始一步步的完成也可以跳过已经熟悉的基本步骤。无论以那种方式,最终都是使代码正常运行。
如果从头开始,请移步到Build with Gradle.
如果要跳过基础操作,执行以下步骤:
下载和解压本指南的源码库,或使用git下载:
git clone https://github.com/spring-guides/gs-spring-boot.git
切换进入gs-spring-boot/initial
向前跳到[initial].
如果你已经完成以上步骤,请将你的操作结果与gs-spring-boot/complete中的代码进行对比。
使用maven创建:
你首先要设置一个基本构建脚本。你可以使用任何你喜欢的构建系统来构建spring应用,但是你要运行的代码必须包含maven。如果你不熟悉maven,
可以参考Building Java Projects with Maven。
创建目录结构:
src
|-main
|-java
|-hello
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-spring-boot</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
spring boot maven插件-spring-boot-maven-plugin提供了许多方便的特性:
它集合了类路径中所有jar,创建了一个单一的可运行的"über-jar",使得你的服务更方便的执行和传输。
它查找public static void main()方法作为启动类
它提供了一个内置依赖解析器来设置与spring boot的依赖相匹配的版本号。无论你覆盖你想要的任何版本,都会被重置为为Boot选择的默认
版本设置。
使用ide创建:
直接去Spring Tool Suite获取如何直接导入guide项目
从IntelliJ IDEA中获取如何运行guide项目
学习你可以用spring boot干什么:
spring boot提供了一种快速创建应用的方式。他会查看你的类路径和你已经配置的bean,并对你缺少的内容作出合理的假设,并添加它。使用
spring boot您可以更多的关注业务特性,而较少的关注基础设施。
例如:
spring mvc中对于你总是用到的一些特定的bean,spring boot会自动添加。一个Spring MVC需要servlet容器,spring boot会自动配置嵌入式
comcat
如果你需要jetty而不是tomcat,spring boot会自动嵌入jetty。
Thymeleaf?一些必须总是添加到上下文中的bean,spring boot会自动为您添加。
这些只是spring boot提供自动配置的几个例子。与此同时,spring boot不会影响你的操作。例如,如果Thymeleaf在你的路径下,spring boot会自动的在你的应用上下文中提供一个SpringTemplateEngine。如果你用自己的配置文件定义了自己的SpringTemplateEngine,spring boot就不会再添加了。这可以使你在你的角色上付出很少的努力。
spring boot不会生成代码或编辑你的文件。相反,当你启动应用时,spring boot会动态的的连接bean和设置,并将它们应用到你应用程序的上下文中。
创建一个简单的web应用:
现在你可以为一个简单的web应用创建一个web控制器。
package hello;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
@RestController
public class HelloController {
@RequestMapping("/")
public String index() {
return "Greetings from Spring Boot!";
}
}
这个类被标记为@RestController,意味着它已经准备好被spring mvc使用来处理web请求。@RequestMapping映射“/”到index()方法。当从浏览器或命令行的curl调用index()方法时,该方法会返回纯文本。
那是因为@RestController结合了@Controller和@ResponseBody,这两个注解会导致web请求返回数据而不是视图。
创建一个应用类:
在这里你用组件创建一个应用类:
package hello;
import java.util.Arrays;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return 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);
}
};
}
}
@SpringBootApplication是一个方便的添加了以下所有内容的注解:
@Configuration标记本类作为应用上下文bean定义的来源
@EnableAutoConfiguration告诉spring boot开始基于类路径,其他bean和各种属性设置添加bean。
通常你会为spring mvc应用添加@EnableWebMvc,但是spring boot在类路径中看到spring-webmvc时就会将它自动添加上。
会把应用程序标记为web应用,并激活诸如设置DispatcherServlet之类的关键行为。
@ComponentScan告诉spring去寻找hello包中的其他组件、配置和服务,让他能够找到控制器。
main()方法通过使用spring boot的SpringApplication.run()方法启动应用,你有没有注意到其中一行xml代码都没有?也没有web.xml文件。这个web应用是100%纯java,您不需要处理任何管道和基础设施的配置。
这里也有一个标记为@Bean的CommandLineRunner方法在启动时运行。它会检查所有的你的应用创建的或是spring boot创建的bean,给他们排序并打印出来。
运行应用:
如果你使用maven,运行:mvn package && java -jar target/gs-spring-boot-0.1.0.jar
从输出中你会清晰的看到org.springframework.boot.autoconfigure这个bean
也会看到tomcatEmbeddedServletContainerFactory。
检验服务:
$ curl localhost:8080
Greetings from Spring Boot!
添加单元测试:
您希望为您添加的端点添加一个测试,spring测试已经提供了一些机制,可以很容易的包含到您的项目中。
如果你使用maven,将以下内容添加到依赖列表中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
现在写一个简单的单元测试,通过你的终端模拟sevlet的请求和响应:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void getHello() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("Greetings from Spring Boot!")));
}
}
MockMvc来自于Spring Test,并且允许你通过一组建造者类对DispatcherServlet发送HTTP请求并对结果进行断言。
@AutoConfigureMockMvc和@SpringBootTest结合在一起注入一个MockMvc实例。我们使用@SpringBootTest创建整个应用上下文。
另一种方法是使用@WebMvcTest告诉spring boot只创建上下文的web层。spring boot在任何情况下都能够自动定位主应用程序,
但是如果你想要创建一些不同的应用,你可以覆盖或缩减它。
和模拟http请求一样,我们可以使用spring boot写一个简单的全栈集成测试。例如,我们可以这样做:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class HelloControllerIT {
@LocalServerPort
private int port;
private URL base;
@Autowired
private TestRestTemplate template;
@Before
public void setUp() throws Exception {
this.base = new URL("http://localhost:" + port + "/");
}
@Test
public void getHello() throws Exception {
ResponseEntity<String> response = template.getForEntity(base.toString(),
String.class);
assertThat(response.getBody(), equalTo("Greetings from Spring Boot!"));
}
}
这个嵌入式服务器借助webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT在随机端口上启动,
使用@LocalServerPort来获取实际端口号。
添加工业级服务:
如果您正在为您的业务创建一个网站,您可能需要添加一些管理服务。spring boot通过actuator module模块提供了一些开箱即用的
功能,如健康,审计,beans等。
如果你使用maven,将以下内容加入到依赖中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
如果你使用maven,执行以下命令:
mvn package && java -jar target/gs-spring-boot-0.1.0.jar
你会看到一组新的RESTful终端加入到了应用中,这是spring boot提供的管理服务。
他们包括 errors, actuator/health, actuator/info, actuator.
同样有一个/actuator/shutdown终端,但是它只通过JMX可见。在你的application.properties文件中增加management.endpoints.shutdown.enabled=true,可以使它作为一个http终端使用。
很容易就可以检测应用的健康情况:
$ curl localhost:8080/actuator/health
{"status":"UP"}
你可以尝试通过curl调用shutdown方法:
$ curl -X POST localhost:8080/actuator/shutdown
{"timestamp":1401820343710,"error":"Method Not Allowed","status":405,"message":"Request method 'POST' not supported"}
由于我们没有开启此功能,所以请求会因为不存在而阻塞。
要想知道更多REST终端的详细信息以及终端在application.properties文件中的参数配置,你可以详细的阅读docs about the endpoints。
查看spring boot的启动项:
你已经看到了一下spring boot的启动项,你可以在 here in source code.中查看spring boot的所有启动项。
JAR支持和Groovy支持:
最后的例子展示spring boot如何将您没有意识到但是您需要的bean连接起来。展示如何启动方便的管理服务。
但是spring boot做的更多。它不仅支持war文件的部署,还通过加载器模型很容易的将可执行的jar包组合在一起。以下演示了对
spring-boot-gradle-plugin和spring-boot-maven-plugin的双重支持:
以下是groovy代码。。。不使用,不翻译
总结:
恭喜!你使用spring boot创建了一个简单的应用并且学会了如何使用spring boot加快你的开发步伐。你也开启了一些有帮助的产品服务。
这只是spring boot的一小部分样例。如果你想要挖掘的更深可以参考 Spring Boot’s online docs。