Web应用项目开发
在IDEA中创建新项目,选择Maven作为构建工具,指定JDK版本。首次加载时,Maven会自动下载依赖。从JetBrains官网下载IDEA Community或Ultimate版本,运行安装程序,按提示完成安装。首次启动时,选择主题和插件(如默认的Java支持插件)。下载JDK安装包(推荐JDK 8或JDK 11),从Oracle官网或OpenJDK获取。Maven依赖下载失败时,确认镜像仓库
配置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/ymlpom.xml或build.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。
更多推荐


所有评论(0)