SpringBoot学习总结(二)

184 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看详情

上文介绍了spring boot中配置与基础部分相关知识,本文介绍应用时的常见知识点与面试题;

maven整合

maven作用主要为java项目管理依赖包,通过各种依赖坐标来构建项目,实现统一管理,自动化构建,避免手动引入jar包时操作费事,版本冲突导致的各种问题,还节省项目占用空间,同时还支持开发,打包,测试,部署等行为,更加方便开发,提升效率;

maven仓库概念:

本地仓库:当前机器上存储资源的仓库,可以从远程仓库获取资源;

中央仓库:maven团队维护的开源仓库,包含市面大部分开源依赖坐标;

私服仓库:自己或公司搭建的仓库,可以有效控制依赖版本,也可以拉取中央仓库资源;

配置远程仓库:使用文本编辑器打开maven所在文件中的setting.xml文件,增加镜像配置即可;

<mirrors>
 <mirror>
     <id>nexus-aliyun</id>
     <mirrorOf>*</mirrorOf>
     <name>Nexus aliyun</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public</url>
 </mirror>
</mirrors>

maven配置文件POM.XML:

modelVersion:pom模型版本;
groupId:项目唯一标识;
artifactId:项目名称;
version:项目版本;
packaging:打包方式,包含jar,war,pom;
parent:父级项目;
properties:属性设置,可以设置编译字符类型,指定JDK版本等;
dependencies:依赖关系,包含内容为依赖信息;
dependency:依赖坐标信息,包含项目名称,唯一标识,版本等信息;
plugins:包含插件信息;
plugin:插件信息,可以使用其他maven的打包等功能;

一般来说项目常用组件,mybatis,redis,mysql,lombok,hutool等直接引入相关版本依赖即可用;

实例:
整合数据库

一般来说在java项目中对数据库操作占比很重,在spring项目中可以使用JDBC连接数据库,在spring boot2.6.3中使用HikariDataSource数据源,以前版本默认使用org.apache.tomcat.jdbc.pool.DataSource作为数据源;当操作越来越多时需要提高操作性能时就需要整合数据库连接池;

数据库连接池相当于一个容器,可以进行分配与管理数据库的连接,可以重复利用连接资源,提升响应速度,当需要进行数据库操作时,从连接池获取连接而不是重新进行连接,节省资源; Druid连接池:阿里开源的数据库连接池,可以详细记录SQL语句的执行性能,帮助分析线上数据库性能;提供了数据库监控与日志,可以进行数据库加密等操作;

//依赖坐标
      <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid</artifactId>
         <version>1.1.17</version>
     </dependency>
 //配置文件
 spring:
   datasource:
     url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8
     username: root
     password: admin
     driver-class-name: com.mysql.jdbc.Driver
 //这样可以简单使用Durid连接池进行连接,还可以通过配置,编写配置类来实现更复杂的数据库监控,日志等相关功能;
整合MyBatis
//依赖坐标
   <dependency>
     <groupId>org.mybatis</groupId>
     <artifactId>mybatis</artifactId>
     <version>${mybatis.version}</version>
 </dependency>
 <dependency>
     <groupId>org.mybatis</groupId>
     <artifactId>mybatis-spring</artifactId>
     <version>${mybatis-spring.version}</version>
 </dependency>
 //配置文件
 mybatis:
   mapper-locations: classpath:mapping/*.xml
   type-aliases-package: com.example.demo.entity.domain
 //配合@Service,@Mapper等注解可以完成对数据库操作

mybatis增强工具:mybatis-plus,在mybatis基础上进行增强,简化开发,提高工作效率,mybatis-plus文章,点击链接了解更多MybatisPlus

redis整合

redis作为最常见NOSQL数据库,是使用C语言进行编写,基于内存的KV数据库,读写速度可达到8万次/s,也是我开发中使用频率最高的一款缓存数据库;除此之外还使用在分布式锁,计数器等场景;

//依赖坐标
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
//配置文件
spring:
  redis:
    # Redis数据库索引(默认为0)
    database: 0
    # Redis服务器地址
    host: 127.0.0.1
    # Redis服务器连接端口
    port: 6379
    jedis:
      pool:
        # 连接池最大连接数(使用负值表示没有限制)
        max-active: 8
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: 1
        # 连接池中的最大空闲连接
        max-idle: 8
        # 连接池中的最小空闲连接
        min-idle: 0
    # 连接超时时间(毫秒)
    timeout: 5000
//使用RedisTemplate类可以对redis进行相关操作

redis相关知识:

常见数据结构:String,Hash,List,Set,Zset;

分布式锁:通过SET if Not eXists 来获取锁,如果key不存在设置值,当相关操作完毕可以通过删除key来释放锁;还可以通过设定过期时间来防止死锁出现

缓存相关:

穿透:数据库不存在该key,无法加入缓存,每次直接访问数据库增加压力,可以加入空key或者对请求进行身份校验等操作来解决穿透问题;

击穿:大量请求访问时过期,导致短时间大量请求访问数据库,通过分布式锁或者互斥锁当访问不存在时先将数据缓存到redis或者设置缓存定时更新或者不过期,但要确保数据更新操作是否完成;

雪崩:大量key过期或者缓存服务宕机,所有请求请求数据库导致压力增大,可以通过缓存高可用,互斥锁同一key只允许一个线程进行访问来解决该问题;

RESTFUL

了解完maven整合就可以初步完成maven搭建spring boot项目并且尝试写接口了,那么就需要了解一下RestFul API接口规范;

Restful 是一种软件架构,设计风格,并非标准,目的是为了更加简洁易读,便于维护的代码编写习惯形成;该风格对于Web开发来说就是将我们对资源的增删改查操作在HTTP协议中使用对应的POST,DELETE,PUT,GET来进行表示;

@RequestMapping(value="/queryBooks",method=RequestMethod.GET)
 public Result queryBooks() {
 	return Result.ok();
 }
 
 @RequestMapping(value="/addBook",method=RequestMethod.POST)
 public Result addBook() {
 	return Result.ok();
 }
 
 @RequestMapping(value="/updateBook/{id}",method=RequestMethod.PUT)
 public Result updateBook() {
 	return Result.ok();
 }
 
 @RequestMapping(value="/deleteBook/{id}",method=RequestMethod.DELETE)
 public Result deleteBook() {
 	return Result.ok();
 }