目录
Java系统开发的核心技术与实践
一、核心技术栈概述
Java系统开发涉及多个技术层面,构成了完整的开发体系:
-
后端框架:
- Spring Boot (2.5+或3.0+) 是目前主流选择,提供自动配置、起步依赖等特性
- 传统Spring MVC仍在使用,但Boot简化了配置
- 微服务场景常用Spring Cloud全家桶
-
数据库交互:
- JPA/Hibernate:适合简单CRUD场景,支持H2/MySQL/PostgreSQL等
- MyBatis/MyBatis-Plus:复杂SQL场景首选,提供动态SQL能力
- JDBC Template:轻量级数据访问方案
-
构建工具:
- Maven:稳定成熟,依赖管理完善
- Gradle:构建速度更快,适合大型项目
- 新趋势:开始转向Gradle Kotlin DSL
二、开发环境详细搭建
1. 基础环境配置
# 安装JDK (推荐Amazon Corretto或OpenJDK)
sudo apt install openjdk-11-jdk
# 验证安装
java -version
javac -version
# 配置环境变量 (~/.bashrc或~/.zshrc)
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
2. IDE选择与配置
- IntelliJ IDEA Ultimate (推荐):
- 必备插件:Lombok, SonarLint, Maven Helper
- 配置:开启注解处理,设置JVM参数
- VS Code (轻量级选择):
- 扩展包:Java Extension Pack, Spring Boot Tools
3. 项目初始化
使用Spring Initializr (https://start.spring.io/) 生成项目时建议:
- 打包方式:Jar (微服务) 或 War (传统部署)
- Java版本:11或17 (LTS版本)
- 依赖选择示例:
- Web: Spring Web
- Data: Spring Data JPA
- Security: Spring Security
- 其他: Lombok, DevTools
三、项目架构设计详解
1. 分层架构规范
src/main/java
├── com.example.demo
│ ├── config/ # 配置类
│ ├── controller/ # API端点
│ ├── service/ # 业务逻辑
│ ├── repository/ # 数据访问
│ ├── model/ # 数据模型
│ │ ├── entity/ # 持久化实体
│ │ ├── dto/ # 数据传输对象
│ │ └── vo/ # 视图对象
│ ├── exception/ # 异常处理
│ └── util/ # 工具类
2. RESTful API设计实践
- 资源命名:使用复数名词 (/users)
- HTTP方法:
- GET:查询
- POST:创建
- PUT:全量更新
- PATCH:部分更新
- DELETE:删除
- 状态码:
- 200 OK
- 201 Created
- 400 Bad Request
- 404 Not Found
- 500 Internal Server Error
四、数据库交互实现细节
1. JPA高级用法
// 实体关联示例
@Entity
public class Order {
@Id
private Long id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@OneToMany(mappedBy = "order")
private List<OrderItem> items;
}
// 自定义查询
public interface UserRepository extends JpaRepository<User, Long> {
@Query("SELECT u FROM User u WHERE u.age > :age")
List<User> findByAgeGreaterThan(@Param("age") int age);
}
2. MyBatis动态SQL
<!-- 条件查询示例 -->
<select id="findUsers" resultType="User">
SELECT * FROM users
<where>
<if test="name != null">
AND name LIKE CONCAT('%',#{name},'%')
</if>
<if test="minAge != null">
AND age >= #{minAge}
</if>
</where>
ORDER BY id DESC
</select>
五、业务逻辑开发最佳实践
1. 服务层设计原则
- 单一职责:每个Service只处理一个业务领域
- 依赖注入:通过构造函数注入(推荐)或@Autowired
- 事务管理:
@Service
@RequiredArgsConstructor // Lombok生成构造函数
public class OrderService {
private final OrderRepository orderRepository;
private final PaymentService paymentService;
@Transactional(rollbackFor = Exception.class)
public Order createOrder(OrderCreateDTO dto) {
// 业务逻辑
}
}
2. 异常处理机制
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<ErrorResponse> handleNotFound(ResourceNotFoundException ex) {
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(new ErrorResponse("RESOURCE_NOT_FOUND", ex.getMessage()));
}
// 其他异常处理...
}
六、系统安全深度配置
1. JWT认证实现
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/api/auth/**").permitAll()
.anyRequest().authenticated()
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
return http.build();
}
}
2. 权限控制注解
@PreAuthorize("hasRole('ADMIN')")
@GetMapping("/admin/users")
public List<User> getAllUsers() {
return userService.findAll();
}
@PreAuthorize("#userId == authentication.principal.id")
@GetMapping("/users/{userId}")
public User getUser(@PathVariable Long userId) {
// ...
}
七、测试与部署完整流程
1. 测试策略
- 单元测试:JUnit 5 + Mockito
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@Mock
private UserRepository userRepository;
@InjectMocks
private UserService userService;
@Test
void shouldReturnUserWhenExists() {
// given
User mockUser = new User(1L, "test");
when(userRepository.findById(1L)).thenReturn(Optional.of(mockUser));
// when
User result = userService.getUserById(1L);
// then
assertEquals("test", result.getUsername());
}
}
- 集成测试:@SpringBootTest
- API测试:TestRestTemplate或RestAssured
2. CI/CD管道示例
# GitHub Actions示例
name: Java CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: '11'
- name: Build with Maven
run: mvn -B package --file pom.xml
- name: Run Tests
run: mvn test
- name: Build Docker image
run: docker build -t myapp:${{ github.sha }} .
3. 生产环境部署方案
-
传统部署:
- 使用Nginx + Tomcat组合
- JVM参数调优:
java -Xms512m -Xmx1024m -XX:+UseG1GC -jar app.jar
-
容器化部署:
# 多阶段构建优化镜像大小 FROM maven:3.8.4-openjdk-11 AS build COPY . . RUN mvn clean package FROM openjdk:11-jre-slim COPY --from=build /target/app.jar /app.jar EXPOSE 8080 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
-
Kubernetes部署:
apiVersion: apps/v1 kind: Deployment metadata: name: myapp spec: replicas: 3 template: containers: - name: app image: myrepo/myapp:1.0.0 ports: - containerPort: 8080 resources: limits: cpu: "1" memory: 1Gi
八、监控与运维
1. 健康检查端点
Spring Boot Actuator配置:
management.endpoints.web.exposure.include=health,info,metrics
management.endpoint.health.show-details=always
2. Prometheus监控集成
<!-- pom.xml -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
# application.properties
management.endpoints.web.exposure.include=prometheus,metrics
management.metrics.tags.application=myapp
3. 日志管理方案
- ELK Stack (Elasticsearch + Logstash + Kibana)
- 结构化日志:
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.info("Order {} created for user {}", orderId, userId);
// 输出JSON格式日志
通过以上技术体系和最佳实践,可以构建出健壮、可维护的Java企业级应用系统。实际开发中应根据项目规模、团队技术栈和业务需求进行适当调整。