zoukankan      html  css  js  c++  java
  • Spring Boot入门

    一、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:用来修改默认的配置信息。

  • 相关阅读:
    C++ tinyXml直接解析XML字符串
    留言板小程序开发笔记3
    如何去除 gvim 的 acp和 "option omnifunc is not set" 的问题
    如何修改bootstrap模态框的backdrop蒙版区域的颜色?
    Windows下卸载软件时提示 等待先前的卸载完成? 终止 dllhost.exe 进程
    thinkphp中的__DIR__ __ROOT__ __APP__ __MODULE__ APP_PATH LIB_PATH MODULE_PATH 等是在哪里定义的?
    thinkphp中的Ueditor的使用, 以及如何传递编辑器内容到后台?
    留言板小程序开发笔记2
    分页器的js实现代码 bootstrap Paginator.js
    windows的gvim总是报错: +iconv fencview.vim
  • 原文地址:https://www.cnblogs.com/huoyz/p/14381361.html
Copyright © 2011-2022 走看看