스프링 클라우드 알리바베이스 기반 프레임워크 구축 가이드

기술 스택

spring cloud alibaba, MySQL8, Mybatis-Plus, Nacos, knife4j API 문서, Lombok

개발 환경 설치

  • JDK17 설치
  • MySQL 설치

프로젝트 구축

2.1 부모-자식 프로젝트 구성

2.1.1 부모 프로젝트 생성

  1. 빈 Maven 프로젝트 생성, 모든 코드 제거하고 pom.xml만 유지
  2. 디렉토리 구조: 그림 2

2.1.2 부모 프로젝트 pom 파일 설정



<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>cloud-framework</groupId>
    <artifactId>cloud-framework</artifactId>
    <packaging>pom</packaging>
    <name>Cloud Framework Parent</name>
    <modules>
        <module>shared-module</module>
        <module>api-gateway</module>
        <module>logging-module</module>
        <module>client-feign</module>
        <module>messaging-module</module>
        <module>service-contract</module>
    </modules>
    <version>1.0.0</version>
    
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.2</version>
    </parent>

    <properties>
        17
        UTF-8
        3.5.3
        8.2.0
        1.18.32
        4.4.0
        2022.0.0
        2022.0.0.0
    </properties>

    <dependencyManagement>
        <dependencies>
            <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>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
            </dependency>
            <dependency>
                <groupId>com.mysql</groupId>
                <artifactId>mysql-connector-j</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
                <version>${knife4j.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.10.1</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <repositories>
        <repository>
            <id>aliyun</id>
            <url>https://maven.aliyun.com/repository/public</url>
        </repository>
        <repository>
            <id>huawei</id>
            <url>https://mirrors.huaweicloud.com/repository/maven/</url>
        </repository>
        <repository>
            <id>central</id>
            <url>https://repo.maven.apache.org/maven2</url>
        </repository>
    </repositories>
</project>

2.1.3 공통 모듈 및 서비스 API 모듈 생성

다른 모듈은 유사한 방식으로 생성합니다. service-contract 모듈의 하위 모듈은 다음과 같이 생성합니다.

service-contract 모듈 pom.xml


<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>
    <parent>
        <groupId>cloud-framework</groupId>
        <artifactId>cloud-framework</artifactId>
        <version>1.0.0</version>
    </parent>

    <groupId>service-contract</groupId>
    <artifactId>service-contract</artifactId>
    <packaging>pom</packaging>
    <modules>
        <module>product-contract</module>
        <module>user-contract</module>
        <module>order-contract</module>
        <module>auth-contract</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>shared-module</groupId>
            <artifactId>shared-module</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>messaging-module</groupId>
            <artifactId>messaging-module</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>client-feign</groupId>
            <artifactId>client-feign</artifactId>
            <version>1.0.0</version>
        </dependency>
        <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>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
</project>

2.1.4 Nacos 연결용 application.yml 작성


spring:
  application:
    name: product-contract
  cloud:
    nacos:
      server-addr: Nacos-서버-IP:8848
      username: nacos-사용자명
      password: nacos-비밀번호
      config:
        server-addr: Nacos-서버-IP:8848
        username: nacos-사용자명
        password: nacos-비밀번호
        file-extension: yml
        group: dev
        namespace: 21e6f6a7-3293-4db2-9fdc-e671111ec121
      discovery:
        group: dev
        namespace: 21e6f6a7-3293-4db2-9fdc-e671111ec121
  config:
    import:
      - optional:nacos:${spring.application.name}.${spring.cloud.nacos.config.file-extension}

2.1.5 Nacos 기본 설정

  1. 새 네임스페이스 생성 (기본 네임스페이스 사용 가능)
  2. 위 application.yml의 네임스페이스 그룹과 ID 수정
  3. 새 네임스페이스에 구성 생성
  4. Data ID와 Group 이름을 application.yml의 설정과 일치하도록 수정하고 아래 구성을 복사하여 데이터베이스 IP, 사용자 이름, 비밀번호를 수정합니다.
Nacos.yml

server:
  port: 8081
  servlet:
    context-path: /product

spring:
  datasource:
    url: jdbc:mysql://MySQL-IP:3306/product_db
    username: mysql-user
    password: mysql-password
    driver-class-name: com.mysql.cj.jdbc.Driver
  data:
    redis:
      database: 1
      host: Redis-IP
      port: 6379
      password: redis-password
      lettuce:
        pool:
          enabled: true
          max-active: 100
          max-wait: 10000
          min-idle: 0
  servlet:
    multipart:
      enabled: true
      max-file-size: 50MB
      max-request-size: 50MB

knife4j:
  enable: true

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2.1.6 시작 클래스 작성


package com.product;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ProductContractApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProductContractApplication.class, args);
        System.out.println("Knife4j 접속 주소: http://localhost:8081/product/doc.html");
    }
}

이제 Nacos, MySQL, Redis 연결이 정상적으로 작동하고 시작 클래스가 정상적으로 실행됩니다. http://localhost:8081/product/doc.html을 클릭하여 다음 페이지가 나타나면 모든 것이 정상이며 코드 작성을 시작할 수 있습니다.

태그: spring-cloud-alibaba nacos microservices maven java

5월 19일 17:10에 게시됨