# 通用基础设施开发文档 - Part 3(Redis + MyBatis-Plus + IdGenerator + pom.xml) --- ## 一、RedisConfig.java ```java package com.openclaw.config; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.*; @Configuration public class RedisConfig { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory factory) { RedisTemplate tpl = new RedisTemplate<>(); tpl.setConnectionFactory(factory); ObjectMapper om = new ObjectMapper(); om.registerModule(new JavaTimeModule()); om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); om.activateDefaultTyping( om.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL); Jackson2JsonRedisSerializer json = new Jackson2JsonRedisSerializer<>(om, Object.class); StringRedisSerializer str = new StringRedisSerializer(); tpl.setKeySerializer(str); tpl.setHashKeySerializer(str); tpl.setValueSerializer(json); tpl.setHashValueSerializer(json); tpl.afterPropertiesSet(); return tpl; } } ``` ```yaml # application.yml spring: data: redis: host: localhost port: 6379 database: 0 timeout: 3000ms lettuce: pool: max-active: 20 max-idle: 10 min-idle: 2 ``` --- ## 二、MybatisPlusConfig.java ```java package com.openclaw.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 分页插件 interceptor.addInnerInterceptor( new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } } ``` --- ## 三、IdGenerator.java ```java package com.openclaw.util; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.concurrent.atomic.AtomicInteger; /** * 业务单号生成器(无分布式要求,单机递增序列即可)。 * 格式示例: * 订单号 ORD20260316143022000001 * 退款号 REF20260316143022000001 * 充值号 RCH20260316143022000001 */ @Component public class IdGenerator { private static final DateTimeFormatter FMT = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); private final AtomicInteger seq = new AtomicInteger(0); private String next(String prefix) { int s = seq.incrementAndGet() % 1_000_000; return prefix + LocalDateTime.now().format(FMT) + String.format("%06d", s); } public String generateOrderNo() { return next("ORD"); } public String generateRefundNo() { return next("REF"); } public String generateRechargeNo(){ return next("RCH"); } } ``` --- ## 四、核心 pom.xml 依赖 ```xml org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-security com.baomidou mybatis-plus-spring-boot3-starter 3.5.7 com.mysql mysql-connector-j runtime org.springframework.boot spring-boot-starter-data-redis org.apache.commons commons-pool2 io.jsonwebtoken jjwt-api 0.11.5 io.jsonwebtoken jjwt-impl 0.11.5 runtime io.jsonwebtoken jjwt-jackson 0.11.5 runtime org.springframework.boot spring-boot-starter-validation org.projectlombok lombok provided com.fasterxml.jackson.datatype jackson-datatype-jsr310 ``` --- ## 五、application.yml 完整示例 ```yaml server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/openclaw?useSSL=false&serverTimezone=Asia/Shanghai username: root password: your_password driver-class-name: com.mysql.cj.jdbc.Driver data: redis: host: localhost port: 6379 mybatis-plus: configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 0 jwt: secret: change-this-to-a-256-bit-random-secret expire-ms: 86400000 invite: inviter-points: 50 invitee-points: 30 url-prefix: https://app.openclaw.com/invite/ recharge: tiers: - amount: 10 bonusPoints: 10 - amount: 50 bonusPoints: 60 - amount: 100 bonusPoints: 150 - amount: 500 bonusPoints: 800 - amount: 1000 bonusPoints: 2000 ``` --- **文档版本**:v1.0 | **创建日期**:2026-03-16