IDEA从零搭建SpringCloud Alibaba完整工程

环境:IDEA 2022+/JDK8/Maven3.6+、提前装好 Nacos(单机启动备用)

一、第一步:创建顶层父工程 cloud-parent

1. 新建项目

1、IDEA 首页 → New Project

2、左侧选择 Maven,不要勾选 Archetype,直接 Next

3、填写坐标:

GroupId:com.cloud

ArtifactId:cloud-parent

Version:1.0-SNAPSHOT

4、项目名称:cloud-parent,选择本地存放路径 → Finish

2. 修改父工程 pom.xml
XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cloud</groupId>
    <artifactId>cloud-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>cloud-parent</name>
    <description>SpringCloud父工程统一依赖管理</description>

    <!-- 子模块 -->
    <modules>
        <module>cloud-common</module>
        <module>cloud-user-service</module>
        <module>cloud-order-service</module>
        <module>cloud-nacos-gateway</module>
    </modules>

    <!-- 版本锁定 -->
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <spring.boot.version>2.7.15</spring.boot.version>
        <spring.cloud.alibaba.version>2021.0.1.0</spring.cloud.alibaba.version>
        <spring.cloud.version>2021.0.1</spring.cloud.version>
    </properties>

    <!-- 统一依赖管理,子模块无需写版本 -->
    <dependencyManagement>
        <dependencies>
            <!-- SpringBoot统一父依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- SpringCloud 核心依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- SpringCloud Alibaba 全套 -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!-- 公共依赖所有子模块继承 -->
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

    <!-- 仓库配置 -->
    <repositories>
        <repository>
            <id>aliyunmaven</id>
            <url>https://maven.aliyun.com/repository/public</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

</project>
3. Maven 刷新

右侧 Maven 面板 → 刷新按钮,无报错继续。

二、第二步:创建公共模块 cloud-common(底层依赖包)

1. 在父工程下新建 Module

1、左侧右键 cloud-parent → New → Module

2、选择 Maven,无骨架 Next

3、ArtifactId:cloud-common,GroupId、Version 继承父工程,Next

4、模块名称 cloud-common,存放目录自动在 cloud-parent 内 → Finish

2. 配置 cloud-common pom.xml
XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud-parent</artifactId>
        <groupId>com.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-common</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>
3. 编写统一返回类 Result

1、打开 cloud-common/src/main/java

2、新建包 com.cloud.common.result

3、创建 Result.java

java 复制代码
package com.cloud.common.result;

import lombok.Data;

@Data
public class Result<T> {
    private Integer code;
    private String msg;
    private T data;

    public static <T> Result<T> success(T data) {
        Result<T> r = new Result<>();
        r.setCode(200);
        r.setMsg("操作成功");
        r.setData(data);
        return r;
    }

    public static <T> Result<T> fail(Integer code, String msg) {
        Result<T> r = new Result<>();
        r.setCode(code);
        r.setMsg(msg);
        return r;
    }
}

三、第三步:创建生产者 cloud-user-service

1. 父工程右键新建 Module

右键 cloud-parent → New → Module → Maven

ArtifactId:cloud-user-service → Finish

2. 修改 pom.xml
  • parent 自动继承 cloud-parent
  • 添加依赖:web、nacos 发现、feign、cloud-common
XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud-parent</artifactId>
        <groupId>com.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-user-service</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- 缺少这个就会报你当前的错! -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <dependency>
            <groupId>com.cloud</groupId>
            <artifactId>cloud-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

刷新 Maven

3. 配置 yml 文件

  • user 模块 resources 右键 New → YAML Configuration File → application.yml

    XML 复制代码
    server:
      port: 8081
    spring:
      application:
        name: user-service
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
    4. 创建启动类 + Controller
  • 包:com.cloud
    新建 UserApplication 启动类,添加 @SpringBootApplication @EnableDiscoveryClient

java 复制代码
package com.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class UserApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class,args);
    }
}

新建 controller 包,UserController,编写测试接口
*

java 复制代码
package com.cloud.controller;

import com.cloud.common.result.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {
    @GetMapping("/get/{id}")
    public Result<String> getUser(@PathVariable Long id) {
        return Result.success("用户信息:" + id);
    }
}

四、第四步:创建消费者 cloud-order-service

1. 父工程新建 Module cloud-order-service

流程同上 user-service

2. pom.xml 依赖和 user 完全一致

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud-parent</artifactId>
        <groupId>com.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-order-service</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- 缺少这个就会报你当前的错! -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <dependency>
            <groupId>com.cloud</groupId>
            <artifactId>cloud-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

3. application.yml

XML 复制代码
server:
  port: 8082
spring:
  application:
    name: order-service
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

4. 启动类

java 复制代码
package com.cloud.order;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class,args);
    }
}
5. Feign 远程调用接口
  • 新建包 com.cloud.order.feign → UserFeign
java 复制代码
package com.cloud.order.feign;

import com.cloud.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient("user-service")////对应生产者服务名
public interface UserFeign {
    @GetMapping("/user/get/{id}")
    Result<String> getUser(@PathVariable("id") Long id);
}
6. OrderController
  • 注入 UserFeign,编写创建订单接口
java 复制代码
package com.cloud.order.controller;

import com.cloud.common.result.Result;
import com.cloud.order.feign.UserFeign;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
@RequestMapping("/order")
public class OrderController {
    @Resource
    private UserFeign userFeign;

    @GetMapping("/create/{uid}")
    public Result<String> createOrder(@PathVariable Long uid) {
        Result<String> user = userFeign.getUser(uid);
        return Result.success("创建订单成功,关联用户:" + user.getData());
    }
}

五、第五步:创建网关 cloud-nacos-gateway

1. 父工程新建 Module cloud-nacos-gateway
2. pom.xml 依赖(注意:不能引入 web!冲突)
XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud-parent</artifactId>
        <groupId>com.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-nacos-gateway</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <dependency>
            <groupId>com.cloud</groupId>
            <artifactId>cloud-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>
3. application.yml 路由配置
XML 复制代码
server:
  port: 80
spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    gateway:
      routes:
        - id: user-route
          uri: lb://user-service
          predicates:
            - Path=/user/**
        - id: order-route
          uri: lb://order-service
          predicates:
            - Path=/order/**
4. 网关启动类 GatewayApplication
java 复制代码
package com.cloud.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class,args);
    }
}

刷新 Maven,此时左侧完整工程结构全部出现。
*

六、IDEA 关键配置(必做,否则报错)

1. JDK 统一配置
  • File → Project Structure
    • Project:SDK 选 JDK8,language level 8
    • Modules:所有模块 language level 统一 8
  • File → Settings → Build,Execution,Deployment → Build Tools → Maven
    • Maven home path:本地 maven
    • Runner → JRE:选择 JDK8
2. Lombok 开启注解支持(否则找不到 get/set)

Settings → Build → Compiler → Annotation Processors

勾选:Enable annotation processing → Apply

3. Maven 阿里云镜像加速(避免依赖下载失败)

打开 maven 安装目录 conf/settings.xml,添加镜像

XML 复制代码
<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

七、启动与测试完整流程

前置:启动 Nacos

进入 nacos bin 目录,windows 执行 startup.cmd -m standalone

访问 http://localhost:8848/nacos 账号密码 nacos/nacos

IDEA 启动顺序

cloud-user-service(8081)

运行 UserApplication main 方法

cloud-order-service(8082)

运行 OrderApplication

cloud-nacos-gateway(80)

运行 GatewayApplication

测试地址(全部走网关 80 端口)

查询用户:http://localhost/user/get/1

创建订单:http://localhost/order/create/1

如果上面有报错,分开分步测试验证,方便问题

测试 1:绕过网关,直接访问生产者,验证生产者正常

访问:http://localhost:8081/user/get/1

返回正常数据 → user 服务没问题

404 / 报错 → user 服务本身异常,先修好

测试 2:绕过网关,直接访问消费者,验证 Feign 调用

访问:http://localhost:8082/order/create/1

503 → Feign 找不到 user 服务,聚焦 nacos 注册、loadbalancer 依赖

正常返回 → 问题只在网关路由配置

测试 3:走网关访问

http://localhost/user/get/1

http://localhost/order/create/1

只有前两步正常,网关才会正常转发

订单测试:

相关推荐
·薯条大王4 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
ZJH__GO8 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆8 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光8 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
凤山老林8 小时前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端
marvelyu9 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库
AI人工智能+电脑小能手10 小时前
大白话说Java设计模式-04-工厂方法模式(业务实战篇)
java·设计模式·工厂方法模式·架构设计·代码解耦
BUG指挥官10 小时前
Sa-Token和Spring Security对比
java·后端·spring
小当家.10510 小时前
深入理解 ReAct Agent:从原理到 Java 实战
java·react.js·agent·react·架构设计·agent设计
geminigoth10 小时前
Spring AI Alibaba 入门开发一(备份)
java·人工智能·spring