欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

idea聚合工程搭建過(guò)程詳解

 更新時(shí)間:2022年06月17日 08:58:16   作者:怪?咖@  
本章主要以order訂單服務(wù)來(lái)遠(yuǎn)程調(diào)用payment支付服務(wù)為例,當(dāng)然這里只是簡(jiǎn)單的一個(gè)遠(yuǎn)程調(diào)用,沒(méi)有太復(fù)雜的邏輯,重點(diǎn)是要掌握的是maven的聚合工程搭建,微服務(wù)分模塊的思想,每一個(gè)步驟我都會(huì)詳細(xì)記錄,并且文章下方還提供了git源碼地址

注:本篇文章主要參考周陽(yáng)老師講解的cloud進(jìn)行整理的!

前言

本章主要以order訂單服務(wù)來(lái)遠(yuǎn)程調(diào)用payment支付服務(wù)為例,當(dāng)然這里只是簡(jiǎn)單的一個(gè)遠(yuǎn)程調(diào)用,沒(méi)有太復(fù)雜的邏輯,重點(diǎn)是要掌握的是maven的聚合工程搭建,微服務(wù)分模塊的思想,每一個(gè)步驟我都會(huì)詳細(xì)記錄,并且文章下方還提供了git源碼地址!

最后要實(shí)現(xiàn)的代碼結(jié)構(gòu):

在這里插入圖片描述

框架:mybatis-plus3.4 + springboot2.2.5 + mysql + springcloud的H版本 + spring-cloud-alibaba2.1.0 + maven

本章并不會(huì)用到springcloud相關(guān)組件,只是在父工程聲明了版本!

一、創(chuàng)建父工程

1、New Project

2、聚合父工程的名字

3、指定maven倉(cāng)庫(kù)

4、字符編碼

5、注解生效激活

6、java編譯版本選8

7、File Type過(guò)濾

8、父工程POM

約定 > 配置 > 編碼

<?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.gzl.cn</groupId>
    <artifactId>mscloud</artifactId><packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>cloud-provider-payment8001</module>
    </modules>

    <!-- 統(tǒng)一管理jar包版本 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <lombok.version>1.16.18</lombok.version>
        <mysql.version>5.1.47</mysql.version>
        <druid.version>1.1.16</druid.version>
        <mybatis-plus.boot.version>3.4.0</mybatis-plus.boot.version>
   </properties>

    <!-- 子模塊繼承之后,提供作用:鎖定版本+子modlue不用寫(xiě)groupId和version  -->
    <dependencyManagement>
       <dependencies>
           <!--spring boot 2.2.2-->
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-dependencies</artifactId>
               <version>2.2.2.RELEASE</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
           <!--spring cloud Hoxton.SR1-->
           <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-dependencies</artifactId>
               <version>Hoxton.SR1</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
           <!--spring cloud alibaba 2.1.0.RELEASE-->
           <dependency>
               <groupId>com.alibaba.cloud</groupId>
               <artifactId>spring-cloud-alibaba-dependencies</artifactId>
               <version>2.1.0.RELEASE</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
           <dependency>
               <groupId>mysql</groupId>
               <artifactId>mysql-connector-java</artifactId>
               <version>${mysql.version}</version>
           </dependency>
           <dependency>
               <groupId>com.alibaba</groupId>
               <artifactId>druid</artifactId>
               <version>${druid.version}</version>
           </dependency>
           <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.boot.version}</version>
           </dependency>
           <dependency>
               <groupId>junit</groupId>
               <artifactId>junit</artifactId>
               <version>${junit.version}</version>
           </dependency>
           <dependency>
               <groupId>log4j</groupId>
               <artifactId>log4j</artifactId>
               <version>${log4j.version}</version>
           </dependency>
           <dependency>
               <groupId>org.projectlombok</groupId>
               <artifactId>lombok</artifactId>
               <version>${lombok.version}</version>
               <optional>true</optional>
           </dependency>
       </dependencies>
   </dependencyManagement>


   <build>
       <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <!-- maven中跳過(guò)單元測(cè)試 -->
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

關(guān)于maven依賴(lài) ${xxx.version}報(bào)錯(cuò)問(wèn)題:不用管他,當(dāng)我們有了子項(xiàng)目之后,這里就不報(bào)錯(cuò)了。

二、Maven工程細(xì)節(jié)復(fù)習(xí)

Maven 使用dependencyManagement 元素來(lái)提供了一種管理依賴(lài)版本號(hào)的方式。
通常會(huì)在一個(gè)組織或者項(xiàng)目的最頂層的父POM 中看到dependencyManagement 元素。

作用: pom.xml 中的dependencyManagement 元素能讓所有在子項(xiàng)目中引用一個(gè)依賴(lài)而不用顯式的列出版本號(hào)。 Maven 會(huì)沿著父子層次向上走,直到找到一個(gè)擁有dependencyManagement 元素的項(xiàng)目,然后它就會(huì)使用這個(gè)dependencyManagement 元素中指定的版本號(hào)。

例如在父項(xiàng)目里:xml代碼

<dependencyManagement>
   <dependencies>
	   <dependency>
		   <groupId>mysql</groupId>
		   <artifactId>mysql-connector-java</artifactId>
		   <version>5.1.47</version>
	   </dependency>
   </dependencies>
</dependencyManagement>

然后在子項(xiàng)目里就可以添加mysql-connector時(shí)可以不指定版本號(hào),例如:xml代碼

<dependencies>
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
	</dependency>
</dependencies>

好處: 如果有多個(gè)子項(xiàng)目都引用同一樣依賴(lài),則可以避免在每個(gè)使用的子項(xiàng)目里都聲明一個(gè)版本號(hào),這樣當(dāng)想升級(jí)或切換到另一個(gè)版本時(shí),只需要在頂層父容器里更新,而不需要一個(gè)一個(gè)子項(xiàng)目的修改 ;另外如果某個(gè)子項(xiàng)目需要另外的一個(gè)版本,只需要聲明version就可以。

注意:

  • dependencyManagement里只是聲明依賴(lài),并不實(shí)現(xiàn)引入,因此子項(xiàng)目需要顯示的聲明需要用的依賴(lài)。
  • 如果不在子項(xiàng)目中聲明依賴(lài),是不會(huì)從父項(xiàng)目中繼承下來(lái)的;只有在子項(xiàng)目中寫(xiě)了該依賴(lài)項(xiàng),并且沒(méi)有指定具體版本,
  • 才會(huì)從父項(xiàng)目中繼承該項(xiàng),并且version和scope都讀取自父pom;
  • 如果子項(xiàng)目中指定了版本號(hào),那么會(huì)使用子項(xiàng)目中指定的jar版本。
  • 父工程創(chuàng)建完成執(zhí)行mvn:install將父工程發(fā)布到倉(cāng)庫(kù)方便子工程繼承

三、創(chuàng)建子工程

1、微服務(wù)提供者支付Module模塊

創(chuàng)建過(guò)后的項(xiàng)目結(jié)構(gòu):

(1)、刪掉無(wú)用的文件

(2)、創(chuàng)建cloud-provider-payment8001項(xiàng)目

右鍵項(xiàng)目-》new-》Module

(3)、改pom

<?xml version="1.0" encoding="UTF-8"?>
<?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>mscloud</artifactId><groupId>com.gzl.cn</groupId><version>1.0-SNAPSHOT</version></parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-provider-payment8001</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!--mysql-connector-java-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

(4)、寫(xiě)yml

server:
  port: 8001

spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource            # 當(dāng)前數(shù)據(jù)源操作類(lèi)型
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db2022?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: root

# mybatis-plus配置打印sql日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

(5)、創(chuàng)建表

CREATE TABLE `payment` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `serial` varchar(200) DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

(6)、創(chuàng)建啟動(dòng)類(lèi)

@SpringBootApplication
@MapperScan("com.gzl.cn.mapper")
public class PaymentMain8001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8001.class, args);
    }
}

(7)、創(chuàng)建實(shí)體類(lèi)

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("payment")
public class Payment implements Serializable {

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @TableField(value = "serial")
    private String serial;
}

這個(gè)類(lèi)用于作為controller統(tǒng)一接口返回參數(shù)類(lèi)

@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult<T> {
    private Integer code;
    private String message;
    private T data;

    public CommonResult(Integer code, String message) {
        this(code, message, null);
    }
}

(8)、創(chuàng)建mapper類(lèi)

@Repository
public interface PaymentMapper extends BaseMapper<Payment> {
}

(9)、創(chuàng)建controller類(lèi)

@RestController
@Slf4j
public class PaymentController {

    @Autowired
    private PaymentMapper paymentMapper;

    @PostMapping(value = "/payment/create")
    public CommonResult create(@RequestBody Payment payment) {
        int result = paymentMapper.insert(payment);
        log.info("*****插入操作返回結(jié)果:" + result);

        if (result > 0) {
            return new CommonResult(200, "插入數(shù)據(jù)庫(kù)成功", result);
        } else {
            return new CommonResult(444, "插入數(shù)據(jù)庫(kù)失敗", null);
        }
    }

    @GetMapping(value = "/payment/get/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id) {
        Payment payment = paymentMapper.selectById(id);
        log.info("*****查詢(xún)結(jié)果:{}", payment);
        if (payment != null) {
            return new CommonResult(200, "查詢(xún)成功", payment);
        } else {
            return new CommonResult(444, "沒(méi)有對(duì)應(yīng)記錄,查詢(xún)ID: " + id, null);
        }
    }
}

(10)、測(cè)試一下兩個(gè)接口,確保接口可以正常訪(fǎng)問(wèn)

2、微服務(wù)消費(fèi)者訂單Module模塊

創(chuàng)建過(guò)后的項(xiàng)目結(jié)構(gòu):

(1)、創(chuàng)建cloud-provider-payment8001項(xiàng)目
(2)、改pom(pom跟上個(gè)model的pom一樣就行)
(3)、寫(xiě)yml(跟上面的model也一樣,端口不一樣,名稱(chēng)不一樣)

 server:
  port: 80
spring:
  application:
    name: cloud-order-service

(4)、主啟動(dòng)
(5)、創(chuàng)建配置類(lèi),遠(yuǎn)程調(diào)用我用的RestTemplate,所以這個(gè)配置類(lèi)主要就是把RestTemplate注入到容器

@Configuration
public class ApplicationContextConfig {
   @Bean
   public RestTemplate restTemplate() {
       return new RestTemplate();
   }
}

(6)、創(chuàng)建實(shí)體類(lèi)(跟上個(gè)服務(wù)的實(shí)體類(lèi)一模一樣)
(7)、創(chuàng)建controller

@RestController
public class OrderController {
    public static final String PaymentSrv_URL = "http://localhost:8001";
    @Autowired
    private RestTemplate restTemplate;
    @GetMapping("/consumer/payment/create") //客戶(hù)端用瀏覽器是get請(qǐng)求,但是底層實(shí)質(zhì)發(fā)送post調(diào)用服務(wù)端8001
    public CommonResult create(Payment payment) {
        return restTemplate.postForObject(PaymentSrv_URL + "/payment/create", payment, CommonResult.class);
    }

    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult getPayment(@PathVariable Long id) {
        return restTemplate.getForObject(PaymentSrv_URL + "/payment/get/" + id, CommonResult.class, id);
    }
}

(8)、測(cè)試接口

3、創(chuàng)建common共用

(1)、觀察問(wèn)題,我們可以創(chuàng)建一個(gè)model來(lái)專(zhuān)門(mén)存放公用的 entity 或者 util 等等,甚至共用的pom依賴(lài)我們都可以放到這個(gè)里面來(lái)。

假如要是存放公用的依賴(lài)一定要注意點(diǎn),例如mysql的依賴(lài),一旦放到公共的model里面,那也就是意味著只要是web的模塊引入了公用model,就需要配置mysql,否則項(xiàng)目啟動(dòng)就會(huì)報(bào)錯(cuò)!所以向model存放公用依賴(lài)的時(shí)候一定要慎重!

(2)、新建cloud-api-common
(3)、創(chuàng)建pom

<dependencies>
	<!--實(shí)體類(lèi)當(dāng)中用到了lombok所以需要引入lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.1.0</version>
    </dependency>
    <!--我們用的mybatis-plus所以實(shí)體類(lèi)會(huì)存在一些mybatis-plus的注解,所以需要引入這個(gè)-->
    <dependency>
         <groupId>com.baomidou</groupId>
         <artifactId>mybatis-plus-annotation</artifactId>
         <version>3.4.0</version>
         <scope>compile</scope>
     </dependency>
</dependencies>

(4)、將entity放到這個(gè)項(xiàng)目當(dāng)中
(5)、maven命令clean install一下,或者可以在這里clean install

clean install就是打成jar包放到我們的maven本地倉(cāng)庫(kù)當(dāng)中,然后我們別的項(xiàng)目就可以通過(guò)坐標(biāo)來(lái)引用他。

(6)、刪除各自的原先有過(guò)的entity文件夾
(7)、添加依賴(lài),在8001和80的model當(dāng)中添加,讓他引入我們自己的common

<dependency>
    <groupId>com.gzl.cn</groupId>
    <artifactId>cloud-api-common</artifactId>
    <version>${project.version}</version>
</dependency>

創(chuàng)建過(guò)后的項(xiàng)目結(jié)構(gòu):

git源碼:https://gitee.com/gzl_com/spring-cloud.git

到此這篇關(guān)于idea聚合工程搭建詳解的文章就介紹到這了,更多相關(guān)idea聚合工程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java調(diào)用DOS實(shí)現(xiàn)定時(shí)關(guān)機(jī)的實(shí)例

    Java調(diào)用DOS實(shí)現(xiàn)定時(shí)關(guān)機(jī)的實(shí)例

    Java調(diào)用DOS實(shí)現(xiàn)定時(shí)關(guān)機(jī)的實(shí)例,需要的朋友可以參考一下
    2013-04-04
  • 并行Stream與Spring事務(wù)相遇會(huì)發(fā)生什么?

    并行Stream與Spring事務(wù)相遇會(huì)發(fā)生什么?

    這篇文章主要介紹了并行Stream與Spring事務(wù)相遇會(huì)發(fā)生什么?文章主要解決實(shí)戰(zhàn)中的Bug及解決方案和技術(shù)延伸,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • Java純代碼實(shí)現(xiàn)導(dǎo)出pdf合并單元格

    Java純代碼實(shí)現(xiàn)導(dǎo)出pdf合并單元格

    這篇文章主要為大家詳細(xì)介紹了Java如何純代碼實(shí)現(xiàn)導(dǎo)出pdf與合并單元格功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Mybatis控制臺(tái)打印Sql語(yǔ)句的實(shí)現(xiàn)代碼

    Mybatis控制臺(tái)打印Sql語(yǔ)句的實(shí)現(xiàn)代碼

    MyBatis是一個(gè)支持普通SQL查詢(xún),存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架,下面給大家介紹Mybatis控制臺(tái)打印Sql語(yǔ)句的實(shí)現(xiàn)代碼,非常不錯(cuò),感興趣的朋友一起看下吧
    2016-07-07
  • Java超詳細(xì)梳理IO流的使用方法上

    Java超詳細(xì)梳理IO流的使用方法上

    流(Stream)是指一連串的數(shù)據(jù)(字符或字節(jié)),是以先進(jìn)先出的方式發(fā)送信息的通道,數(shù)據(jù)源發(fā)送的數(shù)據(jù)經(jīng)過(guò)這個(gè)通道到達(dá)目的地,按流向區(qū)分為輸入流和輸出流
    2022-04-04
  • Spring加載加密的配置文件詳解

    Spring加載加密的配置文件詳解

    這篇文章主要為大家詳細(xì)介紹了Spring加載加密的配置文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • JAVA十大排序算法之基數(shù)排序詳解

    JAVA十大排序算法之基數(shù)排序詳解

    這篇文章主要介紹了java中的基數(shù)排序,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 詳解查看JAVA API及JAVA源碼的方法

    詳解查看JAVA API及JAVA源碼的方法

    這篇文章主要介紹了查看JAVA API及JAVA源碼的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Spring Cache監(jiān)控配置與使用規(guī)范的建議

    Spring Cache監(jiān)控配置與使用規(guī)范的建議

    這篇文章主要介紹了Spring Cache監(jiān)控配置與使用規(guī)范的建議,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Tomcat 多端口 多應(yīng)用

    Tomcat 多端口 多應(yīng)用

    當(dāng)你使用Tomcat作為Web Server的時(shí)候,是不是會(huì)想過(guò)這樣的一個(gè)問(wèn)題:如何利用Tomcat建立兩個(gè)Web Server,同時(shí)偵聽(tīng)來(lái)自不同端口的請(qǐng)求呢?要實(shí)現(xiàn)這一點(diǎn)是很簡(jiǎn)單的。以下假設(shè)Tomcat安裝在D:/Tomcat5.0目錄下。
    2008-02-02

最新評(píng)論