三俭令、(準備篇)Maven父子項目搭建—子級篇

一后德、我們的業(yè)務是一個訂單支付系統(tǒng),創(chuàng)建兩個微服務抄腔。一個 order(端口80) 和 payment(端口8001)

image.png

二瓢湃、本文創(chuàng)建 Moudle 的步驟分為 4 步:

image.png

1、【建Modile】 :選中父級項目名赫蛇,new Moudle绵患;選擇Maven項目和JDK版本;輸入 Moudle 名稱

new Moudle.png

選擇Maven項目.png

輸入 Moudle 名稱.png

可以看到父 pom 中已經(jīng)存在該Moudle 了


父 pom.png

2悟耘、【改POM】:引入子 pom 的 <dependencie>

引入完后記得重新導入Maven的包落蝙,點擊下圖按鈕


image.png
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
           <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

3、【寫YML】:在/src/main/resource 路徑下新建 application.yml 文件

(1)mapperLocations:classpath:mapper/*.xml 表示在resources路徑下有個 mapper 文件夾暂幼,里面防止映射xml文件筏勒。加載的時候會去這里找
(2)數(shù)據(jù)庫配置的url末尾有個 “useSSL=false” 表示建立SSL連接,子啊mysql的高版本中不設置的話旺嬉,連接會報錯

server:
  port: 8001

spring:
  application:
    name: cloud-payment-service

  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/db2020?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: 123456

mybatis:
  mapperLocations: classpath:mapper/*.xml
  type-aliases-package: com.solomon.springcloud.eitities      #所有Entity別名類所在包

(3)踩坑:yml 文件有嚴格的縮進要求管行,縮進不對會報錯,筆者因為datasource定格了就報了如下錯誤:

***************************
APPLICATION FAILED TO START
***************************
 
Description:
 
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
 
Reason: Failed to determine a suitable driver class
 
 
Action:
 
Consider the following:
    If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
    If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

4邪媳、【主啟動】:

package com.solomon.springcloud;

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

@SpringBootApplication
public class PaymentMain8001 {

    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8001.class,args);
    }
}

5捐顷、【寫業(yè)務】:

一、建庫建表

1悲酷、建Mysql庫套菜,字符集選擇 utfmb4,該字符集支持4每個字符四個字節(jié)设易,utf8 只支持每個字符3個字節(jié);


image.png

2蛹头、排序規(guī)則選擇 utf8mb4_general_ci顿肺,它在排序和比較的時候速度較其它更快戏溺。

CREATE TABLE `payment` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `serial` varchar(20) DEFAULT NULL ,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 ;
二、寫業(yè)務代碼Controller屠尊、Service旷祸、Dao、Mapper

參考gitHub地址 https://github.com/Solomon258/cloud2020/tree/dev

三讼昆、重復上述所有步驟托享,新建一個子模塊 cloud-consumer-order80 用于調用 payment

1、下圖是 cloud-consumer-order80 的 pom.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>cloud2020</artifactId>
        <groupId>com.solomon.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-consumer-order80</artifactId>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

</project>

2浸赫、我們的設計是 order 模塊對外暴漏接口闰围,供前端調用,但是 Order 模塊自己沒有業(yè)務邏輯既峡,業(yè)務邏輯在 payment 中羡榴。所以在 cloud-order-service 服務中,我們只需要一個 Controller 層對外暴漏接口运敢,然后訪問 cloud-provider-payment8001 的接口就行校仑。
(1)寫一個配置類,我們通過 RestTemplate 來實現(xiàn)模塊間的 Rest 接口調用

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ApplicationContextConfig {

    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

3传惠、寫Controller迄沫,然后 clean—> install,然后啟動兩個服務卦方,就可以通過 order 調用 payment 了

import com.solomon.springcloud.entities.CommonResult;
import com.solomon.springcloud.entities.Payment;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
public class OderController {

    @Resource
    private RestTemplate restTemplate;

    private final static String PAYMENT_URI = "http://localhost:8001";

    @PostMapping("/consumer/create")
    public CommonResult<Payment> create(@RequestBody Payment payment) {
        return restTemplate.postForObject(PAYMENT_URI + "/paymnet/create",payment,CommonResult.class);
    }

    @GetMapping("/consumer/get/{id}")
    public CommonResult<Payment> get(@PathVariable("id") Long id) {
        return restTemplate.getForObject(PAYMENT_URI + "/paymnet/getPaymentById/"+id,  CommonResult.class);
    }
}

參考gitHub地址 https://github.com/Solomon258/cloud2020/tree/dev

如果覺得有幫助羊瘩,麻煩給去 GitHub 點一顆小星星哦!
有任何問題愿汰,歡迎評論困后,喜歡可以點贊收藏,轉發(fā)請說明出處衬廷!
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摇予,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吗跋,更是在濱河造成了極大的恐慌侧戴,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跌宛,死亡現(xiàn)場離奇詭異酗宋,居然都是意外死亡,警方通過查閱死者的電腦和手機疆拘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門蜕猫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人哎迄,你說我怎么就攤上這事回右÷≡玻” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵翔烁,是天一觀的道長渺氧。 經(jīng)常有香客問我,道長蹬屹,這世上最難降的妖魔是什么侣背? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮慨默,結果婚禮上贩耐,老公的妹妹穿的比我還像新娘。我一直安慰自己业筏,他們只是感情好憔杨,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蒜胖,像睡著了一般消别。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上台谢,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天寻狂,我揣著相機與錄音,去河邊找鬼朋沮。 笑死蛇券,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的樊拓。 我是一名探鬼主播纠亚,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼筋夏!你這毒婦竟也來了蒂胞?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤条篷,失蹤者是張志新(化名)和其女友劉穎骗随,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赴叹,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡鸿染,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了乞巧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涨椒。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丢烘,到底是詐尸還是另有隱情柱宦,我是刑警寧澤些椒,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布播瞳,位于F島的核電站,受9級特大地震影響免糕,放射性物質發(fā)生泄漏赢乓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一石窑、第九天 我趴在偏房一處隱蔽的房頂上張望牌芋。 院中可真熱鬧,春花似錦松逊、人聲如沸躺屁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽犀暑。三九已至,卻和暖如春烁兰,著一層夾襖步出監(jiān)牢的瞬間耐亏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工沪斟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留广辰,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓主之,卻偏偏與公主長得像择吊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子槽奕,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容