SpringBoot概述
spring springmvc springboot的关系
- spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc。
- spring mvc 是只是spring 处理web层请求的一个模块。
因此他们的关系大概就是这样:
spring mvc < spring < springboot
Spring Boot
Spring Boot对Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。
Spring 的缺点:配置繁重
简介
- 简化spring应用开发的框架
- 整个spring技术栈的整合
- J2EE 一站式解决方案
微服务
- 单体服务(
all in one
)- 一个项目包含所有功能的应用程序
- 微服务
- 微服务是一种系统架构的设计风格,主旨是将原本复杂的系统拆分成多个独立的小型服务,每个服务维护自身的业务逻辑、数据处理和部署,服务与服务之间通过简单的通信协议进行通信 (比如留下的 restful API),不要求每一个微服务使用同一种变成语言编写。
- 现代开发模式正在由单体服务转向微服务这种开发模式
- Java 微服务框架普遍使用Spring Cloud,微服务将系统拆分成多个小型服务,它就是基于 Spring Boot做的。
springboot的优点
- 为基于Spring的开发提供更快的入门体验
- 开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求
- 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等
- Spring Boot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式
核心功能
-
起步依赖
-
起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。
-
简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
-
-
自动配置
- Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。
SpringBoot搭建
使用IDEA快速搭建 Spring Boot项目
- 创建一个空项目【相当于 eclipse 里面的工作空间】
- 项目里面添加一个
Module
选择Spring Initializr
- 设置
GAV
坐标和pom
配置信息 - 选择 版本和依赖
- 创建完成 等待导入依赖
注意:新创建的类一定要位于 …Application同级目录或者下级目录,否则 SpringBoot 加载不到。
入门案例研究
项目结构
- static:存放静态资源 如css,js,图片等
- templates:存放 web 页面的模板
- application.properties、application.yml 存放依赖模块的配置信息 默认空 如 spring、springmvc、mybatis、redis等
- .mvn|mvnw|mvnw.cmd:使用脚本操作执行 maven 相关命令,可删除
- .gitignore:使用版本控制工具 git 的时候,设置一些忽略提交的内容,可删除
- …Application.java:SpringBoot 程序执行的入口,执行该程序中的 main 方法
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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!--该POM继承了SpringBoot 框架的一个父项目spring-boot-starter-parent,所有自己开发的 Spring Boot 都必须的继承spring-boot-starter-parent。父工程的作用是统管理Spring Boot应用里面的所有依赖版本以后我们导入依赖默认是不需要写版本
--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.1</version><relativePath/> <!-- lookup parent from repository --></parent><!--当前项目的 GAV 坐标--><groupId>com.eshop</groupId><artifactId>eshop-th</artifactId><version>0.0.1-SNAPSHOT</version><!--maven 项目名称,可以删除--><name>eshop-th</name><!--maven 项目描述,可以删除--><description>eshop-th</description><!--maven 属性配置,可以在其它地方通过${}方式进行引用--><properties><java.version>11</java.version></properties><dependencies><!-- thymeleaf模板引擎依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!--SpringBoot 框架 web 项目起步依赖,通过该依赖自动关联其它依赖,不需要我们一个一个去添加jar包了。--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--SpringBoot 框架的测试起步依赖,例如:junit 测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- mybatis + mysql --><!--MyBatis 整合 SpringBoot 的起步依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.0</version></dependency><!--MySQL 的驱动依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies><build><!--SpringBoot 提供的打包编译等插件这个插件,可以将应用打包成一个可执行的jar包将这个应用打成jar包,直接使用java -jar的命令进行执行;--><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><resources><!-- 配置 mapper文件的路径 加载到资源 --><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources></build>
</project>
-
父项目:统一管理 jar 包的版本
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.1</version><relativePath/> <!-- lookup parent from repository --> </parent> 直接点进去,他的父项目是: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.6.1</version> </parent>
以后我们导入依赖默认是不需要写版本;(没有在
dependencies
里面管理的依赖还是需要声明版本号的)
-
启动器:导入依赖的 jar 包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency>
- spring-boot-starter是spring-boot启动器,spring‐boot‐starter‐web帮我们导入了web模块 正常运行所依赖的jar包;
- Spring Boot将所有的功能都抽取出来,做成一个个的starters(启动器),只需要在项目里面 引入这些starter 相关功能的所有依赖都会导入进来。要用什么功能就导入什么功能的启动器
主程序类,主入口类
package com.eshop;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class EshopThApplication {public static void main(String[] args) {SpringApplication.run(EshopThApplication.class, args);}
}
- @SpringBootApplication注解标注在某个类上,说明这个类是SpringBoot的主配置类, SpringBoot 就应该运行这个类的main方法来启动SpringBoot应用;
- 将主配置类(@SpringBootApplication标注的类)所在包及下面所有子包里面的所有组件扫描到 Spring容器
配置文件、加载顺序
开启配置文件注释
<!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐configuration‐processor</artifactId><optional>true</optional>
</dependency>
配置文件和加载顺序
-
默认的:
application.properties
,初始里面是空的-
后面的
application-dev.properties
:另一个配置文件 在默认文件开启使用 -
# 服务端口 #server.port=9091 # 开启 dev 的这个配置文件 spring.profiles.active=dev
-
-
yml格式的
-
这是一种新兴的格式 注意空格 使用和上面默认的差不多 但是默认的优先级高于这个
-
spring:datasource:url: jdbc:mysql://localhost:3306/boot_crm?serverTimezone=UTCusername: rootpassword: 123driver-class-name: com.mysql.cj.jdbc.Driver
-
-
多环境配置
-
在主文件激活
激活开发环境 #spring.profiles.active=dev #激活生产环境 #spring.profiles.active=product #激活测试环境 spring.profiles.active=test
-
其它文件的命名方式
-
日志框架、日志配置
#spring.profiles.active=product
#激活测试环境
spring.profiles.active=test
```
-
其它文件的命名方式