配置JDK

下载JDK安装包(推荐JDK 8或JDK 11),从Oracle官网或OpenJDK获取。运行安装程序,按提示完成安装。安装完成后,配置环境变量:新建系统变量JAVA_HOME,值为JDK安装路径(如C:\Program Files\Java\jdk1.8.0_291)。在Path变量中添加%JAVA_HOME%\bin。验证安装是否成功,在命令行输入java -version,显示版本信息即配置完成。

java -version

配置Maven

从Apache Maven官网下载二进制压缩包,解压到本地目录(如C:\apache-maven-3.8.4)。配置环境变量:新建系统变量MAVEN_HOME,值为Maven解压路径。在Path变量中添加%MAVEN_HOME%\bin。验证安装是否成功,在命令行输入mvn -v,显示版本信息即配置完成。修改Maven配置文件settings.xml(位于conf目录),可配置镜像仓库(如阿里云镜像)和本地仓库路径。

验证:

mvn -v

正常输出:

Apache Maven 3.9.6 (57804ffe001d7215b5e7bcb531cf83df38f93546)
Maven home: D:\dev\maven\apache-maven-3.9.6
Java version: 17.0.x, vendor: Eclipse Adoptium, runtime: ...

安装IntelliJ IDEA

从JetBrains官网下载IDEA Community或Ultimate版本,运行安装程序,按提示完成安装。首次启动时,选择主题和插件(如默认的Java支持插件)。配置JDK和Maven:进入File > Project Structure > SDKs,添加已安装的JDK路径;进入File > Settings > Build, Execution, Deployment > Build Tools > Maven,配置Maven路径和settings.xml文件位置。

创建并运行项目

在IDEA中创建新项目,选择Maven作为构建工具,指定JDK版本。填写GroupId和ArtifactId,生成项目结构。首次加载时,Maven会自动下载依赖。编写代码后,点击运行按钮或使用快捷键(如Shift+F10)启动项目。如需打包,在终端运行mvn clean package,生成的可执行文件位于target目录。

常见问题排查

JDK版本不匹配时,检查JAVA_HOME和项目配置的JDK是否一致。Maven依赖下载失败时,确认镜像仓库配置正确或网络通畅。IDEA卡顿可调整内存设置:修改idea64.exe.vmoptions文件中的-Xmx参数。项目无法运行时,检查pom.xml文件是否缺少必要依赖或插件配置。

使用Spring Initializr在线生成

访问 Spring Initializr 网站,选择项目类型为Maven或Gradle,语言选择Java。设置项目元数据(Group、Artifact、包名等),添加需要的依赖(如Spring Web、Lombok、JDBC等),点击生成按钮下载项目压缩包。解压后用IDE导入即可。

通过IDE直接创建

IntelliJ IDEA或Eclipse等主流IDE支持直接创建Spring Boot项目。在IntelliJ中通过File → New → Project → Spring Initializr,填写项目信息并勾选依赖,IDE会自动完成项目结构和配置文件的生成。

基础项目结构说明

解压或生成后的项目包含以下核心文件:

  • src/main/java:主代码目录,内含自动生成的启动类(带@SpringBootApplication注解)
  • src/main/resources:配置文件目录,包含application.properties/yml
  • pom.xmlbuild.gradle:依赖管理文件

添加必要依赖示例

在Maven的pom.xml中,基础Web项目需添加:

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

编写第一个接口

在启动类同级目录创建controller包,新建示例Controller:

@RestController
public class DemoController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello Spring Boot";
    }
}

运行与测试

通过IDE直接运行启动类,或使用命令行:

mvn spring-boot:run

访问 http://localhost:8080/hello 验证接口是否返回预期结果。

常用配置调整

application.properties中可修改端口、上下文路径等:

server.port=8081
server.servlet.context-path=/api

打包部署

使用Maven打包生成可执行JAR:

mvn clean package

进行数据缓存管理

① 加依赖

<!-- Spring Boot 官方缓存 starter -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

② 主类开启注解

@SpringBootApplication
@EnableCaching           // 开启 Spring Cache 注解
public class DemoApplication { public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);}}

③ 统一配置(application.yml)

spring:
  cache:
    type: caffeine       # 默认先走本地,后续换 redis 只需改这里
    caffeine:
      spec: maximumSize=1000,expireAfterWrite=30s

① 安装 Redis

docker run -d --name redis -p 6379:6379 redis:7-alpine

② 替换依赖

<!-- 去掉 caffeine,换 redis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 对象序列化 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-json</artifactId>
</dependency>

③ 配置

spring:
  cache:
    type: redis
  redis:
    host: localhost
    port: 6379
    timeout: 2s
    lettuce:
      pool:
        max-active: 8
        max-idle: 8

④ 自定义序列化

@Configuration
public class RedisConfig {

    @Bean
    public RedisCacheConfiguration redisCacheConfiguration() {
        return RedisCacheConfiguration.defaultCacheConfig()
                .serializeKeysWith(RedisSerializationContext.SerializationPair
                        .fromSerializer(new StringRedisSerializer()))
                .serializeValuesWith(RedisSerializationContext.SerializationPair
                        .fromSerializer(new GenericJackson2JsonRedisSerializer()))
                .entryTtl(Duration.ofMinutes(5));   // 统一 5 分钟过期
    }
}

⑤ Service 层代码 无需改动

① 布隆过滤器(Redisson 已有实现)

RBloomFilter<String> bloomFilter = redisson.getBloomFilter("userBloom");
bloomFilter.tryInit(100000L, 0.01); 
// 新增用户时
bloomFilter.add("user:" + id);
// 查询时
if (!bloomFilter.contains("user:" + id)) {
    return null;   
}

②Redis SETNX

public User findById(Long id) {
    String key = "user:" + id;
    User user = redisTemplate.opsForValue().get(key);
    if (user != null) return user;

    String lockKey = "lock:user:" + id;
    Boolean locked = redisTemplate.opsForValue().setIfAbsent(lockKey, "1", 3, TimeUnit.SECONDS);
    if (Boolean.TRUE.equals(locked)) {
        try {
            user = userMapper.selectById(id);
            redisTemplate.opsForValue().set(key, user, 5, TimeUnit.MINUTES);
            return user;
        } finally {
            redisTemplate.delete(lockKey);
        }
    } else {
        // 锁失败,稍等重试
        try { Thread.sleep(50); } catch (InterruptedException ignored) {}
        return findById(id);   // 递归重试
    }
}

最后访问网址→ 观察控制台 SQL 打印次数 与 Redis key。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐