关于Java后端开发以及spring boot各个组件的学习记录仓库
- 首先
mkdir spring-boot-security
创建文件夹 - 进入创建好的目录
- gradle创建module需要一个
settings.gradle.kts
文件,使用touch settings.gradle.kts
创建(windows powershell命令为New-Item settings.gradle.kts
) - 通过
gradle wrapper
将gradle包一层,避免多台机器gradle版本不一致的问题,这是一个比较好的实践 - 通过IDEA选择新建模块->来自现有源代码的模块,导入刚刚创建的module
- spring组件的统一版本控制由
id("org.springframework.boot") version "2.x.x"
插件控制
这里并未使用上述机制,还是使用了多模块的方案
测试先行
- 第一步,先引入测试
- jupiter就是junit5
- org.junit.jupiter:junit-jupiter-api ---------------> 编译期间提供的api
- org.junit.jupiter:junit-jupiter-engine ------------> api具体的实现
- 进行冒烟测试
git hooks
- 在项目中创建
githooks
文件夹,然后创建pre-commit
文件,键入提交前置检查 - 给
pre-commit
文件赋予chmod 755
权限,变成可执行文件 - 有两种方式安装这个hooks,一:
cp githooks/pre-commit .git/hooks
,但是每次修改了hooks脚本之后需要重新执行这个命令 - 二:使用
git config core.hooksPath githooks
命令
这里并没有使用上述hooks机制
- 使用CQRS-命令查询职责分离的模式下,面向领域的逻辑代码应该使用JPA这样的ORM框架,更有利于代码的建模
- 对于面向数据的查询代码,则使用MyBatis,更有利于SQL编写和性能优化
- 对于一个大型应用,这两者应该是可以同时存在的,他们分别负责提供不同场景下的持久化支持
- jpa在反序列化时需要一个空的构造函数
- 测试不应依赖我们本地的数据库环境,两个方案,其一:使用spring的H2数据库,这是个in memory的数据库,好处是比较简单不需要额外依赖,缺点是它毕竟是另一种数据库,和生产不一致,语法支持也不一样
- 其二:使用test container框架,它会帮助我们测试时启动一个本地的docker对应的容器,测试期间直接连接这个容器
- spring自动注入时推荐使用构造器注入,使用final修饰需要注入的bean,防止忘记添加到构造器中
- jpa的open in view属性需要设置为false,它会为每个请求开启一个事务,会覆盖我们声明式事务的配置
- 无需给应用服务编写完整的单元测试,通常来说application service会是非常薄的一层,业务逻辑不多,业务变复杂要么会放入聚合根中,要么引入另外一个领域服务,并且这一层测试编写起来很麻烦,需要mock很多上下游的bean,并且意义不大
- 刷新依赖
./gradlew build --refresh-dependencies
修改用户文件夹下.testcontainers.properties
文件,内容为
#Modified by Testcontainers
#Fri Jun 03 22:07:27 CST 2022
docker.client.strategy=org.testcontainers.dockerclient.NpipeSocketClientProviderStrategy
docker.host=tcp://111.111.111.111:2375
- github地址
- 芋道 Spring Boot 快速入门 --> 跳转到对应模块
- Maven 最全教程,看了必懂
- 芋道 Spring Boot 配置文件入门 --> 跳转到对应模块
- 芋道 Spring Boot SpringMVC 入门 --> 跳转到对应模块
- 芋道 Spring Boot 自动配置原理
- 芋道 Spring Boot 单元测试 Test 入门
- 芋道 Spring Boot 持续交付 Jenkins 入门
- 跟着 Github 学习 Restful HTTP API 的优雅设计
- 芋道 Spring Boot 数据库连接池入门
- 芋道 Spring Boot MyBatis 入门 --> 跳转到对应模块
- 芋道 Spring Boot MyBatis-Plus 入门 --> 跳转到对应模块
- 芋道 Spring Boot TkMyBatis 入门(不好用) --> 跳转到对应模块
- 小谈 Java 单元测试
- 谈谈单元测试
- springboot test
- JAVA 拾遗 —— 关于 SPI 机制
- Spring Boot 中 SPI 机制
- Spring Boot 知识清单
- JUnit4 单元测试入门教程
- JUnit assertThat 用法
- 芋道 Spring Boot 响应式 WebFlux 入门
- 注解处理器是干嘛的
- JSR269 插件化注解API
- 芋道 Spring Boot 消除冗余代码 Lombok 入门
- 芋道 Spring Boot 对象转换 MapStruct 入门
- 芋道 Spring Boot 响应式 WebFlux 入门
- 使用 Reactor 进行反应式编程
- 芋道 Spring Boot MongoDB 入门 --> 跳转到对应模块
- 芋道 Spring Boot JPA 入门
- 芋道 Spring Boot Redis 入门
- 芋道 Spring Boot 缓存 Cache 入门
- 芋道 Spring Boot Elasticsearch 入门
- 你应该如何正确健壮后端服务?
- 图解 Elasticsearch 原理
- Elasticsearch 如何做到亿级数据查询毫秒级返回?
- 缓存穿透、缓存并发、缓存失效之思路变迁
- 彻底理解 Cookie、Session、Token
- 芋道 Spring Boot 分布式 Session 入门