开启掘金成长之旅!这是我参与「掘金日新计划 · 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();
}