内容提要
本文介绍Gradle构建工具的核心概念与实战应用,涵盖Project、Task、Dependency三大模型及生命周期,讲解插件使用、仓库配置和依赖管理。随后详细说明Spring Boot整合MyBatis、Redis和Kafka的配置方法,包括数据源设置、序列化处理、连接池配置及消息生产消费示例,帮助开发者快速上手项目构建与中间件集成。
延伸解读
Gradle 核心模型与生命周期
Gradle 项目由多个 Project 组成,每个 Project 对应一个 build.gradle 文件。核心模型包括 Project、Task 和 Dependency。生命周期分为初始化、配置和执行三个阶段,其中 build.gradle 在配置阶段全部执行,因此 println 会在任务执行前打印。理解这些概念有助于把握构建脚本的执行顺序和模块化设计。
插件机制与仓库配置
Gradle 通过 plugins 或 buildscript 引入插件,前者为现代声明式方式,后者为旧机制。插件仓库默认使用 Gradle 官方仓库,也可配置阿里云等镜像加速。repositories 块用于配置依赖下载仓库,dependencies 块声明依赖,关键字如 implementation、compileOnly 等控制依赖作用范围。合理配置仓库和依赖是构建稳定性的基础。
Spring Boot 集成中间件的配置要点
整合 MyBatis 时,需配置数据源和 mapper-locations,并添加 @MapperScan 扫描接口。Redis 集成中,默认使用 Lettuce 客户端,但 RedisTemplate 默认 JDK 序列化会导致乱码,需自定义 JSON 序列化器。Kafka 集成需配置生产者、消费者及监听器,推荐关闭自动提交并手动 ack 以防消息丢失。这些配置直接影响中间件的正确使用。
Q&A
Gradle是什么?它主要用来做什么?
Gradle是一个构建自动化工具,主要用于编译Java/Kotlin代码、管理依赖(类似Maven)以及组织多模块工程。一个Gradle项目本质上由多个Project组成,每个Project对应一个build.gradle文件,其中包含配置块。
Gradle的核心模型包括哪些对象?
Gradle有三个核心对象:Project(项目)、Task(任务)和Dependency(依赖)。每个模块都是一个Project,每个build.gradle对应一个Project;Task是Gradle的执行单位,如compileJava、test、bootJar等;Dependency用于管理Java代码的依赖,例如implementation 'org.springframework.boot:spring-boot-starter'。
Gradle的生命周期分为哪几个阶段?
Gradle的生命周期分为三个阶段:初始化(init)、配置(configuration)和执行(execution)。在配置阶段,build.gradle会全部执行,因此println语句会在执行任务之前打印。
在Gradle中,plugins和buildscript有什么区别?
plugins是Gradle官方推荐的现代插件机制,采用声明式方式,自动从插件仓库下载插件并应用;buildscript是旧机制,需要手动将插件依赖添加到构建脚本的classpath中,然后使用apply plugin。
Gradle中如何配置依赖仓库?
在settings.gradle或build.gradle中通过repositories块配置仓库,例如mavenCentral()或maven { url "https://maven.aliyun.com/repository/public" },告诉Gradle去哪里下载依赖。
Gradle中implementation、compileOnly、testImplementation和runtimeOnly有什么区别?
implementation:编译和运行时都需要;compileOnly:仅编译时需要,运行时不需要;testImplementation:测试编译和运行时需要;runtimeOnly:仅运行时需要,编译时不需要。
在Gradle中,allprojects和subprojects有什么区别?
allprojects对包括root和所有子模块在内的所有Project生效;subprojects只对子模块生效,不包括root。
Spring Boot整合MyBatis时,mybatis-spring-boot-starter自动做了哪些事情?
mybatis-spring-boot-starter会自动探测存在的DataSource,使用SqlSessionFactoryBean创建并注册SqlSessionFactory实例,创建并注册SqlSessionTemplate,自动扫描mapper接口并将它们与SqlSessionTemplate关联,注册到Spring上下文中。
Spring Boot整合Redis时,为什么推荐使用Lettuce而不是Jedis?
因为Jedis的多线程并发基于连接池,线程不安全;而Lettuce基于Netty,连接可在多个线程间共享,异步非阻塞,高并发下性能更优、资源消耗更小。
Spring Boot整合Redis时,如何解决RedisTemplate默认JDK序列化导致的乱码问题?
需要自定义RedisTemplate配置类,将Key和HashKey的序列化器设置为StringRedisSerializer,将Value和HashValue的序列化器设置为GenericJackson2JsonRedisSerializer(JSON序列化),以保证可读性和跨语言兼容性。