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

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

订单测试:

相关推荐
代码雕刻家9 小时前
编程语法细节
java·c语言·开发语言
SimonKing9 小时前
Agnes AI出桌面版了,可图可视频,免费用
java·后端·程序员
左左右右左右摇晃9 小时前
手写Tomcat原理整理
java·开发语言·笔记·tomcat
孫治AllenSun9 小时前
【JVM】四大引用类型分析
java·开发语言·jvm
于慨9 小时前
安装java
java
夕除9 小时前
sign 是什么
java·前端
Penina10189 小时前
代码如何导入idea
java·intellij idea
.Hypocritical.10 小时前
Maven笔记——2
java·笔记·maven
huohuopro10 小时前
手写 Tomcat 步骤教程
java·网络