文章

Spring Docker Compose 使得本地运行项目无感依赖中间件

在本地开发环境中,项目常常依赖于多个中间件,如数据库(MySQL)、消息队列(Kafka)或者常用缓存(Redis)。为了处理这些依赖,将中间件安装到本地是一个常用的方法,但尽管如此,还是存在如下不足:

  1. 中间件安装有时会与环境产生冲突。

  2. 多个项目使用同一中间件时,配置不易统一。

  3. 每一次搭建新环境时,需重新配置和安装中间件。

为解决这些问题,我们可以使用 Docker Compose 来搭建一个完全容器化的本地中间件环境,使开发环境更加简单。

实施步骤

01 创建 docker-compose.yml 文件

在项目根目录下创建一个 docker-compose.yml 文件:

version: '3.9'
services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: demo
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
​
  redis:
    image: redis:7.0
    container_name: redis
    ports:
      - "6379:6379"
​
  kafka:
    image: apache/kafka:latest
    container_name: kafka
    ports:
      - "9092:9092"
​
volumes:
  mysql_data:

02 配置 Spring Boot 项目

在 Gradle 中引入依赖:

implementation("org.springframework.boot:spring-boot-docker-compose")

在 Spring Boot 项目中修改 application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo?useSSL=false&serverTimezone=UTC
    username: root
    password: password
​
  redis:
    host: localhost
    port: 6379
​
  kafka:
    consumer:
      bootstrap-servers: localhost:9092
      auto-offset-reset: earliest
    producer:
      bootstrap-servers: localhost:9092
      value-serializer: org.springframework.kafka.support.serializer.JsonSerializer

03 启动服务器

在 IDEA 中 Run 服务或者使用 ./gradlew BootRun 即可。可以通过 docker ps 查看是否已正常启动中间件。

关闭服务,会自动删除容器。

04 控制是否启动

可以在不同的配置文件中开启或关闭。例如:在application.yml中默认关闭,在applicaton-local.yml

spring:
  docker:
    compose:
      enabled: false

写在最后

通过 Spring + Docker Compose,可以在本地实现服务无感依赖中间件,并使开发和维护环境更加效率。

  • 启动项目时,一键运行,无需人工配置。

  • 配置统一,随时重复使用

  • 本地不再需要安装中间件

附录

SpringBoot 项目启动后,Docker Desktop 容器情况:

image-20241231下午114924206

关闭应用后,自动关闭容器:

image-20241231下午115042906


欢迎关注我的公众号“Eric技术圈”,原创技术文章第一时间推送。

License:  CC BY 4.0