从样板代码到智能交付:CodeArts 在 SpringBoot 项目全流程开发中的实战应用

举报
行者·全栈架构师 发表于 2026/08/10 18:09:11 2026/08/10
【摘要】 本文复盘我用华为云 CodeArts 完整交付一个 SpringBoot 3.x 订单微服务项目的全过程。从 CodeArts IDE 的 AI 编码、CodeArts Repo 的代码托管、CodeArts Check 的静态检查、CodeArts Pipeline 的 CI/CD 流水线到 CCE 部署运行,覆盖需求拆解、编码、审查、构建、测试、部署、回滚 7 个阶段。

一、为什么 SpringBoot 项目需要 CodeArts?

1.1 一个真实订单微服务的交付之痛

2025 年我接手了一个订单中心重构项目,技术栈是 SpringBoot 3.2 + MyBatis-Plus + MySQL + Redis + RocketMQ。团队 6 个人,2 周一个迭代。第一个迭代结束复盘时,痛点清单写得密密麻麻:

009-codearts-springboot-practice_diagram_1.png

最让我难受的是一次线上事故:一个同事在 OrderService.refund() 里漏了空集合判断,本地测试没覆盖到,Code Review 也没人注意到,结果上线第二天大批退款订单抛 NPE,运营群里炸了锅。从 Bug 出现到修复上线,整整 4 小时。

这种痛不是个例。我对团队 3 个月的交付数据做了统计:

痛点 实测数据 占用工时
编写样板代码(Controller/DTO/Mapper) 每人每周 8-10h 25%
人工 Code Review 等待 + 沟通 每个 PR 平均 8h 15%
本地构建 + 手动部署 每次发布 45min 10%
缺陷返工(含线上事故复盘) 每月 22 个人日 18%
排查线上问题(无链路追踪) 每月 15 个人日 12%

加起来 80% 的时间花在了"非创造性劳动"上,真正设计业务逻辑的时间不到 20%。

1.2 CodeArts 能解决什么

华为云 CodeArts 不是一个单一工具,而是覆盖软件开发全生命周期的一体化平台。我把它在 SpringBoot 项目里能发挥的作用整理成一张表:

CodeArts 组件 在 SpringBoot 项目里的作用 我用到的核心能力
CodeArts IDE(码道) AI 编码、智能问答、代码补全 自然语言生成 Controller/Service、单测生成、项目级问答
CodeArts Repo 代码托管、Pull Request Git 仓库、分支保护、PR 审查触发检查
CodeArts Check 静态代码分析、安全扫描 空指针/SQL 注入检测、依赖漏洞(OSS)扫描、自定义规则
CodeArts Pipeline CI/CD 流水线 Maven 构建、单测、镜像构建、CCE 部署、灰度发布
CodeArts Deploy 部署管理 Kubernetes 资源编排、滚动更新、一键回滚
CodeArts Insight 效能度量 提交频率、构建时长、缺陷密度看板

关键认知:CodeArts 的价值不在单点功能,而在端到端串联。一次 Git 提交,触发 AI 审查 → 静态检查 → 构建 → 测试 → 部署 → 监控,全程无需人工搬运。

二、CodeArts × SpringBoot 全流程架构设计

2.1 整体架构

我把订单微服务项目接入了 CodeArts 全流程,整体架构如下:
009-codearts-springboot-practice_diagram_2.png

2.2 一次提交触发的完整链路

这是接入 CodeArts 后,一次普通的 git push 会触发的全流程:
009-codearts-springboot-practice_diagram_3.png

这条链路跑通后,开发者只需要关心"写代码"这一件事,剩下的全部由 CodeArts 自动驱动。

三、项目准备:SpringBoot 项目结构与 CodeArts 工程配置

3.1 项目结构

订单微服务采用标准的 SpringBoot 多模块结构:

order-service/
├── pom.xml                          # 父 POM,统一依赖版本
├── order-api/                       # 对外 API 接口 + DTO
│   ├── pom.xml
│   └── src/main/java/com/example/order/api/
├── order-core/                      # 业务逻辑实现
│   ├── pom.xml
│   └── src/main/java/com/example/order/core/
│       ├── controller/
│       ├── service/
│       ├── repository/
│       └── domain/
├── order-infra/                     # 基础设施适配(DB/Cache/MQ)
│   ├── pom.xml
│   └── src/main/java/com/example/order/infra/
└── order-app/                       # 启动模块 + 配置
    ├── pom.xml
    └── src/main/resources/
        ├── application.yml
        └── application-prod.yml

3.2 在 CodeArts Repo 创建仓库并导入

# 方式一:在 CodeArts Repo 控制台新建空仓库后推送
git init
git remote add origin https://codehub.cn-north-4.myhuaweicloud.com/order-team/order-service.git
git add .
git commit -m "feat: 初始化订单微服务多模块结构"
git push -u origin main

# 方式二:从已有 GitLab/GitHub 仓库导入
# CodeArts Repo 控制台 → 新建仓库 → 导入外部仓库 → 填写 URL + Token

3.3 父 POM 关键配置

统一在父 POM 里锁定依赖版本,避免子模块版本漂移:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.5</version>
    <relativePath/>
</parent>

<properties>
    <java.version>17</java.version>
    <mybatis-plus.version>3.5.5</mybatis-plus.version>
    <opengauss-jdbc.version>5.0.0</opengauss-jdbc.version>
    <hutool.version>5.8.27</hutool.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
        <dependency>
            <groupId>org.opengauss</groupId>
            <artifactId>opengauss-jdbc</artifactId>
            <version>${opengauss-jdbc.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

踩坑①:版本漂移导致构建不一致
最早子模块各自声明版本,结果 CI 上构建通过、本地构建失败(依赖了不同版本的 mybatis-plus)。统一在父 POM 用 <dependencyManagement> 锁定后解决。CodeArts Check 的"依赖版本一致性"规则也能自动发现这类问题。

四、AI 编码实践:CodeArts IDE 在 SpringBoot 开发中的真实效率

4.1 用自然语言生成 Controller

我打开 CodeArts IDE,在 order-core 模块里新建了一个 OrderController.java,输入以下注释:

// 订单 Controller:提供创建订单、查询订单、取消订单、申请退款四个接口
// - 创建订单:POST /api/orders,请求体 OrderCreateDTO,返回订单 ID
// - 查询订单:GET /api/orders/{orderNo},返回订单详情
// - 取消订单:PUT /api/orders/{orderNo}/cancel,需校验订单状态
// - 申请退款:POST /api/orders/{orderNo}/refund,需校验订单状态为 PAID
// 统一返回 ResponseEntity<Result<T>>,异常由全局异常处理器捕获

按下 Ctrl+Enter 触发 AI 生成,CodeArts 自动产出完整代码(节选):

@RestController
@RequestMapping("/api/orders")
@RequiredArgsConstructor
@Slf4j
public class OrderController {

    private final OrderService orderService;

    @PostMapping
    public ResponseEntity<Result<Long>> createOrder(@Valid @RequestBody OrderCreateDTO dto) {
        Long orderId = orderService.create(dto);
        return ResponseEntity.status(HttpStatus.CREATED)
                .body(Result.success(orderId));
    }

    @GetMapping("/{orderNo}")
    public ResponseEntity<Result<OrderDetailVO>> queryOrder(@PathVariable String orderNo) {
        OrderDetailVO detail = orderService.queryByOrderNo(orderNo);
        return ResponseEntity.ok(Result.success(detail));
    }

    @PutMapping("/{orderNo}/cancel")
    public ResponseEntity<Result<Void>> cancelOrder(@PathVariable String orderNo) {
        orderService.cancel(orderNo);
        return ResponseEntity.ok(Result.success());
    }

    @PostMapping("/{orderNo}/refund")
    public ResponseEntity<Result<Void>> refundOrder(@PathVariable String orderNo,
                                                     @Valid @RequestBody RefundDTO dto) {
        orderService.refund(orderNo, dto);
        return ResponseEntity.ok(Result.success());
    }
}

实测对比:手写这段 Controller + DTO + Service 接口大约需要 18 分钟,CodeArts 生成 + 我人工调整耗时 4 分钟,节省 78%。

4.2 项目级智能问答:快速理解陌生代码

接手项目第一周,我对老代码里 OrderSplitService.split() 的拆单逻辑完全看不懂。把整个方法贴给 CodeArts 问答:

我:解释这段 OrderSplitService.split() 方法的业务逻辑,并指出潜在风险

CodeArts:
该方法是订单拆单逻辑,核心流程:
1. 按商家 ID 分组购物车商品(多商家订单拆成子订单)
2. 每个商家内部再按"是否冷链"二次拆分(冷链需独立物流)
3. 计算每个子订单的运费、优惠分摊金额
4. 落库子订单 + 子订单明细

潜在风险:
- L78`groupingBy` 后未判空,若购物车为空会返回空 Map,下游 NPE
- L92 行优惠分摊用 BigDecimal 但未指定 RoundingMode,可能抛 ArithmeticException
- L105 行落库未加 @Transactional,若中间失败会留下脏数据
- 拆单后总金额校验缺失,可能出现子订单金额之和 ≠ 主订单金额

这种项目级理解能力是普通补全工具做不到的——它不是在猜关键词,而是真的读懂了上下文。我根据它的提示修了 3 个 Bug,其中那个 RoundingMode 问题就是上次线上事故的同款。

4.3 单元测试自动生成

最让我惊喜的是单测生成。在 OrderService.refund() 上右键 → “CodeArts: 生成单元测试”,它根据方法签名和业务逻辑自动产出了 5 个测试用例:

@ExtendWith(MockitoExtension.class)
class OrderServiceTest {

    @Mock
    private OrderRepository orderRepository;
    @Mock
    private RefundMQProducer refundMQProducer;
    @InjectMocks
    private OrderService orderService;

    @Test
    void refund_should_success_when_order_status_is_paid() {
        Order order = Order.builder().orderNo("NO202601").status(OrderStatus.PAID).amount(BigDecimal.valueOf(100)).build();
        when(orderRepository.findByOrderNo("NO202601")).thenReturn(Optional.of(order));

        orderService.refund("NO202601", new RefundDTO("用户申请"));

        verify(orderRepository).save(argThat(o -> o.getStatus() == OrderStatus.REFUNDING));
        verify(refundMQProducer).send(any(RefundEvent.class));
    }

    @Test
    void refund_should_throw_when_order_not_found() {
        when(orderRepository.findByOrderNo("NOT_EXIST")).thenReturn(Optional.empty());
        assertThrows(OrderNotFoundException.class,
                () -> orderService.refund("NOT_EXIST", new RefundDTO("理由")));
    }

    @Test
    void refund_should_throw_when_order_status_is_not_paid() {
        Order order = Order.builder().orderNo("NO202602").status(OrderStatus.CREATED).build();
        when(orderRepository.findByOrderNo("NO202602")).thenReturn(Optional.of(order));
        assertThrows(OrderStatusIllegalException.class,
                () -> orderService.refund("NO202602", new RefundDTO("理由")));
    }
    // ... 还有金额边界、并发幂等两个用例
}

接入 CodeArts 后 1 个月,项目单测覆盖率从 38% 提升到 76%,且新增代码覆盖率稳定在 85%+。

4.4 AI 编码效率实测汇总

任务类型 手写耗时 CodeArts 辅助耗时 提效 备注
CRUD Controller + DTO 18min 4min +78% 含参数校验注解
Service 业务方法 + 接口 25min 8min +68% 复杂业务需人工调整
MyBatis-Plus Mapper 12min 2min +83% 标准单表操作
单元测试用例(5 个) 30min 5min +83% 含边界 + 异常用例
陌生代码理解 40min 8min +80% 项目级问答
加权平均 +76%

五、代码质量门禁:CodeArts Check 在 SpringBoot 项目的配置

5.1 创建检查任务并绑定仓库

在 CodeArts Check 控制台创建检查任务,关联 order-service 仓库,语言选 Java,扫描模式选"增量 + 每周一次全量"。

关键规则集配置(针对 SpringBoot 项目定制):

规则类别 启用规则 阻断级别 说明
空指针风险 NP_NULL_ON_SOME_PATHRC_REF_COMPARISON 严重 订单金额、状态字段必检
SQL 注入 SQL_INJECTION_HIBERNATESQL_INJECTION_JDBC 严重 MyBatis ${} 拼接检测
资源泄漏 OS_OPEN_STREAMODR_OPEN_DATABASE_RESOURCE 重要 try-with-resources 检查
并发问题 IS2_INCONSISTENT_SYNCUG_SYNC_SET_UNSYNC_GET 重要 订单状态字段同步
SpringBoot 特定 @Transactional 必须作用于 public 方法 重要 自定义规则
依赖漏洞 OWASP Top 10 + CVE 库 严重 OSS 依赖扫描

5.2 自定义规则:拦截"裸 new Date()"

我们团队约定所有时间戳必须通过 TimeUtil.now() 获取(便于测试 mock)。CodeArts Check 支持自定义 Java 规则,我用 PMD 语法写了一条:

<rule name="NoRawNewDate" message="禁止 new Date(),请使用 TimeUtil.now()" class="net.sourceforge.pmd.java.rule.AbstractJavaRule">
    <description>所有时间获取必须通过 TimeUtil.now(),便于单元测试 mock</description>
    <priority>2</priority>
    <example>
        <![CDATA[
        // 反例
        Date now = new Date();
        // 正例
        Date now = TimeUtil.now();
        ]]>
    </example>
</rule>

接入后第一周就扫出 47 处违规,强制修复后单测里再也没出现过"因为当前时间导致用例偶尔失败"的问题。

5.3 PR 门禁集成

在 CodeArts Repo 的分支保护策略里,把 main 分支设置为:

  • 必须通过 CodeArts Check 检查(严重问题数 = 0)
  • 必须通过至少 1 个人工 Review
  • 必须通过 CI 流水线(构建 + 单测)

009-codearts-springboot-practice_diagram_4.png

踩坑②:增量扫描漏报已删除代码的遗留问题
早期用纯增量扫描,结果某次大重构删掉了有问题的旧代码,但问题一直挂在历史报告里。后来改成"增量 + 每周日凌晨全量重扫",问题清零。建议生产项目都用这个组合策略。

六、CI/CD 流水线:CodeArts Pipeline 端到端自动化

6.1 流水线阶段设计

009-codearts-springboot-practice_diagram_5.png

6.2 流水线 YAML 配置(核心片段)

CodeArts Pipeline 支持可视化编排,也支持 YAML 声明式配置。下面是核心片段:

# .codearts/pipeline.yml
trigger:
  push:
    branches: [main, develop]

stages:
  - name: 编译
    steps:
      - name: Maven 编译
        action: maven
        params:
          command: clean compile -T 4 -Dmaven.repo.local=.m2/repository
          jdk: 17
          cache:
            key: ${pom_hash}
            paths: [.m2/repository]

  - name: 单元测试
    steps:
      - name: 跑单测 + 覆盖率
        action: maven
        params:
          command: test
        post:
          - name: 覆盖率门禁
            script: |
              COVERAGE=$(jq '.total.line.covered / .total.line.count' target/site/jacoco/jacoco.json)
              if (( $(echo "$COVERAGE < 0.80" | bc -l) )); then
                echo "覆盖率 $COVERAGE 低于 80% 门禁,阻断流水线"
                exit 1
              fi

  - name: 静态检查
    steps:
      - name: CodeArts Check 增量扫描
        action: codearts-check
        params:
          task_id: order-service-check
          scan_mode: incremental
          block_on_critical: true

  - name: 镜像构建
    steps:
      - name: Jib 构建并推送 SWR
        action: maven
        params:
          command: jib:build -Pprod
        env:
          DOCKER_REGISTRY: swr.cn-north-4.myhuaweicloud.com/order-team
          IMAGE_TAG: ${git_commit_short}

  - name: 部署 CCE
    steps:
      - name: 滚动更新
        action: cce-deploy
        params:
          cluster: order-prod-cluster
          namespace: prod
          deployment: order-service
          image: ${DOCKER_REGISTRY}/order-service:${IMAGE_TAG}
          strategy:
            type: RollingUpdate
            maxSurge: 1
            maxUnavailable: 0
          health_check:
            path: /actuator/health
            initial_delay: 60s
            timeout: 5min
          auto_rollback_on_failure: true

6.3 用 Jib 替代 Dockerfile 构建镜像

SpringBoot 项目用 Jib 构建镜像无需写 Dockerfile,且能自动分层缓存,构建速度比 docker build 快 3 倍:

<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>3.4.3</version>
    <configuration>
        <from>
            <image>swr.cn-north-4.myhuaweicloud.com/base/eclipse-temurin:17-jre-openeuler</image>
        </from>
        <to>
            <image>swr.cn-north-4.myhuaweicloud.com/order-team/order-service</image>
            <tags><tag>${project.version}</tag></tags>
        </to>
        <container>
            <jvmFlags>
                <flag>-XX:MaxRAMPercentage=75.0</flag>
                <flag>-XX:+UseG1GC</flag>
                <flag>-XX:+HeapDumpOnOutOfMemoryError</flag>
            </jvmFlags>
            <ports><port>8080</port></ports>
            <labels>
                <maintainer>order-team</maintainer>
                <build.source>${git.commit}</build.source>
            </labels>
        </container>
    </configuration>
</plugin>

构建产物分层结构:

内容 大小 变更频率
1 基础镜像 JRE 180MB 极低
2 依赖 jar(dependencies) 95MB 低(pom 变更才更新)
3 资源文件(resources) 2MB
4 应用 classes 1.5MB 高(每次提交)
合计 ~280MB

踩坑③:基础镜像选 alpine 导致时区错乱
早期用 eclipse-temurin:17-jre-alpine,结果订单创建时间比北京时间晚 8 小时。根因是 alpine 默认 UTC 时区且无 tzdata 包。改用基于 openEuler 的基础镜像 eclipse-temurin:17-jre-openeuler(内置 Asia/Shanghai 时区)后解决,同时还能享受鲲鹏原生指令集加速。

七、国产化适配:openGauss + 鲲鹏信创落地

7.1 为什么做国产化适配

订单中心是某金融客户的核心系统,等保三级要求关键组件自主可控。我们把数据层从 MySQL 8.0 迁移到华为自研的 openGauss 5.0,运行时从 x86 ECS 迁移到鲲鹏 920 ECS。

7.2 SpringBoot 接入 openGauss

openGauss 兼容 PostgreSQL 协议,SpringBoot 接入只需替换依赖和驱动:

<!-- 替换 mysql-connector-j -->
<dependency>
    <groupId>org.opengauss</groupId>
    <artifactId>opengauss-jdbc</artifactId>
</dependency>
spring:
  datasource:
    url: jdbc:opengauss://opengauss-prod.internal:5432/order_db?currentSchema=public&batchMode=on
    username: ${DB_USER}
    password: ${DB_PWD}
    driver-class-name: org.opengauss.Driver
    hikari:
      maximum-pool-size: 20
      connection-timeout: 3000
      idle-timeout: 600000

7.3 MySQL → openGauss 语法迁移要点

MySQL 语法 openGauss 语法 迁移注意
AUTO_INCREMENT SERIAL / BIGSERIAL 自动建序列
LIMIT 10, 20 LIMIT 20 OFFSET 10 顺序相反
IFNULL(a, b) COALESCE(a, b) 标准函数
DATE_FORMAT(t, '%Y-%m-%d') to_char(t, 'YYYY-MM-DD') 模板符号不同
ON DUPLICATE KEY UPDATE ON CONFLICT ... DO UPDATE UPSERT 语法
反引号 `col` 双引号 “col” 仅关键字需引用

踩坑④:MyBatis-Plus 分页插件 SQL 兼容性
MyBatis-Plus 3.5.5 默认分页方言选 mysql,迁移后分页查询报错。需在配置里指定 DbType.POSTGRE_SQL

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.POSTGRE_SQL));
    return interceptor;
}

7.4 鲲鹏 920 上的 JVM 调优

鲲鹏 920(ARM64)上跑 SpringBoot,JVM 参数需要针对性调整。我们用毕昇 JDK(BiSheng JDK,华为针对鲲鹏优化的 OpenJDK 发行版):

java -XX:+UseG1GC \
     -XX:MaxRAMPercentage=75.0 \
     -XX:G1HeapRegionSize=16m \
     -XX:+UseLargePages \
     -XX:LargePageSizeInBytes=512m \
     -XX:+AlwaysPreTouch \
     -XX:+UseBiShengIntrinsics \
     -jar order-app.jar

x86 vs 鲲鹏 性能对比(同一份代码,4C8G 配置,wrk 压测 200 并发):

指标 x86 (Cascade Lake) 鲲鹏 920 提升
QPS 4,820 6,150 +27.6%
P99 延迟 78ms 56ms -28.2%
CPU 利用率 92% 78% -14pp
JVM 启动时间 4.2s 3.1s -26%

关键收益:鲲鹏 920 的多核架构 + 毕昇 JDK 的向量化 intrinsic 优化,让订单查询这种"短链路 + 高并发"场景获得了显著收益。同样的 ECS 规格下,鲲鹏单实例 QPS 高出近 30%,意味着可以用更少的实例扛住相同流量,月度算力成本下降约 22%。

八、接入前后效率与质量对比

接入 CodeArts 全流程 6 周后,我对团队的交付数据做了完整对比:

维度 接入前 接入后 变化
需求交付周期 9 天 3.5 天 -61%
单测覆盖率 38% 76% +38pp
Code Review 平均等待 8h 1.5h -81%
构建 + 部署耗时 45min 8min -82%
线上 P1 故障次数 3 次/月 1 次/月 -67%
缺陷密度(每千行) 4.2 1.6 -62%
样板代码占比 40% 12% -28pp
开发者满意度(NPS) +12 +58 +46

最直观的感受:以前周五下午不敢发版,现在随时可以发;以前 Code Review 是负担,现在 PR 上有 AI 摘要 + 检查报告,Review 重点一目了然。

九、踩坑实录(完整版)

除了前面提到的 4 个,再补 2 个值得单独说的:

踩坑⑤:AI 生成代码的"看似正确"陷阱
有一次让 CodeArts 生成一个分页查询接口,它产出的代码用了 Page<T> 作为返回值,但漏了 @Validated 注解,导致 size 参数传 -1 时直接查全表,差点把数据库打挂。
教训:AI 生成的代码必须人工 Review,尤其是涉及参数校验、SQL 拼接、权限校验的代码。我们把 CodeArts Check 的"参数校验"规则设为严重级别,专门拦截这类问题。

踩坑⑥:Pipeline 缓存键设计不当导致依赖不更新
早期 Maven 缓存键用 ${branch_name},结果 develop 分支加了新依赖,缓存命中老的 .m2,构建一直报 ClassNotFoundException。改成 ${pom_hash}(POM 文件内容 hash)后解决:POM 一变就重建缓存,POM 不变就复用。

cache:
  key: ${pom_hash}    # 正确
  # key: ${branch_name}  # 错误
  paths: [.m2/repository]

十、总结与展望

10.1 实践总结

这次把 SpringBoot 订单微服务完整接入华为云 CodeArts,我最大的体会是:CodeArts 不是某个单点工具的替代品,而是把"编码—审查—构建—部署—运维"串成闭环的工程平台。它的价值不在每个组件单独多强,而在端到端自动化后省下来的那些"搬运时间"和"等待时间"。

三个最值得的决策:

  1. AI 编码 + 静态检查组合拳:AI 提效 76%,但必须有 Check 兜底防"看似正确"的代码
  2. 流水线门禁前置:覆盖率、静态检查、依赖扫描全部在合并前阻断,问题进不了 main 分支
  3. 国产化同步推进:openGauss + 鲲鹏不是额外负担,而是享受到了原生优化收益

10.2 后续规划

  • 接入 CodeArts Insight 效能看板,量化团队 DORA 指标(部署频率、变更前置时间、故障恢复时间、变更失败率)
  • 试点 CodeArts IDE 的 Code Agent 能力,让它独立完成"加一个查询接口"这种小型任务
  • 探索 昇腾 NPU + 盘古大模型 在订单异常检测上的应用,把 DevOps 链路延伸到 AIOps

009-codearts-springboot-practice_diagram_6.png

互动引导:你的 SpringBoot 项目目前在 DevOps 的哪个环节最痛?是 AI 编码选型、CI/CD 自动化、还是国产化适配?欢迎评论区交流你的实践数据,我会逐条回复。

下一篇我将拆解 CodeArts Insight 效能看板 如何用 DORA 指标量化团队研发效能,敬请关注。

云原生实战系列文章导航:

文章 链接
第1篇:华为云码道 CodeArts 安装配置实战 https://bbs.huaweicloud.cn/blogs/478402
第2篇:CodeArts Pipeline CI/CD 流水线实战 https://bbs.huaweicloud.cn/blogs/478417
第3篇:Maven + Jib 构建镜像推送 SWR https://bbs.huaweicloud.cn/blogs/479228
第4篇:CCE 部署 Java 微服务实战 https://bbs.huaweicloud.cn/blogs/479788
第5篇:AOM/APM 全链路监控实战 https://bbs.huaweicloud.cn/blogs/480182
第6篇:CodeArts Check 安全扫描实战 https://bbs.huaweicloud.cn/blogs/481168
第7篇:PerfTest + HPA 性能优化实战 https://bbs.huaweicloud.cn/blogs/481763
第8篇:全链路 DevOps 实战复盘 https://bbs.huaweicloud.cn/blogs/481764
第9篇:CodeArts × SpringBoot 全流程实战(本篇) 你在这里
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。