Spring Boot生态中ORM对数据治理的支持有哪些?

有哪些ORM框架可用?

在 Spring Boot 生态中,ORM(对象关系映射)框架的选择丰富多样,主要分为 JPA 规范实现半自动化 ORM代码生成型 ORM扩展工具 等类型。以下是主流 ORM 框架的详细介绍,包括其特点、适用场景及与 Spring Boot 的集成方式:

一、JPA 规范实现(标准 ORM)

JPA(Java Persistence API)是 Java 官方定义的 ORM 规范,Spring Boot 主流实现包括 HibernateEclipseLink ,二者均通过 spring-boot-starter-data-jpa 快速集成。

1. Hibernate
  • 定位:最流行的 JPA 实现,功能全面,支持自动 Schema 生成、二级缓存、延迟加载等高级特性。

  • 特点

    • 高度抽象 :通过注解(如 @Entity@OneToMany)定义实体与表的映射,自动处理对象-关系转换。
    • 自动 DDL :支持 hibernate.hbm2ddl.auto 配置(如 updatecreate),自动生成或更新数据库表结构(开发环境友好)。
    • 缓存机制:内置一级缓存(Session 级)和二级缓存(应用级),提升查询性能。
    • 数据库兼容性:支持主流数据库(MySQL、PostgreSQL、Oracle 等),并提供方言适配。
  • 适用场景:快速开发、需要自动化管理数据库 Schema、对 ORM 抽象要求高的项目(如企业级后台管理系统)。

  • Spring Boot 集成

    xml 复制代码
    <!-- pom.xml -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <scope>runtime</scope>
    </dependency>

    配置 application.yml

    yaml 复制代码
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
        username: root
        password: 123456
      jpa:
        hibernate:
          ddl-auto: update  # 开发环境自动生成表结构
        show-sql: true      # 打印 SQL 日志
  • 定位:另一个主流 JPA 实现,由 Oracle 维护(原 TopLink),功能与 Hibernate 类似,但在某些特性(如缓存、查询优化)上有差异。

  • 特点

    • 轻量高效:内存占用较低,适合资源受限的环境。
    • 高级查询优化:支持更复杂的 JPQL 查询转换,对某些数据库(如 Oracle)的优化更深入。
    • 与 Spring 集成 :需手动配置 LocalContainerEntityManagerFactoryBean,但 Spring Boot 提供自动配置支持。
  • 适用场景:需要替代 Hibernate、对特定数据库(如 Oracle)有深度优化需求的项目。

  • Spring Boot 集成
    需排除 Hibernate 依赖,引入 EclipseLink:

    xml 复制代码
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>eclipselink</artifactId>
        <version>4.0.2</version> <!-- 需匹配 Spring Boot 版本 -->
    </dependency>

二、半自动化 ORM:MyBatis 系列

MyBatis 是半自动化 ORM框架,强调 SQL 控制,通过 XML 或注解定义 SQL 语句,适合需要手动优化 SQL 性能的场景。

1. MyBatis
  • 定位 :通过 Mapper 接口与 XML/注解绑定 SQL,开发者需手动编写 SQL 语句,灵活性高。

  • 特点

    • SQL 可控:直接编写 SQL,便于性能调优和数据库方言适配。
    • 灵活映射:支持复杂结果集映射(如多表关联、动态 SQL)。
    • 插件扩展 :支持自定义插件(如分页插件 PageHelper)。
  • 适用场景:对 SQL 性能要求高、需要精细控制数据库操作的场景(如高并发交易系统、大数据量查询)。

  • Spring Boot 集成

    xml 复制代码
    <!-- pom.xml -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>3.0.3</version> <!-- 匹配 Spring Boot 版本 -->
    </dependency>
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <scope>runtime</scope>
    </dependency>

    配置 application.yml

    yaml 复制代码
    mybatis:
      mapper-locations: classpath:mapper/*.xml  # XML 映射文件路径
      configuration:
        map-underscore-to-camel-case: true      # 自动驼峰命名转换(如 user_name → userName)
2. MyBatis-Plus(MP)
  • 定位 :MyBatis 的增强工具(国产),通过 BaseMapper 接口提供通用 CRUD 方法,大幅减少重复代码。

  • 特点

    • 无侵入性:完全兼容原生 MyBatis,仅通过注解或接口扩展功能。
    • 通用 CRUD :内置 insertselectByIdupdateById 等方法,无需编写 XML。
    • 条件构造器 :通过 QueryWrapper 动态构建查询条件(替代复杂 XML)。
    • 分页支持:内置分页插件,简化分页查询。
  • 适用场景:需要快速开发 CRUD 功能,同时保留 MyBatis SQL 灵活性的项目(如中后台管理系统)。

  • Spring Boot 集成

    xml 复制代码
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.3.1</version>
    </dependency>

    使用示例:

    java 复制代码
    // 实体类(继承 Model)
    @Data
    public class User extends Model<User> {
        @TableId(type = IdType.AUTO)
        private Long id;
        private String username;
    }
    
    // Mapper 接口(继承 BaseMapper)
    public interface UserMapper extends BaseMapper<User> {}
    
    // Service 中直接使用通用方法
    @Service
    public class UserService {
        @Autowired
        private UserMapper userMapper;
    
        public User getById(Long id) {
            return userMapper.selectById(id); // 无需编写 SQL
        }
    }

三、代码生成型 ORM:jOOQ

  • 定位:基于数据库 Schema 生成类型安全的 Java 代码,通过流畅的 API 构建 SQL,避免手写字符串拼接。

  • 特点

    • 类型安全:编译期检查 SQL 字段、表名,避免运行时错误。
    • SQL 可控:生成的代码与数据库 Schema 严格一致,适合复杂查询(如多表 JOIN)。
    • 支持多种数据库:自动生成适配不同数据库的 SQL 方言。
  • 缺点:商业许可(社区版免费但功能受限),学习成本较高。

  • 适用场景:对 SQL 正确性要求极高、需要类型安全的项目(如金融系统、高可靠性服务)。

  • Spring Boot 集成

    xml 复制代码
    <dependency>
        <groupId>org.jooq</groupId>
        <artifactId>jooq</artifactId>
        <version>3.18.7</version>
    </dependency>
    <dependency>
        <groupId>org.jooq</groupId>
        <artifactId>jooq-meta</artifactId>
        <version>3.18.7</version>
    </dependency>
    <dependency>
        <groupId>org.jooq</groupId>
        <artifactId>jooq-codegen</artifactId>
        <version>3.18.7</version>
    </dependency>

    配置代码生成(jooq-config.xml):

    xml 复制代码
    <configuration>
        <jdbc>
            <driver>com.mysql.cj.jdbc.Driver</driver>
            <url>jdbc:mysql://localhost:3306/mydb</url>
            <user>root</user>
            <password>123456</password>
        </jdbc>
        <generator>
            <database>
                <name>org.jooq.meta.mysql.MySQLDatabase</name>
                <includes>.*</includes>
                <inputSchema>mydb</inputSchema>
            </database>
            <generate>
                <pojos>true</pojos>       <!-- 生成 POJO -->
                <daos>true</daos>         <!-- 生成 DAO -->
            </generate>
            <target>
                <packageName>com.example.jooq</packageName>
                <directory>src/main/java</directory>
            </target>
        </generator>
    </configuration>

    通过 Maven 插件生成代码后,使用生成的 DAO 操作数据库:

    java 复制代码
    // 生成的 DAO
    UserDao userDao = new UserDao(configuration);
    UserRecord user = userDao.fetchOne(USERS.ID, 1L); // 类型安全查询

四、扩展工具与框架

除上述主流 ORM 外,Spring Boot 生态还有一些辅助工具,可结合 ORM 框架提升开发效率:

1. Spring Data JPA
  • 定位 :基于 JPA 规范的仓库抽象层 ,通过接口方法名自动生成 SQL(如 findByUsername(String username)),进一步简化 CRUD 操作。
  • 特点
    • 零代码 CRUD :仅需定义接口(如 UserRepository extends JpaRepository<User, Long>),自动生成基础方法。
    • 查询方法解析 :支持方法名关键字(findByAndOrBetween)自动生成查询。
    • 自定义查询 :通过 @Query 注解编写 JPQL 或原生 SQL。
  • 适用场景:快速开发简单 CRUD 功能,减少样板代码(如内部管理系统)。
  • 与 Hibernate 关系:底层默认使用 Hibernate 作为 JPA 实现。
2. Querydsl
  • 定位:类型安全的查询构建工具,支持 JPA、SQL、MongoDB 等多种数据源。

  • 特点

    • 类型安全 :通过编译生成的 Q 类(如 QUser)构建查询,避免字符串拼接错误。
    • 流畅 API :链式调用构建复杂查询(如 query.from(user).where(user.username.eq("admin")).list(user))。
  • 适用场景:需要动态构建复杂查询(如多条件筛选)的项目。

  • Spring Boot 集成

    xml 复制代码
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version>6.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <version>6.0.0</version>
        <scope>provided</scope>
    </dependency>

    通过 Maven 插件生成 Q 类后使用:

    java 复制代码
    QUser user = QUser.user;
    List<User> result = queryFactory.selectFrom(user)
                                    .where(user.username.eq("admin")
                                            .and(user.age.gt(18)))
                                    .fetch();

五、如何选择 ORM 框架?

根据项目需求和团队技术栈,可参考以下决策逻辑:

需求维度 推荐框架
快速开发、减少样板代码 Spring Data JPA(底层 Hibernate)
需要手动优化 SQL MyBatis 或 MyBatis-Plus
类型安全的 SQL 构建 jOOQ(商业)或 Querydsl(开源)
高度自动化的 ORM Hibernate
兼容旧系统 SQL 逻辑 MyBatis(直接编写 SQL)

总结

Spring Boot 生态中的 ORM 框架覆盖了从高度抽象 (Hibernate、Spring Data JPA)到手动控制 SQL (MyBatis)的全场景需求。选择时需结合项目对开发效率、SQL 可控性、类型安全的要求,以及团队对框架的熟悉度。对于大多数企业级应用,MyBatis-Plus (平衡开发效率与 SQL 控制)或 Spring Data JPA (快速开发)是最常用的选择;而对 SQL 要求极高的场景(如金融系统),则推荐 jOOQMyBatis

ORM框架对数据治理的支持

在 Spring Boot 体系中,ORM(对象关系映射)框架是连接业务对象与数据库的核心桥梁,其设计不仅关注数据持久化,还通过扩展能力支持企业级数据治理需求。数据治理结构通常涵盖数据模型定义、元数据管理、数据质量、数据安全、审计日志、多租户支持、事务管理 等关键维度。以下从主流 ORM 框架(如 Hibernate、MyBatis、Spring Data JPA)出发,结合 Spring Boot 特性,详细说明其对数据治理的支持:

在 Spring Boot 体系中,ORM(对象关系映射)框架是连接业务对象与数据库的核心枢纽,其设计不仅关注数据持久化,还通过扩展能力深度支持企业级数据治理需求。数据治理涵盖数据模型定义、元数据管理、数据质量、数据安全、审计日志、多租户隔离、事务管理等关键维度。以下结合主流 ORM 框架(Hibernate、MyBatis、Spring Data JPA),详细说明其对数据治理的支持:

一、数据模型定义与标准化

ORM 框架通过声明式映射将 Java 对象与数据库表/视图关联,确保业务模型与数据模型的一致性,是数据治理的起点。

1. JPA 规范的标准化映射(Hibernate/Spring Data JPA)
  • 注解驱动定义 :通过 JSR 338(JPA 2.2)标准注解(如 @Entity@Table@Column@Id@OneToMany)定义实体类与表的映射关系,明确字段约束(如 @Column(nullable=false, length=50))、主键生成策略(@GeneratedValue)、关联关系(一对一、一对多)。
    示例:

    java 复制代码
    @Entity
    @Table(name = "user", schema = "auth") // 指定表名和 Schema
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY) // 自增主键
        private Long id;
    
        @Column(nullable = false, unique = true, length = 50) // 非空、唯一、长度限制
        private String username;
    
        @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) // 级联保存/删除
        private List<Role> roles;
    }
  • 自动 Schema 管理 :通过 hibernate.hbm2ddl.auto 配置(如 updatecreate),自动生成或更新数据库表结构(开发环境友好),确保模型与数据库同步。

2. MyBatis 的灵活映射
  • XML/注解绑定 SQL :通过 resultMap 定义复杂字段映射(如多表关联、字段别名),或通过 @Result 注解简化映射。
    示例(XML):

    xml 复制代码
    <resultMap id="userMap" type="User">
        <id id-column="user_id" property="id"/>
        <result column="user_name" property="username"/>
        <collection 
            property="roles" 
            column="user_id"
            ofType="Role"
            select="selectRolesByUserId"/>
    </resultMap>
  • 动态 SQL 支持 :通过 <if><foreach> 等标签动态拼接 SQL,适应复杂查询场景(如多条件筛选),避免硬编码。

二、元数据管理

元数据(如实体字段描述、关联关系、约束规则)是数据治理的核心资产,ORM 框架通过内置或扩展机制支持元数据的提取与管理。

1. 内置元数据访问
  • Hibernate Metadata API :通过 SessionFactory 获取 Metadata 对象,动态查询实体类、字段、关联关系的元数据(如字段类型、是否可为空、外键目标表)。
    示例:

    java 复制代码
    Metadata metadata = sessionFactory.getMetadata();
    EntityPersister userPersister = metadata.getEntityPersister(User.class.getName());
    // 获取字段元数据(如 username 是否可为空)
    boolean isUsernameNullable = userPersister.getPropertyNullability()[0];
  • Spring Data JPA 审计元数据 :通过 AuditingHandler 跟踪实体的创建/修改时间、操作人(@CreatedBy@LastModifiedBy),元数据可用于数据溯源。

2. 元数据扩展与集成
  • 自定义注解 + AOP :通过自定义注解(如 @DataOwner(department="HR") 标记数据归属部门)结合 AOP 扫描实体类,提取元数据并存储到治理平台(如 Apache Atlas)。
    示例:

    java 复制代码
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface DataOwner {
        String department();
    }
    
    // 在实体中使用
    public class User {
        @DataOwner(department = "HR")
        private String employeeId;
    }
  • 与 Apache Atlas 集成 :通过自定义 MetadataCollector 扫描 JPA 实体或 MyBatis 映射文件,将表结构、字段描述、血缘关系同步到 Atlas 可视化管理。

三、数据质量保障

ORM 框架通过校验、约束、级联操作等机制保障数据完整性,避免脏数据流入数据库。

1. 声明式数据校验
  • JSR 380(Bean Validation)集成 :Spring Boot 自动集成 Hibernate Validator,通过 @NotBlank@Email@Min 等注解在实体字段上定义校验规则,持久化前自动触发校验(结合 @Valid@Validated)。
    示例:

    java 复制代码
    public class User {
        @NotBlank(message = "用户名不能为空")
        @Email(message = "邮箱格式错误")
        private String email;
    }
    
    // Service 中触发校验
    @PostMapping("/users")
    public User createUser(@Valid @RequestBody User user) {
        return userRepository.save(user); // 校验失败抛 MethodArgumentNotValidException
    }
  • 自定义校验器 :通过 @ConstraintConstraintValidator 实现复杂业务规则校验(如身份证号格式、手机号归属地)。

2. 数据一致性控制
  • 级联操作(Cascade) :通过 @OneToMany(cascade = CascadeType.PERSIST) 定义级联保存/删除,避免因手动操作遗漏导致的数据不一致。

  • 乐观锁(Optimistic Locking) :通过 @Version 注解标记版本字段,Hibernate 自动检测并发修改,防止脏写(适合高并发场景)。
    示例:

    java 复制代码
    @Entity
    public class Product {
        @Version // 乐观锁版本号
        private Long version;
        private Integer stock;
    }

四、数据安全与隐私保护

ORM 框架通过字段过滤、权限控制、加密存储等机制保护敏感数据,满足 GDPR、等保等合规要求。

1. 字段级访问控制
  • Spring Data JPA 投影(Projection) :通过接口或类投影限制查询返回的字段,避免敏感信息(如密码、手机号)泄露。
    示例:

    java 复制代码
    public interface UserProjection {
        String getUsername(); // 仅返回用户名,隐藏密码等敏感字段
    }
    
    public interface UserRepository extends JpaRepository<User, Long> {
        UserProjection findByUsername(String username);
    }
  • Hibernate @Filter :通过动态过滤条件隐藏特定数据(如根据用户角色过滤可见的行)。
    示例:

    java 复制代码
    Session session = sessionFactory.openSession();
    Filter filter = session.enableFilter("departmentFilter")
                            .setParameter("deptId", currentUser.getDeptId());
    List<User> users = session.createQuery("FROM User").list(); // 仅返回当前部门用户
2. 敏感数据加密
  • 字段加密存储 :通过 Hibernate @Type 自定义类型(如 AES 加密),在持久化时自动加密字段,读取时解密。
    示例:

    java 复制代码
    @Column
    @Type(type = "com.example.AesEncryptType") // 自定义加密类型
    private String phone;
  • MyBatis 插件加密 :通过 Interceptor 拦截 SQL 执行,在参数设置或结果集映射时对敏感字段加解密。

五、审计与溯源

数据治理要求记录数据的变更历史(Who、When、What),ORM 框架通过内置或扩展工具支持审计日志。

1. Spring Data JPA 审计
  • 自动记录变更信息 :通过 @CreatedDate@LastModifiedDate 标记时间字段,@CreatedBy@LastModifiedBy 标记操作人,配合 AuditorAware 接口动态获取当前用户。
    示例:

    java 复制代码
    @EntityListeners(AuditingEntityListener.class)
    public class User {
        @CreatedDate
        private LocalDateTime createTime;
    
        @CreatedBy
        private String createdBy;
    }
    
    // 配置 AuditorAware 获取当前用户
    @Bean
    public AuditorAware<String> auditorAware() {
        return () -> Optional.ofNullable(SecurityContextHolder.getContext())
                             .map(SecurityContext::getAuthentication)
                             .map(Authentication::getName);
    }
2. Hibernate Envers 深度审计
  • 全量变更记录 :Hibernate Envers 是官方审计插件,通过监听 Hibernate 事件,自动将实体变更(增删改)记录到独立的审计表(如 User_AUD),包含修订号、时间戳、修改人、旧值/新值。
    配置:

    properties 复制代码
    # application.properties
    spring.jpa.properties.hibernate.envers.audit_table_suffix=_AUD
    spring.jpa.properties.hibernate.envers.revision_field_name=rev
    spring.jpa.properties.hibernate.envers.revision_type_field_name=revtype

六、多租户数据隔离

针对 SaaS 场景,ORM 框架支持通过租户 ID 隔离不同租户的数据,确保数据安全。

1. Hibernate 多租户策略
  • 共享数据库(推荐) :所有租户共享同一数据库,通过租户 ID 字段区分(hibernate.multiTenancy=DISCRIMINATOR),Hibernate 自动在 SQL 中添加 tenant_id = ? 条件。
    配置:

    properties 复制代码
    spring.jpa.properties.hibernate.multiTenancy=DISCRIMINATOR
    spring.jpa.properties.hibernate.tenant_identifier_resolver=com.example.CurrentTenantIdentifierResolver
    spring.jpa.properties.hibernate.multi_tenant_connection_provider=com.example.MultiTenantConnectionProviderImpl
2. MyBatis 多租户实现
  • 插件拦截 SQL :通过 Interceptor 拦截所有 SQL 语句,自动添加租户 ID 条件(需配合租户上下文)。
    示例:

    java 复制代码
    @Intercepts({
        @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})
    })
    public class TenantInterceptor implements Interceptor {
        @Override
        public Object intercept(Invocation invocation) throws Throwable {
            Object parameter = invocation.getArgs()[1];
            Long tenantId = TenantContext.getCurrentTenantId();
            // 修改 SQL,添加 tenant_id = #{tenantId}
            return invocation.proceed();
        }
    }

七、事务与一致性保障

ORM 框架与 Spring 事务管理深度集成,通过声明式事务确保 ACID 特性,支持分布式事务扩展。

1. 声明式事务(Spring)
  • @Transactional 注解 :通过 Spring AOP 为方法添加事务边界,支持传播行为(Propagation.REQUIRED)、隔离级别(Isolation.READ_COMMITTED)、回滚规则(rollbackFor=Exception.class)。
    示例:

    java 复制代码
    @Service
    public class OrderService {
        @Autowired
        private OrderRepository orderRepo;
        @Autowired
        private InventoryRepository inventoryRepo;
    
        @Transactional(rollbackFor = Exception.class) // 所有异常回滚
        public void createOrder(Order order) {
            orderRepo.save(order); // 保存订单
            inventoryRepo.decreaseStock(order.getProductId(), order.getCount()); // 扣减库存
        }
    }
2. 分布式事务(Seata 集成)
  • Spring Boot + Seata :针对跨微服务的分布式事务,通过 Seata 的 AT/TCC 模式,ORM 框架配合完成本地事务与全局事务的协调。
    流程:
    1. 全局事务协调器(TC)开启全局事务。
    2. 各微服务执行本地事务(通过 ORM 提交),并向 TC 报告状态。
    3. TC 根据所有分支事务状态决定提交或回滚。

八、扩展与集成能力

Spring Boot 的自动配置和扩展机制允许开发者结合 ORM 框架与其他数据治理工具,构建完整的治理体系。

1. 与数据库迁移工具集成
  • Flyway/Liquibase:Spring Boot 集成 Flyway 或 Liquibase,通过版本化的 SQL 脚本管理数据库 Schema 变更,确保开发、测试、生产环境的 Schema 一致性(与 ORM 实体定义解耦或对齐)。
2. 与数据治理平台集成
  • Apache Atlas:通过自定义元数据采集器扫描 JPA 实体或 MyBatis 映射文件,将表结构、字段描述、血缘关系同步到 Atlas 进行可视化管理。

总结

Spring Boot 体系下的 ORM 框架(Hibernate、MyBatis、Spring Data JPA)通过标准化模型定义、元数据管理、数据校验、安全控制、审计日志、多租户隔离、事务协调等核心能力,全面支持数据治理的关键需求。实际应用中,需根据业务场景(如高并发、合规性、灵活性)选择合适的 ORM 框架,并结合 Spring 生态工具(如 Spring Security、Seata、Flyway)扩展治理能力,最终实现数据的全生命周期管理。

相关推荐
用户8307196840824 小时前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
Java水解5 小时前
Spring Boot 视图层与模板引擎
spring boot·后端
Java水解5 小时前
一文搞懂 Spring Boot 默认数据库连接池 HikariCP
spring boot·后端
洋洋技术笔记9 小时前
Spring Boot Web MVC配置详解
spring boot·后端
初次攀爬者1 天前
Kafka 基础介绍
spring boot·kafka·消息队列
用户8307196840821 天前
spring ai alibaba + nacos +mcp 实现mcp服务负载均衡调用实战
spring boot·spring·mcp
Java水解1 天前
SpringBoot3全栈开发实战:从入门到精通的完整指南
spring boot·后端
初次攀爬者2 天前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺2 天前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart2 天前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot