5.29

一、JVM 参数优化
配置 JVM 参数提升应用性能:
bash

推荐的JVM启动参数

java -Xms512m -Xmx1024m
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=256m
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/app/heapdump.hprof
-jar your-application.jar
二、数据库查询优化
优化复杂 SQL 查询:
java
// 优化前的查询方法
@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {
@Query("SELECT o FROM Order o JOIN FETCH o.items WHERE o.customerId = :customerId")
List findByCustomerId(Long customerId);
}

// 优化后的查询方法(分页+批量加载)
@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {
@Query("SELECT o FROM Order o WHERE o.customerId = :customerId")
Page findByCustomerId(Long customerId, Pageable pageable);

@Query("SELECT i FROM OrderItem i WHERE i.order.id IN :orderIds")
List<OrderItem> findItemsByOrderIds(@Param("orderIds") List<Long> orderIds);

}

// 批量加载逻辑
public List getOrdersWithItems(Long customerId) {
Page ordersPage = orderRepository.findByCustomerId(customerId, PageRequest.of(0, 50));
List orders = ordersPage.getContent();

if (!orders.isEmpty()) {
    List<Long> orderIds = orders.stream().map(Order::getId).collect(Collectors.toList());
    List<OrderItem> items = orderRepository.findItemsByOrderIds(orderIds);
    
    // 关联订单和订单项
    Map<Long, List<OrderItem>> itemsMap = items.stream()
            .collect(Collectors.groupingBy(item -> item.getOrder().getId()));
    
    orders.forEach(order -> order.setItems(itemsMap.getOrDefault(order.getId(), Collections.emptyList())));
}

return orders;

}

posted @ 2025-05-29 21:53  李蕊lr  阅读(10)  评论(0)    收藏  举报