本文作为Java开发环境配置的实战指南,通过完整的项目案例,展示Java开发环境配置在实际开发中的应用。从项目规划、架构设计到具体实现,手把手教您完成一个完整的Java开发环境配置项目,将理论知识转化为实际技能。
一、项目概述
1.1 项目需求
1
| 项目背景: 开发一个基于Spring Boot的用户管理系统,提供用户注册、登录、信息管理、权限控制等功能,采用RESTful API设计。
|
- 用户注册、登录、JWT认证
- 用户信息CRUD操作
- 角色权限管理
- 数据分页查询
- 统一异常处理
- API文档(Swagger)
- 单元测试和集成测试
1.2 技术选型
- 框架: Spring Boot 2.7.0
- 数据库: MySQL 8.0 + MyBatis Plus
- 缓存: Redis
- 认证: Spring Security + JWT
1
| - API文档: Swagger (Springfox)
|
- 构建工具: Maven
- 日志: Logback + SLF4J
- 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 项目初始化
使用Spring Initializr创建项目:
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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> <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 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
|
3.3 实体类定义
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; 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 2 3 4 5 6 7 8
| mvn clean package
mvn clean package -DskipTests
|
4.2 运行应用
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
java -Xms512m -Xmx1024m -jar target/user-management-1.0.0.jar
|
4.3 使用systemd管理(Linux)
1
| sudo vim /etc/systemd/system/user-management.service
|
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 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 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 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 经验总结
- 分层架构:清晰的分层使代码易于维护和测试
- MyBatis Plus:简化了数据库操作,提高开发效率
- JWT认证:无状态的认证方式,适合分布式系统
- 统一异常处理:GlobalExceptionHandler统一处理异常
- Swagger文档:自动生成API文档,便于前后端协作
5.2 优化建议
- 使用Redis缓存热点数据
- 数据库连接池优化
- 添加数据库索引
- 使用分页查询避免全表扫描
- 密码加密存储(BCrypt)
- 实现请求频率限制
- 添加CORS配置
- 定期更新依赖包
- 集成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许可协议,转载请注明出处!