spring boot(一)入门

spring boot(一)入门

1、简介

一、微服务的概念

提及spring boot,咱们不得不说一下“微服务”一词的兴起,微服务一词最先起源于2014年,martin fowler发表的一篇文章Microservices,martin fowler在文中这样描述了微服务的概念。java

In short, the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API.web

简而言之,微服务就是一种架构风格,即服务微化,一个服务应该是一组小型服务;服务之间经过HTTP的方式进行互通,相较于传统的ALL IN ONE单体架构方式,微服务将每个功能元素最终都是一个可独立替换和独立升级的软件单元。spring

二、什么是spring boot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员再也不须要定义样板化的配置。经过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者 ——百度百科shell

众所周知,最流行的、最受Java开发者喜爱的框架当属Spring,Spring也成为了在Java EE开发中真正意义上的标准,可是随着新技术的发展随着新技术的发展,在这个脚本语言大行其道的时代(Node JS,Ruby,Groovy,Scala等),Java EE使用Spring逐渐变得笨重起来,大量的XML文件存在于项目中,繁琐的整合配置,复杂的监控,低下的开发效率和部署效率等等问题。spring boot的出现解决了上述的问题,让咱们更加高效快速的使用spring框架。api

  1. 习惯优于配置的原则,默认的配置已经知足咱们平常开发的大部分要求。
  2. 快速搭建组合各个模块功能的提供,无需配置的整合第三方框架。
  3. 零XML配置,只须要自动配置和Java Config。
  4. 内嵌Servlet容器,下降环境的要求,更快更多方式的启动项目的方式。
  5. 更便捷的应用状态监控。
  6. 与云计算spring cloud组成J2EE一站式解决方案。

三、快速入门

3.1 环境及工具

  • jdk1.8:Spring Boot 推荐jdk1.7及以上;咱们使用java version "1.8.0_152"。
  • 目前最新的springboot,spring boot 2.1.0 BUILD-SNAPSHAT 要求Java 8 or 9Spring Framework 5.1.0.BUILD-SNAPSHOT 以上。
  • IntelliJIDEA2018:我使用的是 IntelliJ IDEA 2018.1.3 x6四、STS。
  • SpringBoot : 使用1.5.10.RELEASE。

3.2 Maven设置

给maven 的settings.xml配置文件的profiles标签添加指定jdk版本数组

<profile>
  <id>jdk‐1.8</id>
  <activation>
    <activeByDefault>true</activeByDefault>
    <jdk>1.8</jdk>
  </activation>
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
  </properties>
</profile>

3.3 IDEA设置

3.4 Hello World

建立一个maven工程(jar工程)浏览器

pom.xml中导入spring boot的依赖,根据官方文档的快速开始,引入一下依赖:springboot

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.10.RELEASE</version>
</parent>

    <!-- Additional lines to be added here... -->

    <!-- (you don't need this if you are using a .RELEASE version) -->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>https://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>https://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>

Spring Boot提供了许多“Starters”,能够将jar添加到类路径中,spring-boot-starter-parent是一个特殊的启动器,提供有用的Maven默认值,其余“Starters”提供了在开发特定类型的应用程序时可能须要的依赖项。因为咱们正在开发Web应用程序,所以咱们添加了 spring-boot-starter-web依赖项。在此以前,咱们能够经过运行如下命令来查看当前的内容服务器

$ mvn dependency:tree 

[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

也能够在idea中 使用ctrl+alt+shift+u 查看依赖图以下:

能够看到它spring-boot-starter-parent自己不提供依赖关系。要添加必要的依赖项,请编辑pom.xmlspring-boot-starter-web在该parent部分的正下方添加 依赖项:

<dependencies> 
    <dependency> 
        <groupId> org.springframework.boot </ groupId> 
        <artifactId> spring-boot-starter-web </ artifactId> 
    </ dependency> 
</ dependencies>

再次查看依赖图:以下

3.5 编写主程序启动应用

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @program: springboot-01-HelloWorrld
 *
 * @description: springboot主程序类
 *
 * @author: cxw
 *
 * @create: 2018-09-07 14:34
 **/
 //springmvc的注解,提供web服务,接收浏览器请求并,向浏览器响应等同 @controller和@responseBody注解
@RestController
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  1. @RestController@requestmapping注解是Spring MVC注解。(它们不是特定于Spring引导的。)有关更多细节, 请参阅Spring参考文档中的MVC部分。
  2. 第二个注解@EnableAutoConfiguration,这个注解告诉springboot,让它猜想你想基于你添加的jar依赖去如何配置spring,因为Spring boot-starer-web添加了Tomcat和Spring MVC,因此自动配置会假设您正在开发一个web应用程序并帮您相应地设置Spring。
  3. 应用程序的最后一部分是main方法。这只是一个标准的方法,它遵循Java约定的应用程序入口点。咱们的main方法经过调用run来委托Spring Boot的SpringApplication类。SpringApplication引导咱们的应用程序,启动Spring,而后启动自动配置的Tomcat web服务器。咱们须要Application类做为运行方法的一个参数,用来告诉SpringApplication,它是主要的Spring组件。args数组命令行参数也做为参数传递给SpringApplication。

3.6 编写controller响应浏览器请求

/**
      * home方法 向浏览器响应 Hello World
      */
    @RequestMapping("/hello")
    public String home(){
        return "Hello World";
    }

3.7 运行main方法,启动程序

浏览器访问localhost:8080/hello

能够看到,咱们第一个spring boot项目已经启动了。另外咱们看到,这里Applicationjava被配置为自动配置的控制器,并且对于@EnableAutoConfiguration注解咱们使用不熟悉,很容易忘记在控制层添加注解,其实spring boot 是可使用一个主程序启动spring bot项目,而后咱们按照咱们传统的controller,service,dao三层编写咱们的程序,咱们改进一下项目以下:

  1. 首先springboot的主程序入口:

    //@SpringBootApplication 来标注一个主程序类,
    //说明这是一个Spring Boot应用
    @SpringBootApplication 
    public class Application {
      public static void main(String[] args) {
          SpringApplication.run(Application.class, args);
      }
    }
    1. 咱们定义两个Controller控制层HelloController和HomeController,按照springmvc的方式,接收请求,返回响应。

      package cn.news.chen.controller;/**
       * Project springboot-01-HelloWorrld
       * User cxw
       * Date 2018/9/7
       * Time 16:08
       * Description:
       */
      
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.ResponseBody;
      
      /**
       * @program: springboot-01-HelloWorrld
       *
       * @description: springboot控制层
       *
       * @author: cxw
       *
       * @create: 2018-09-07 16:08
       **/
      @Controller
      @RequestMapping("/a")
      public class HomeController {
          @RequestMapping("/b")
          @ResponseBody
          public String hello(){
              return "这是个人第一个spring boot应用";
          }
      }
      1. 启动访问:

    HelloController.java

    package cn.news.chen.controller;/**
     * Project springboot-01-HelloWorrld
     * User cxw
     * Date 2018/9/7
     * Time 16:39
     * Description:
     */
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    /**
     * @program: springboot-01-HelloWorrld
     *
     * @description: 控制层HelloController
     *
     * @author: cxw
     *
     * @create: 2018-09-07 16:39
     **/
    //@RestController和这个注解都是类级别的,使用@RestController说明该类下的全部方法都是向浏览器
    //响应
    @Controller 
    public class HelloController {
        /**
         * home方法 向浏览器响应 Hello World
         */
        @RequestMapping("/hello")
        @ResponseBody
        public String home(){
            return "Hello World";
        }
    }

    启动访问:

注意:若是按照`@SpringBootApplication`主程序的方式使用springboot,类Application.java 要在须要控制的springboot 组件的顶级包或者同一级的包下,才能使用主程序类启动spring boot程序,springboot建议的目录结构以下:
 
  com
    +- myproject
      +- demo
        +- Application.java
        |
        +- domain
        |  +- User.java
        |  +- UserRepository.java
        |
        +- service
        |  +- UserService.java
        |
        +- controller
        |  +- UserController.java
        |

  一、Application.java 建议放到根目录下面,主要用于作一些框架配置。

  二、domain目录主要用于实体(Entity)与数据访问层(Repository)。

  三、service 层主要是业务逻辑层。

  四、controller 负责页面访问控制。

4.springboot的快捷部署

首先,咱们要在pom.xml文件中添加spring boot的打包(jar)插件,官网文档中,给咱们指出了使用的依赖,如图:

pom.xml添加以下内容:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

而后,咱们使用maven将咱们的spring boot项目打包

能够看到在咱们项目的target目录下,已经打包成功了。咱们使用jar包启动的方式,启动一下咱们的springboot项目。

使用java -jar 的方式依然能够启动咱们的springboot项目,而且能够正常访问,由此能够看到咱们的springboot 使用嵌入式的Servlet容器,应用无需打成WAR包, starters自动依赖与版本控制,大量的自动配置,简化开发,真正作到了 J2EE一站式解决方案。

相关文章
相关标签/搜索