微服务

SpringBoot简介

2018-03-11  本文已影响12人  Coding小聪

Java开发的劣势

  1. 开发的复杂度高;
  2. 使用Maven开发,需要管理一堆的Maven的配置依赖库;
  3. Rest 技术已经开始在行业之中广为流传,而 Java 要想实现 Rest 架构的开发(基于Spring),那么也是相当麻烦的;
  4. 现在行业之中,Spring 已经作为了绝对的 java 架构,但是如果要想在 Spring 之中整合 RabbitMQ、Kafka、ActiveMQ、MySQL、Druid、Redis、Shiro,需要编写一堆堆的*.xml 配置文件;

SpringBoot的出现为我们解决了上述的Java开发劣势,SpringBoot 的最终奉行的宗旨:简化复杂的程序开发,减少依赖的配置,废除掉所有的配置文件,让开发变得更简单纯粹,核心:“零配置”

SpringBoot的HelloWorld程序

基于官方的例子,https://projects.spring.io/spring-boot/

  1. 创建一个Maven工程。虽然SpringBoot是以WEB工程来运行的,但archetype只需选择quickstart即可。


    springboot选择的archetype
  2. 按照官方给出的要求配置一个父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>
  1. 编写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进行设置。

  1. 启动访问

在Idea开发工具中,可以直接运行SampleController类。或者通过maven命令:spring-boot:run也可运行Springboot项目。运行起来之后在浏览器中可以直接访问服务

访问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

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服务。

上一篇下一篇

猜你喜欢

热点阅读