2、项目初始化与环境搭建:创建Spring Boot项目、配置数据库(MySQL + Redis)、引入依赖

好,咱们正式开始动手了。

这一章,说白了就是搭地基。地基稳不稳,直接决定你后面写代码的时候会不会想骂人。我见过太多项目,前期图省事,随便搞个脚手架就开始写业务,结果到了联调阶段,数据库连不上、缓存报错、依赖冲突……那叫一个酸爽。

所以,咱们花点时间,把这一步走扎实。

2.1 创建Spring Boot项目

我个人习惯用 Spring Initializr 来生成项目骨架。你可以去 start.spring.io 网页上点一点,也可以用 IDEA 自带的向导。我一般用后者,省事。

选什么版本?我建议用 2.7.x 或者 3.0.x。2.7.x 比较稳定,3.0.x 开始支持一些新特性。如果你是新项目,直接上 3.0 也没问题。但要注意,3.0 之后最低要求 JDK 17。

嗯,这里要提一句:JDK 版本别太老。我之前有个同事,项目都跑起来了才发现用的 JDK 8,结果 Spring Boot 3 根本不支持,又回头重搞,浪费时间。

选好版本后,勾上这几个依赖:

  • Spring Web —— 做 REST API 必备
  • Spring Data JPA —— 操作 MySQL 的利器
  • Spring Data Redis —— 缓存和分布式锁的基础
  • MySQL Driver —— 连数据库的驱动
  • Lombok —— 少写点 getter/setter,代码清爽

生成之后,项目结构大概长这样:

marketing-campaign/
├── src/
│   ├── main/
│   │   ├── java/com/example/marketing/
│   │   │   ├── controller/
│   │   │   ├── service/
│   │   │   ├── repository/
│   │   │   ├── entity/
│   │   │   └── MarketingApplication.java
│   │   └── resources/
│   │       ├── application.yml
│   │       └── static/
│   └── test/
└── pom.xml

别急着写代码,先看看 pom.xml 里的依赖是不是都齐了。我遇到过几次,勾选的时候漏了,结果启动报错,还得手动加。

2.2 配置MySQL数据库

数据库是营销活动的“大本营”。所有活动规则、用户参与记录、奖品信息,都得存进去。

首先,在 application.yml 里配一下数据源:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/marketing_campaign?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root
    password: your_password
    driver-class-name: com.mysql.cj.jdbc.Driver

  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL8Dialect

这里有几个点要注意:

  • ddl-auto: update —— 开发阶段用这个,JPA 会自动帮你建表。但上了生产环境,一定要改成 validate 或者 none,不然手滑删表就完了。
  • show-sql: true —— 开发时打开,方便调试。上线前记得关掉,不然日志里全是 SQL,影响性能。
  • allowPublicKeyRetrieval=true —— 这个参数我踩过坑。MySQL 8.0 之后,如果连接时没配这个,可能会报“Public Key Retrieval is not allowed”的错误。
⚠️ 警告: 数据库密码不要硬编码在配置里!我建议用环境变量或者配置中心来管理。比如 ${DB_PASSWORD},这样就算代码泄露了,密码也不会暴露。

然后,在 MySQL 里创建对应的数据库:

CREATE DATABASE marketing_campaign DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

为什么用 utf8mb4?因为营销活动里经常有用户昵称、活动描述,可能包含 emoji 表情。如果用 utf8,存 emoji 会报错。我之前就因为这个被测试妹子追着骂了一下午……

2.3 配置Redis

Redis 在营销活动里太重要了。秒杀活动的库存扣减、用户参与频率限制、活动数据的缓存……都离不开它。

先加依赖。如果你用的是 Spring Boot 2.x,依赖是:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

如果是 3.x,名字一样,但底层默认用的是 Lettuce 而不是 Jedis。我个人更推荐 Lettuce,因为它支持异步和响应式,性能更好。

然后配置连接信息:

spring:
  redis:
    host: localhost
    port: 6379
    password: your_redis_password
    timeout: 3000ms
    lettuce:
      pool:
        max-active: 16
        max-idle: 8
        min-idle: 2

这里有个小细节:连接池一定要配。不配的话,默认是单连接,高并发下 Redis 会变成瓶颈。我曾经在生产环境遇到过,活动刚开始,Redis 连接就超时了,查了半天才发现是连接池没配。

💡 小技巧: 开发环境可以先把 Redis 密码去掉,省得每次启动都要输密码。但生产环境一定要配密码,而且密码要复杂一点。我见过有人用 "123456" 当 Redis 密码,结果被挖矿程序盯上了……

2.4 引入其他依赖

除了核心的数据库和缓存,营销活动模块还需要一些辅助工具。我列一下常用的:

依赖 用途 备注
spring-boot-starter-validation 参数校验 比如活动时间不能为空、奖品数量必须大于0
jackson-databind JSON 序列化/反序列化 Spring Boot 默认自带,但版本要注意
commons-lang3 字符串、集合工具类 写业务逻辑时经常用到
hutool-all 全能工具包 我个人很喜欢,ID 生成、加密、日期处理都有
spring-boot-starter-test 单元测试 别偷懒,后面每章都要写测试

pom.xml 里加上这些:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.16</version>
</dependency>

📌 重点回顾:

  • Spring Boot 版本选 2.7.x 或 3.0.x,JDK 至少 17
  • MySQL 配置注意字符集用 utf8mb4,ddl-auto 开发用 update,生产用 validate
  • Redis 一定要配连接池,生产环境要设密码
  • 工具类依赖提前加好,后面写代码会省很多事

好了,环境搭完了。你可以试着启动一下项目,看看控制台有没有报错。如果一切正常,你会看到 Spring Boot 的启动日志,最后一行是 Started MarketingApplication in X seconds

嗯,看到这个就说明地基打好了。下一章,咱们开始设计数据库表结构,把营销活动的“骨架”搭起来。