我的SpringBoot学习笔记(基础篇)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 参照黑马的springboot视频跟学,手敲代码,浓缩精华,适合新手看

基础

官方网站:https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features

概述

SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程

优点

  • 自动配置(简化常用工程相关配置)
  • 配置过于繁琐,使用自动配置就可以做相应的简化,但是内部还是很复杂的,后面具体展开说。
  • 起步依赖(简化依赖配置)
  • 依赖配置的书写简化就是靠这个起步依赖达成的。
  • 辅助功能(内置服务器,......)

起步依赖

  • starter
  • SpringBoot中常见项目名称,定义了当前项目使用的所有项目坐标,以达到减少依赖配置的目的
  • parent
  • 所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的
  • spring-boot-starter-parent(2.5.0) 与 spring-boot-starter-parent (2.4.6) 共计57处坐标版本不同(提醒我们要注意究竟使用哪个版本的springboot)
  • 实际开发
  • 使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供
  • 如发生坐标错误,再指定version (要小心版本冲突)
  • 辅助功能
  • tomcat
  • 等等...
  • 启动方式
  • 在标注了@SpringBootApplication注解的类启动
  • springboot在创建项目时,采用jar的打包方式
  • springboot的引导类时项目的入口,运行main方法就可以启动项目
  • 使用maven依赖管理变更起步依赖项
  • 以tomcat更改为jetty为例
  • 在spring-boot-starter-web依赖里面排除tomcat依赖
<exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
  • 添加jetty服务器依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId></dependency>
  • Jetty比Tomcat更轻量级,可扩展性更强(相较于Tomcat),但超大型应用还是使用Tomcat比较好

基础配置

配置格式

  1. 修改服务器端口
  1. application.properties
server.port=80
  1. application.yml
server:  port: 81
  1. application.yaml
server:  port: 82
  1. 当这三个文件都同时配置了服务器端口配置时,springboot默认使用顺序为:properties > yml > yaml
  2. 不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留
  1. 设置控制台日志输出logging级别
logging:  level:    root: warn # 警告信息# root: info # 默认# root: debug # 全部信息
  1. yaml
  1. 是一种数据序列化格式
  2. 优点
  1. 容易阅读
  2. 容易与脚本语言交互
  3. 以数据为中心,重数据轻格式
  1. yaml文件扩展名
  1. yml (主流)
  2. yaml
  1. 数组格式
enterprise:  name: uncmin
  age: 1  phone: 10086  likes:    - mybatis
    - spring
    - springmvc

yaml数据读取

读取单一数据

  • 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名.三级属性名}

配置文件:

logging:  level:    root: warn # 警告信息enterprise:  name: uncmin
  age: 1  phone: 10086  likes:    - mybatis
    - spring
    - springmvc

模型类:

@Value("${enterprise.name}")
privateStringname;
@Value("${logging.level.root}")
privateStringlogLevel;
@Value("${enterprise.likes[2]}")
privateStringlikes_03;

读取全部数据

  • 获取数据使用 getProperties(String) 方法
//加载环境里的全部变量@AutowiredprivateEnvironmentenvironment;
@GetMapping("/{id}")
publicStringgetById(@PathVariableIntegerid){    
System.out.println(environment.getProperty("enterprise.name"));
System.out.println(environment.getProperty("logging.level.root"));
System.out.println(environment.getProperty("enterprise.likes[2]"));
return"{'module':'book-getById'}";
}

读取对象数据

  • 注解@ConfigurationProperties指定该对象加载哪一组yaml中配置的信息
  • 封装类需要定义为Spring管理的bean,否则无法进行属性注入
@Data@Component//让spring管理@ConfigurationProperties(prefix="enterprise") //配置哪个属性加载到实体类中publicclassEnterprise {
privateStringname;
privateIntegerage;
privateIntegerphone;
privateString[] likes;
}
//加载自定义的实体类的变量@AutowiredprivateEnterpriseenterprise;
@GetMapping("/{id}")
publicStringgetById(@PathVariableIntegerid){
System.out.println(enterprise);
return"{'module':'book-getById'}";
}

yaml文件中的数据引用

如果在书写yaml数据时,经常出现如下现象,比如很多个文件都具有相同的目录前缀

center:    dataDir: /usr/local/fire/data
    tmpDir: /usr/local/fire/tmp
    logDir: /usr/local/fire/log
    msgDir: /usr/local/fire/msgDir

或者

center:    dataDir: D:/usr/local/fire/data
    tmpDir: D:/usr/local/fire/tmp
    logDir: D:/usr/local/fire/log
    msgDir: D:/usr/local/fire/msgDir

这时可以使用引用格式来定义数据,其实就是搞了个变量名,然后引用变量,格式如下:

baseDir: /usr/local/fire
center:    dataDir: ${baseDir}/data
    tmpDir: ${baseDir}/tmp
    logDir: ${baseDir}/log
    msgDir: ${baseDir}/msgDir

注意事项:在书写字符串时,如果需要使用转义字符,需要将数据字符串使用双引号包裹起来

lesson: "Spring\tboot\nlesson"

多环境启动

  • 常用格式
# 启动指定环境spring:  profiles:    active: test
---# 生产环境spring:  profiles: pro
server:  port: 81---# 开发环境spring:  profiles: dev
server:  port: 80---# 测试环境spring:  profiles: test
server:  port: 82
  • properties多文件多环境启动

由于不常用,而且上传照片困难,暂时不演示

多环境启动命令格式

如果将程序打包交给测试人员启动,,测试人员需要更改环境配置,应该怎样操作?

  1. 先使用maven执行clean指令,再执行package指令,然后打开打包的文件所在位置在地址栏中输入cmd,回车
  2. 输入指令,(自动补全按tab键),回车
java -jar springboot-01-quickstart-0.0.1-SNAPSHOT.jar

ctrl+c 结束程序

  1. 测试人员更改配置
  • 换指定环境,输入指令
java -jar springboot-01-quickstart-0.0.1-SNAPSHOT.jar --spring.profiles.active=test
  • 更改临时端口号,输入指令
springboot-01-quickstart\target>java -jar springboot-01-quickstart-0.0.1-SNAPSHOT.jar --server.port=88
  • 可以同时添加以上指令!


多环境开发控制(maven和springboot配置类的兼容问题)

在测试时,如果maven和springboot同时配置了环境选择时,应按maven的配置为先!

下面演示maven控制版本,然后springboot加载maven中设置的版本

  1. maven中设置多环境属性
<profiles><!--开发环境--><profile><id>dev</id><properties><!--与springboot配置类里面的环境名对应上--><profile.active>dev</profile.active></properties></profile><!--生产环境--><profile><id>pro</id><properties><profile.active>pro</profile.active></properties><activation><!--设置为默认环境--><activeByDefault>true</activeByDefault></activation></profile><!--测试环境--><profile><id>test</id><properties><profile.active>test</profile.active></properties></profile></profiles>
  1. springboot中引用maven属性
spring:  profiles:# 加载maven中设置的版本    active: ${profile.active}---# 用来区分模块的# 生产环境spring:  profiles: pro
server:  port: 81---# 开发环境spring:  profiles: dev
server:  port: 80---# 测试环境spring:  profiles: test
server:  port: 82
  1. 执行maven打包命令
  1. 先执行一次clean指令
  2. 添加一个设置配置类能读取maven属性的插件
<!--设置配置类能读取maven属性的插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.2.0</version><configuration><encoding>utf-8</encoding><useDefaultDelimiters>true</useDefaultDelimiters></configuration></plugin>
  1. 处理资源导出问题
<!--在build中配置resources,来防止我们资源导出失败问题--><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.yml</include><include>**/*.yaml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.yml</include><include>**/*.yaml</include></includes><filtering>true</filtering></resource></resources>
  1. 执行package指令
  1. 在测试环境查看使用环境


配置文件分类

  • springboot中4种配置文件
  • 测试环境
  • 1级:target文件夹里面,config文件夹里的application.yml
  • 2级:target文件夹里的application.yml
  • 开发环境
  • 3级:resources文件夹里面,config文件夹里的application.yml
  • 4级:resources文件夹里的application.yml
  • 作用
  • 1级与2级留做系统打包后设置通用属性
  • 3级与4级用于系统开发阶段设置通用属性

整合第三方技术

SSM案例整合

步骤

  1. pom.xml
  1. 配置起步依赖
    在创建基于springboot的ssm工程时需要选上mysql,mybatis,springweb的依赖
  2. 必要的资源依赖
    druid,lombok等
  1. application.yml

server:

 port: 80

---

spring:

 datasource:

   driver-class-name: com.mysql.cj.jdbc.Driver

   url: jdbc:mysql://localhost:3306/spring-study-jdbc #?serverTimezone=UTC

   username: root

   password: 111111

   type: com.alibaba.druid.pool.DruidDataSource

  1. 配置类
    springboot已经帮我们做了这些工作,可以全部删除
  2. dao
    在dao接口上加上@Mapper注解,其他基本不变
  3. 测试类
    测试类上加上@SpringBootTest的注解,将导入@Test注解的包更换为springboot支持的@Test注解的包
  4. 页面
    将所有资源放置在resources目录下的static目录里面,更改一下book.html里面的请求url


SSMP案例整合

  1. pom.xml配置起步依赖
  1. 创建springboot项目时,勾选web、mybatisplus、mysql依赖
  2. 导入druid、lombok
  1. application.yml
    设置数据源接口、端口、框架技术相关设置等
  2. dao
    继承BaseMapper、设置@Mapper
  3. service
    调用数据层接口或使用mybatisplus提供的接口快速开发
  4. controller
    基于Restful开发,使用apifox测试
  5. 页面
    放置在resources目录下的static目录中






相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
消息中间件 Java RocketMQ
Springboot 集成 Rocketmq 消费者|学习笔记
快速学习 Springboot 集成 Rocketmq 消费者
1451 1
Springboot 集成 Rocketmq 消费者|学习笔记
|
消息中间件 IDE Java
Springboot 集成 Rocketmq 生产者|学习笔记
快速学习 Springboot 集成 Rocketmq 生产者
801 0
Springboot 集成 Rocketmq 生产者|学习笔记
|
NoSQL 安全 Java
SpringBoot 自动配置的原理|学习笔记
快速学习 SpringBoot 自动配置的原理
188 0
SpringBoot 自动配置的原理|学习笔记
|
SQL 监控 Java
SpringBoot的MyBatis工程配置|学习笔记
快速学习SpringBoot的MyBatis工程配置
239 0
SpringBoot的MyBatis工程配置|学习笔记
|
监控 Java 应用服务中间件
SpringBoot|学习笔记
快速学习SpringBoot
126 0
SpringBoot|学习笔记
|
存储 机器学习/深度学习 IDE
SpringBoot 项目与被开发快速迁移|学习笔记
快速学习 SpringBoot 项目与被开发快速迁移
SpringBoot 项目与被开发快速迁移|学习笔记
|
安全 Java 应用服务中间件
集中式整合之搭建Springboot环境|学习笔记
快速学习集中式整合之搭建Springboot环境
集中式整合之搭建Springboot环境|学习笔记
|
消息中间件 Java 测试技术
SpringBoot 集成 JUNIT 测试下单基本流程|学习笔记
快速学习 SpringBoot 集成 JUNIT 测试下单基本流程
207 0
SpringBoot 集成 JUNIT 测试下单基本流程|学习笔记
|
Java 程序员 应用服务中间件
初识 SpringBoot|学习笔记
快速学习 初识 SpringBoot
133 0
|
Java 开发者
SpringBoot 整合测试|学习笔记
快速学习 SpringBoot 整合测试
198 0
SpringBoot 整合测试|学习笔记