SpringBoot简介
Java开发的劣势
- 开发的复杂度高;
- 使用Maven开发,需要管理一堆的Maven的配置依赖库;
- Rest 技术已经开始在行业之中广为流传,而 Java 要想实现 Rest 架构的开发(基于Spring),那么也是相当麻烦的;
- 现在行业之中,Spring 已经作为了绝对的 java 架构,但是如果要想在 Spring 之中整合 RabbitMQ、Kafka、ActiveMQ、MySQL、Druid、Redis、Shiro,需要编写一堆堆的*.xml 配置文件;
SpringBoot的出现为我们解决了上述的Java开发劣势,SpringBoot 的最终奉行的宗旨:简化复杂的程序开发,减少依赖的配置,废除掉所有的配置文件,让开发变得更简单纯粹,核心:“零配置”。
SpringBoot的HelloWorld程序
-
创建一个Maven工程。虽然SpringBoot是以WEB工程来运行的,但archetype只需选择quickstart即可。
springboot选择的archetype
- 按照官方给出的要求配置一个父pom即可
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
<groupId>cn.zgc</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<jdk.version>1.7</jdk.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<finalName>bootfirst</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${jdk.version}</source><!-- 源代码使用的开发版本 -->
<target>${jdk.version}</target><!-- 需要生成的目标class文件的编译版本 -->
<!--<encode>${project.build.sourceEncoding}</encode>-->
</configuration>
</plugin>
</plugins>
</build>
</project>
- 编写SpringBoot的启动类
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
@Controller
@EnableAutoConfiguration
public class SampleController {
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(SampleController.class, args);
}
}
@EnableAutoConfiguration注解的含义为,开启自动配置处理。这个注解告诉SpringBoot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration将假定你正在开发一个web应用并相应地对Spring进行设置。
- 启动访问
在Idea开发工具中,可以直接运行SampleController类。或者通过maven命令:spring-boot:run也可运行Springboot项目。运行起来之后在浏览器中可以直接访问服务

我们继续往工程中和SampletController类同一个包中再添加一个Controller类,代码如下:
package cn.zgc.springboot.basic;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HomeController {
@RequestMapping("/home")
@ResponseBody
public String home(){
return "home page";
}
}
访问http://127.0.0.1:8080/index时,却出现如下页面

出现这种情况,是由于HomeController没有被Spring容器加载所导致,可以通过配置Spring的包扫描路径来解决这个问题,我们在启动类SampleController中加入@ComponentScan注解即可。
@EnableAutoConfiguration
@ComponentScan("cn.zgc.springboot.basic")
public class SampleController {
另外为了简化,SpringBoot提供了@SpringBootApplication,它是个复合注解,内部已经包含@EnableAutoConfiguration和@ComponentScan。@SpringBootApplication默认的包扫描路径为当前启动类的包。所以
Spring官方建议:为了开发的方便,所有的程序类一定要在启动类所在包的子包下。
使用自己的父POM
在HelloWorld的例子中,我们看到要开发SpringBoot程序需要让工程的pom继承spring-boot-starter-parent。在实际开发中,一般是要继承自己的父pom的,这时候该如何处理呢?
首先在我们自己的父pom.xml文件中加入如下配置
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
然后子模块只要继承自己的父POM,同样也能为我们引入SpringBoot功能。
Restful访问路径
Restful风格的API
- GET /product:列出所有商品
- POST /product:新建一个商品
- GET /product/ID:获取某个指定商品的信息
- PUT /product/ID:更新某个指定商品的信息
- DELETE /product/ID:删除某个商品
- GET /product/ID/purchase :列出某个指定商品的所有投资者
- get /product/ID/purchase/ID:获取某个指定商品的指定投资者信息
SpringBoot提供了@RestController注解,它是一个复合注解,相当于@Controller加@ResponseBody。如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器将不起作用,返回的内容就是return里的内容。
@RestController
public class HomeController {
@RequestMapping("/home")
public String home(){
return "home page";
}
}
使用内置对象
在 SpringBoot 中的控制器的形式和 SpringMVC 是一样的,所以如果现在要想在你的程序之中去使用 JSP 的内置对象,那么也可以按照与 SpringMVC 同样的方式进行。
@RequestMapping("/home")
public String home(HttpServletRequest request, HttpServletResponse response){
System.out.println(request.getMethod());
System.out.println(response.getCharacterEncoding());
return "home page";
}
SpringBoot代码测试
在pom.xml文件中加入相关的依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
测试类
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = SampleController.class)
public class TestSampleController {
@Autowired
private SampleController sampleController;
@Test
public void testHome(){
Assert.assertEquals(sampleController.home(),"Hello World!");
}
}
打包发布
SpringBoot 作为微架构实现主要技术,其发布项目的方式极为简单,只需要你在你的项目中配置好插件,以及打包就可以执行了,并且这个执行不需要特别复杂的配置。
在父POM文件中加入打包插件
<plugin> <!-- 该插件的主要功能是进行项目的打包发布处理 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration> <!-- 设置程序执行的主类 -->
<mainClass>cn.zgc.springboot.basic.StartSpringBootMain</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
对需要打包的项目模块进行打包处理:clean package,打出来的是个可执行的jar包,直接运行java -jar xxx.jar就能启动SpringBoot服务。