本文作为Java开发环境配置的实战指南,通过完整的项目案例,展示Java开发环境配置在实际开发中的应用。从项目规划、架构设计到具体实现,手把手教您完成一个完整的Java开发环境配置项目,将理论知识转化为实际技能。

一、项目概述

1.1 项目需求

1
项目背景: 开发一个基于Spring Boot的用户管理系统,提供用户注册、登录、信息管理、权限控制等功能,采用RESTful API设计。
1
核心需求:
  • 用户注册、登录、JWT认证
  • 用户信息CRUD操作
  • 角色权限管理
  • 数据分页查询
  • 统一异常处理
  • API文档(Swagger)
  • 单元测试和集成测试

1.2 技术选型

1
技术栈:
  • 框架: Spring Boot 2.7.0
  • 数据库: MySQL 8.0 + MyBatis Plus
  • 缓存: Redis
  • 认证: Spring Security + JWT
    1
    - API文档: Swagger (Springfox)
  • 构建工具: Maven
  • 日志: Logback + SLF4J
1
开发工具:
  • IDE: IntelliJ IDEA
  • 数据库工具: DBeaver / Navicat
  • API测试: Postman
  • 版本控制: Git

二、项目架构

2.1 整体架构

1
2
3
4
5
6
7
8
9
┌─────────────────────────────────────┐
│ Controller Layer (控制器层) │
├─────────────────────────────────────┤
│ Service Layer (业务逻辑层) │
├─────────────────────────────────────┤
│ Mapper Layer (数据访问层) │
├─────────────────────────────────────┤
│ Database (MySQL) │
└─────────────────────────────────────┘

2.2 项目结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
user-management/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/usermgmt/
│ │ │ ├── UserManagementApplication.java
│ │ │ ├── controller/ # 控制器
│ │ │ │ ├── UserController.java
│ │ │ │ └── AuthController.java
│ │ │ ├── service/ # 服务层
│ │ │ │ ├── UserService.java
│ │ │ │ └── AuthService.java
│ │ │ ├── mapper/ # MyBatis映射
│ │ │ │ └── UserMapper.java
│ │ │ ├── entity/ # 实体类
│ │ │ │ ├── User.java
│ │ │ │ └── Role.java
│ │ │ ├── dto/ # 数据传输对象
│ │ │ │ ├── UserDTO.java
│ │ │ │ └── LoginRequest.java
│ │ │ ├── config/ # 配置类
│ │ │ │ ├── SecurityConfig.java
│ │ │ │ ├── SwaggerConfig.java
│ │ │ │ └── RedisConfig.java
│ │ │ ├── security/ # 安全相关
│ │ │ │ ├── JwtTokenUtil.java
│ │ │ │ └── JwtAuthenticationFilter.java
│ │ │ └── exception/ # 异常处理
│ │ │ └── GlobalExceptionHandler.java
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── application-dev.yml
│ │ ├── application-prod.yml
│ │ └── mapper/
│ │ └── UserMapper.xml
│ └── test/
│ └── java/ # 测试代码
├── pom.xml
└── README.md

三、核心实现

3.1 项目初始化

1
1. 创建Spring Boot项目:

使用Spring Initializr创建项目:

  • 访问 https://start.spring.io/
  • 选择Maven、Java、Spring Boot版本
  • 添加依赖:Web、MyBatis、MySQL、Redis、Security
1
2. pom.xml核心依赖:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<dependencies>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- MyBatis Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>

<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

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

<!-- Spring Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

<!-- JWT -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>

<!-- Swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>

3.2 配置文件

1
application.yml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
spring:
application:
name: user-management

datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/userdb?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: password

redis:
host: localhost
port: 6379
password:
timeout: 5000
database: 0

mybatis-plus:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.usermgmt.entity
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

jwt:
secret: mySecretKey
expiration: 86400000 # 24小时

3.3 实体类定义

1
entity/User.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.example.usermgmt.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.time.LocalDateTime;

@Data
@TableName("users")
public class User {
@TableId(type = IdType.AUTO)
private Long id;

private String username;
private String email;
private String password;
private String phone;
private Integer status; // 0-禁用 1-启用
private LocalDateTime createTime;
private LocalDateTime updateTime;
}

3.4 Service层实现

1
service/UserService.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.example.usermgmt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.usermgmt.entity.User;
import com.example.usermgmt.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

@Autowired
private UserMapper userMapper;

public Page<User> getUserList(int pageNum, int pageSize) {
Page<User> page = new Page<>(pageNum, pageSize);
return userMapper.selectPage(page, null);
}

public User getUserById(Long id) {
return userMapper.selectById(id);
}

public User getUserByUsername(String username) {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("username", username);
return userMapper.selectOne(wrapper);
}

public boolean createUser(User user) {
return userMapper.insert(user) > 0;
}

public boolean updateUser(User user) {
return userMapper.updateById(user) > 0;
}

public boolean deleteUser(Long id) {
return userMapper.deleteById(id) > 0;
}
}

3.5 Controller层实现

1
controller/UserController.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.example.usermgmt.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.usermgmt.entity.User;
import com.example.usermgmt.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/users")
@Api(tags = "用户管理")
public class UserController {

@Autowired
private UserService userService;

@GetMapping
@ApiOperation("获取用户列表")
public ResponseEntity<Page<User>> getUserList(
@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "10") int pageSize) {
return ResponseEntity.ok(userService.getUserList(pageNum, pageSize));
}

@GetMapping("/{id}")
@ApiOperation("获取用户详情")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
return ResponseEntity.ok(userService.getUserById(id));
}

@PostMapping
@ApiOperation("创建用户")
public ResponseEntity<Boolean> createUser(@RequestBody User user) {
return ResponseEntity.ok(userService.createUser(user));
}

@PutMapping("/{id}")
@ApiOperation("更新用户")
public ResponseEntity<Boolean> updateUser(@PathVariable Long id, @RequestBody User user) {
user.setId(id);
return ResponseEntity.ok(userService.updateUser(user));
}

@DeleteMapping("/{id}")
@ApiOperation("删除用户")
public ResponseEntity<Boolean> deleteUser(@PathVariable Long id) {
return ResponseEntity.ok(userService.deleteUser(id));
}
}

3.6 JWT认证实现

1
security/JwtTokenUtil.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.example.usermgmt.security;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class JwtTokenUtil {

@Value("${jwt.secret}")
private String secret;

@Value("${jwt.expiration}")
private Long expiration;

public String generateToken(String username) {
Date now = new Date();
Date expiryDate = new Date(now.getTime() + expiration);

return Jwts.builder()
.setSubject(username)
.setIssuedAt(now)
.setExpiration(expiryDate)
.signWith(SignatureAlgorithm.HS512, secret)
.compact();
}

public String getUsernameFromToken(String token) {
Claims claims = Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
return claims.getSubject();
}

public boolean validateToken(String token) {
try {
Jwts.parser().setSigningKey(secret).parseClaimsJws(token);
return true;
} catch (Exception e) {
return false;
}
}
}

四、部署上线

4.1 打包应用

1
使用Maven打包:
1
2
3
4
5
6
7
8
# 打包(包含测试)
mvn clean package

# 跳过测试打包
mvn clean package -DskipTests

# 打包后的jar文件位置
# target/user-management-1.0.0.jar

4.2 运行应用

1
开发环境运行:
1
2
3
4
5
6
7
8
# 直接运行
java -jar target/user-management-1.0.0.jar

# 指定配置文件
java -jar target/user-management-1.0.0.jar --spring.profiles.active=prod

# 指定JVM参数
java -Xms512m -Xmx1024m -jar target/user-management-1.0.0.jar

4.3 使用systemd管理(Linux)

1
创建服务文件:
1
sudo vim /etc/systemd/system/user-management.service
1
服务配置:
1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=User Management Application
After=syslog.target

[Service]
User=appuser
ExecStart=/usr/bin/java -jar /opt/app/user-management-1.0.0.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target
1
管理服务:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 启动服务
sudo systemctl start user-management

# 停止服务
sudo systemctl stop user-management

# 重启服务
sudo systemctl restart user-management

# 查看状态
sudo systemctl status user-management

# 设置开机自启
sudo systemctl enable user-management

4.4 Docker部署

1
Dockerfile:
1
2
3
4
5
6
7
8
9
FROM openjdk:17-jre-slim

WORKDIR /app

COPY target/user-management-1.0.0.jar app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]
1
构建和运行:
1
2
3
4
5
6
7
8
9
# 构建镜像
docker build -t user-management:1.0.0 .

# 运行容器
docker run -d \
-p 8080:8080 \
-e SPRING_PROFILES_ACTIVE=prod \
--name user-management \
user-management:1.0.0

五、项目总结

5.1 经验总结

1
开发过程中的关键点:
  1. 分层架构:清晰的分层使代码易于维护和测试
  2. MyBatis Plus:简化了数据库操作,提高开发效率
  3. JWT认证:无状态的认证方式,适合分布式系统
  4. 统一异常处理:GlobalExceptionHandler统一处理异常
  5. Swagger文档:自动生成API文档,便于前后端协作

5.2 优化建议

1
性能优化:
  • 使用Redis缓存热点数据
  • 数据库连接池优化
  • 添加数据库索引
  • 使用分页查询避免全表扫描
1
安全优化:
  • 密码加密存储(BCrypt)
  • 实现请求频率限制
  • 添加CORS配置
  • 定期更新依赖包
1
监控和日志:**
  • 集成Spring Boot Actuator
  • 使用ELK收集和分析日志
  • 添加APM监控(如SkyWalking)
  • 设置告警机制

六、总结

通过本系列文章的学习,您已经全面掌握了Java开发环境配置从入门到实战的完整知识体系。希望这些内容能够帮助您在Java开发环境配置开发中取得更好的成果。

本文标题: Java开发环境配置实

发布时间: 2019年07月08日 00:00

最后更新: 2025年12月30日 08:54

原始链接: https://haoxiang.eu.org/8445e9eb/

版权声明: 本文著作权归作者所有,均采用CC BY-NC-SA 4.0许可协议,转载请注明出处!

× 喜欢就赞赏一下呗!
打赏二维码