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