QUICK_START.md 6.2 KB

配置版本管理模块 - 快速开始

5分钟快速上手

步骤1: 创建数据库表 (1分钟)

在MySQL数据库中执行以下SQL:

-- 配置版本表
CREATE TABLE `config_version` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(100) DEFAULT NULL COMMENT '名称',
  `app_code` varchar(50) DEFAULT NULL COMMENT '应用编码',
  `key` varchar(100) DEFAULT NULL COMMENT '键值',
  `version` varchar(50) DEFAULT NULL COMMENT '版本号',
  `status` int(11) DEFAULT '0' COMMENT '状态:0-禁用,1-启用',
  `owner_by` bigint(20) DEFAULT NULL COMMENT '所有者',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建人',
  `update_by` bigint(20) DEFAULT NULL COMMENT '更新人',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_delete` tinyint(1) DEFAULT '0' COMMENT '是否删除:0-未删除,1-已删除',
  `enabled` tinyint(1) DEFAULT '1' COMMENT '是否启用:0-禁用,1-启用',
  `sort` int(11) DEFAULT '0' COMMENT '排序',
  PRIMARY KEY (`id`),
  KEY `idx_app_code` (`app_code`),
  KEY `idx_key` (`key`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='配置版本表';

或者执行项目中的SQL文件:

mysql -u your_username -p your_database < storlead-knowledge/sql/config_version.sql

步骤2: 编译项目 (2分钟)

在项目根目录执行:

cd E:\workspace\storlead-sasa-platform
mvn clean install -DskipTests

步骤3: 启动应用 (1分钟)

启动包含knowledge模块的Spring Boot应用。

步骤4: 测试API (1分钟)

方式1: 使用Swagger UI

访问: http://localhost:8080/doc.html

找到"知识库: 配置版本管理"分组,即可看到所有接口。

方式2: 使用curl命令

保存配置版本:

curl -X POST http://localhost:8080/knowledge/config-version/save \
  -H "Content-Type: application/json" \
  -d '{
    "name": "数据库连接配置",
    "appCode": "USER_SERVICE",
    "key": "db.connection.url",
    "version": "1.0.0",
    "status": 1
  }'

查询配置版本列表:

curl -X GET "http://localhost:8080/knowledge/config-version/page?pageIndex=1&pageSize=10"

根据应用编码和键值查询:

curl -X GET "http://localhost:8080/knowledge/config-version/by-app-key?appCode=USER_SERVICE&key=db.connection.url"

常用场景示例

场景1: 为微服务管理配置版本

# 为用户服务添加配置
curl -X POST http://localhost:8080/knowledge/config-version/save \
  -H "Content-Type: application/json" \
  -d '{
    "name": "用户服务数据库URL",
    "appCode": "user-service",
    "key": "spring.datasource.url",
    "version": "1.0.0",
    "status": 1
  }'

# 为订单服务添加配置
curl -X POST http://localhost:8080/knowledge/config-version/save \
  -H "Content-Type: application/json" \
  -d '{
    "name": "订单服务Redis地址",
    "appCode": "order-service",
    "key": "spring.redis.host",
    "version": "1.0.0",
    "status": 1
  }'

场景2: 查询某个应用的所有配置

curl -X GET "http://localhost:8080/knowledge/config-version/page?pageIndex=1&pageSize=100&appCode=user-service"

场景3: 搜索包含特定关键词的配置

curl -X GET "http://localhost:8080/knowledge/config-version/page?pageIndex=1&pageSize=10&keyword=database"

场景4: 更新配置版本

# 先查询获取ID
curl -X GET "http://localhost:8080/knowledge/config-version/by-app-key?appCode=USER_SERVICE&key=db.connection.url"

# 然后更新(假设ID为1)
curl -X PUT http://localhost:8080/knowledge/config-version/update \
  -H "Content-Type: application/json" \
  -d '{
    "id": 1,
    "name": "数据库连接配置",
    "appCode": "USER_SERVICE",
    "key": "db.connection.url",
    "version": "2.0.0",
    "status": 1
  }'

代码中使用

在Service中注入并使用

@Service
public class YourService {
    
    @Resource
    private ConfigVersionService configVersionService;
    
    public void example() {
        // 1. 根据应用编码和键值获取配置
        ConfigVersionEntity config = configVersionService.getByAppCodeAndKey("USER_SERVICE", "db.url");
        
        // 2. 保存新配置
        ConfigVersionDTO dto = new ConfigVersionDTO();
        dto.setName("新配置");
        dto.setAppCode("MY_APP");
        dto.setKey("my.key");
        dto.setVersion("1.0.0");
        dto.setStatus(1);
        configVersionService.saveByDTO(dto);
        
        // 3. 分页查询
        IPage<ConfigVersionVO> page = configVersionService.pageVO(1, 10, "USER_SERVICE", null);
    }
}

在Controller中添加自定义接口

@RestController
@RequestMapping("/your-path/")
public class YourController {
    
    @Resource
    private ConfigVersionService configVersionService;
    
    @GetMapping("config/{appCode}/{key}")
    public Result<ConfigVersionEntity> getConfig(@PathVariable String appCode, 
                                                  @PathVariable String key) {
        ConfigVersionEntity config = configVersionService.getByAppCodeAndKey(appCode, key);
        return Result.ok(config);
    }
}

常见问题

Q1: 为什么保存后createTime和updateTime自动填充了?

A: 因为Entity继承了SysBaseField,框架会自动填充这些字段。

Q2: 如何实现逻辑删除?

A: 调用removeById()方法时,框架会自动将is_delete字段设置为1,而不是真正删除数据。

Q3: 如何添加自定义查询条件?

A: 在Service实现类中使用LambdaQueryWrapper构建查询条件。

Q4: DTO和Entity有什么区别?

A:

  • DTO用于接收前端数据,包含验证注解
  • Entity用于数据库持久化,包含MyBatis Plus注解
  • 两者通过Orika自动映射转换

Q5: 如何添加事务支持?

A: 在Service方法上添加@Transactional注解。

下一步

  1. 阅读完整文档: CONFIG_VERSION_README.md
  2. 查看创建总结: CREATE_SUMMARY.md
  3. 运行单元测试了解更多信息
  4. 根据业务需求扩展功能

需要帮助?

  • 查看完整的API文档(Swagger)
  • 阅读源码注释
  • 参考其他模块的实现方式