首页 > 技术文章 > Spring Boot入门

l-y-h 原文

一、Spring Boot

1、什么是Spring Boot?

  Spring Boot 是一个框架,其用来简化 Spring 应用的初始化搭建以及开发过程。其使用特定的方式来配置,使开发人员减少配置操作。类似于 maven 整合 jar 包,Spring Boot 整合了框架。
  官网:https://spring.io/projects/spring-boot/

2、未使用 Spring Boot 时配置一个 Spring Web 项目的操作

(1)配置 web.xml 文件,加载 Spring,Spring MVC(未使用 maven 时,还要手动导入 jar 包)。
(2)配置数据库连接。
(3)开启注解。
(4)........
(5)部署到 Tomcat 容器中进行调试。
 使用了SpringBoot后,你将体会到什么叫日了狗了,真他喵的简单。

3、单体应用与微服务

(1)单体应用:
  指的是一个单体应用程序,将其所有的功能放在一个进程中处理,在服务器上复制这个单体进行扩展。简单的讲就是将所有的功能模块都使用一个项目来处理,然后打成war包,发布到服务器上(在不同的服务器上部署同样的程序,从而提高并发能力)。
注意:可能修改某个部分时,使得整个程序需要重新部署才行,是一个牵一发而动全身的问题。

(2)微服务:(属于一种架构风格)
  微服务架构是将每一个功能模块分别放进到一个独立的服务中,并且通过跨服务器分发这些服务进行扩展,只在有需要时才复制。一个应用应该是一组小型服务,可以通过HTTP的方式来互通。
注意:修改某部分时,只需要重新部署修改的功能模块那个微服务即可。每一个功能模块都是可独立替换和独立维护的软件单元,完全体现了高可复用性,高可维护性,高可扩展性。

4、Spring与微服务

(1)Spring Boot可以快速构建一个应用。
  简化Spring应用和服务的创建、开发与部署,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用的微服务功能,可以和spring cloud联合部署。核心思想是约定大于配置,应用只需要很少的配置即可,简化了应用开发模式。

(2)Spring Cloud在分布式中建立连接。
  是一套完整的微服务解决方案,是一系列不同功能的微服务框架的集合。Spring Cloud基于Spring Boot,简化了分布式系统的开发,集成了服务发现、配置管理、消息总线、负载均衡、断路器、数据监控等各种服务治理能力。比如sleuth提供了全链路追踪能力,Netflix套件提供了hystrix熔断器、zuul网关等众多的治理组件。config组件提供了动态配置能力,bus组件支持使用RabbitMQ、kafka、Activemq等消息队列,实现分布式服务之间的事件通信。

(3)Spring Cloud Date Flow处理数据。

二、使用IDEA构建一个SpringBoot

1、方法1:

  step1:进入网址:http://start.spring.io/
  step2:选择相关信息,如下图:

  step3:点击Generate the project, 可以下载项目压缩包.
  step4:解压项目后,使用IDEA导入。

File -> New -> Model from Existing Source.. -> 选择解压后的文件夹 -> OK,
选择 Maven 无脑 Next,OK done!(当然,根据需要,可以适当做些改变)

可能会出现错误的情况。原因是没有相关的依赖信息(jar包),等待后台联网下载即可。

2、方法2

  step1: 选择 File -> New —> Project… 弹出新建项目的框
  step2: 选择 Spring Initializr,Next 也会出现上述类似的配置界面,Idea 帮我们做了集成
  step3: 填写相关内容后,点击 Next 选择依赖的包再点击 Next,最后确定信息无误点击 Finish。

3、构建第一个Spring Boot程序(HelloWorld)

(1)构建启动Spring的主类

【HelloWorldApplication.java】
package com.test.application;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @SpringBootApplication 用于标注一个主程序类,说明其为一个SpringBoot应用
 */
@SpringBootApplication
public class HelloWorldApplication {
    public static void main(String[] args){
        // 用于启动一个Spring应用
        SpringApplication.run(HelloWorldApplication.class, args);
    }
}

(2)构建一个Controller类

package com.example.helloworld.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloWorldController {

    @ResponseBody
    @RequestMapping("/hello")
    public String show(){
        return "Hello World";
    }
}

(3)开启服务

(4)启动异常问题:
question1:
  出现 java.net.BindException: Address already in use. 异常。可能是端口被占用。

先查询是哪个进程占用了,若能直接杀死最好,不行的话,可以修改默认端口号(后续再介绍)。
  windows查询端口号以及进程:
    WIN + R 敲cmd打开命令行。
      输入:netstat -aon|findstr 端口号
      输出的是端口号以及其PID。
      输入:tasklist | findstr PID
      输出的是占用端口号的进程。
      输入:taskkill /f /t /im 进程名 (用于结束进程) 

question2:
  springboot启动后访问不到controller:
    当启动springboot时@SpringBootApplication注解会去自动扫描当前目录和其子目录,如果controller层不在子目录则扫描不到。所以将其配置到子目录中。

(5)测试路径:(至此,测试完成)

https://localhost:8080/hello

(6)创建可执行的jar文件。需要在pom.xml中添加插件信息(按上述两种方法新建的项目都自动配置了)。

【插件配置信息】
<!-- 将应用打包成一个可执行的jar包 -->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

【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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>helloworld</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>helloworld</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

</project>

将项目打包。

找到打包后的文件,拷贝到某个路径下,此处我拷贝到(E:JAVA)。
进入路径,并执行 java -jar 包名,即可启动Spring,通过浏览器可以访问。

(7)目录结构
  static:用于保存静态资源,比如css,html,image等。
  templates:保存模板页面,由于SpringBoot使用嵌入式的tomcat,不推荐使用JSP(使用jsp会失去springboot的一些特性),如果想写JSP,可以使用模板引擎(比如:freemarker, thymeleaf)。
  application.properties:用来修改默认的配置信息。

推荐阅读