1. 程式人生 > >idea+spring boot+dubbox搭建微服務SSM框架環境專案(maven-圖文並解)

idea+spring boot+dubbox搭建微服務SSM框架環境專案(maven-圖文並解)

       搭建專案之前可以先去我的第一篇微服務專案搭建之前的一些工作準備,中介軟體等的設定,這裡是連續建立,用的都是之前建立好的基礎,所以直接更著走了,第一篇微服務連結地址:https://blog.csdn.net/gaofengyan/article/details/85156496

1. 新建project  smbms-springboot-dubbo

建立普通maven工程專案:

工程建好如下:

檢查maven設定(快捷鍵:CTRL+alt+S):

       注意,我這裡沒有選擇自動導包功能,所以後面每一步都需要自己手動重新整理,避免了idea對jar包快速下載造成的倉庫留存太多錯誤而對專案的影響。


2. 新建module   smbms-springboot-dubbox-common(公共module)

同樣建立普通maven的公共module:

公共模組如下,並去掉父類繼承操作:

2.1)增加 json 外掛包 jar包 配置並手動更新:

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.12</version>
        </dependency>

2.2)編寫實體類pojo與service介面

User.java實體類:

package org.kgc1803.smbms.pojo;

import java.io.Serializable;

public class User implements Serializable {
    private Integer id;
    private String userCode;
    private String  userName;
    private String password;

    public User(){
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserCode() {
        return userCode;
    }

    public void setUserCode(String userCode) {
        this.userCode = userCode;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

Order.java實體類:

package org.kgc1803.smbms.pojo;

import org.codehaus.jackson.annotate.JsonProperty;

import java.io.Serializable;

public class Order implements Serializable {
    //@JsonProperty實體類可以自動轉化為  json  類物件資料的屬性
    @JsonProperty
    private Integer id;
    @JsonProperty
    private Integer ownerUserId;
    @JsonProperty
    private String productName;
    @JsonProperty
    private Double price;
    @JsonProperty
    private Integer amount;

    public Order(){
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getOwnerUserId() {
        return ownerUserId;
    }

    public void setOwnerUserId(Integer ownerUserId) {
        this.ownerUserId = ownerUserId;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Integer getAmount() {
        return amount;
    }

    public void setAmount(Integer amount) {
        this.amount = amount;
    }
}

OrderService.java介面:

package org.kgc1803.smbms.service;

import org.kgc1803.smbms.pojo.Order;

import java.util.List;

public interface OrderService {
    //檢視所有
    List<Order> findList(Integer id);
}

UserService.java介面:

package org.kgc1803.smbms.service;


import org.kgc1803.smbms.pojo.User;

/**
 * 使用者介面
 */
public interface UserService {
    //登陸
    User loginUser(User u);
}

2.3)編寫完後這裡需要用maven打成jar包併發布到註冊中倉庫

控制檯出現下面情況說明打包和釋出成功:

檢視倉庫的架包是否釋出成功:


3. 新建module   smbms-springboot-dubbox-provider(提供者module)

按照上面的方式建立提供者模組並對pom.xml檔案做初修改:

3.1)pom.xml配置檔案增加以下相應的jar包 配置

<?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>org.kgc1803</groupId>
    <version>1.0-SNAPSHOT</version>
    <artifactId>smbms-springboot-dubbox-provider</artifactId>
    <!--定義變數名-->
    <properties>
        <java.version>1.8</java.version>
        <spring.boot.version>1.5.10.RELEASE</spring.boot.version>
        <mybaties.spring.boot.version>1.3.2</mybaties.spring.boot.version>
        <mysql.driver.version>5.1.46</mysql.driver.version>
    </properties>

    <dependencies>
        <!--公共包-->
        <dependency>
            <groupId>org.kgc1803</groupId>
            <artifactId>smbms-springboot-dubbox-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--spring-boot-starter 依賴-->
        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>${spring.boot.version}</version>
        </dependency>
        <!--mysql-connector-java-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.driver.version}</version>
        </dependency>
        <!--mybaties-spring-boot-starter-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybaties.spring.boot.version}</version>
        </dependency>
        <!--spring-boot-starter-test-->
        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <version>${spring.boot.version}</version>
        </dependency>
<!-- *************************************以下是spring+dubbox的jar包******************************** -->
        <!--zookeeper 包-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!-- zkclient 包-->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.8</version>
        </dependency>
        <!-- dubbo 包-->
        <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.8.4</version>
        </dependency>
        <!--hessian 包-->
        <dependency>
        <groupId>com.caucho</groupId>
        <artifactId>hessian</artifactId>
        <version>4.0.7</version>
        </dependency>
        <!--dubbox rest 風格包 -->
        <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo-rpc-rest</artifactId>
        <version>2.8.4</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.1.1</version>
        </dependency>

    </dependencies>

</project>

       注意,按照前面的微服務配置方式,是一樣的jar包,只是在遇到jar包版本跨越太大就會出現衝突,並且有很多jar包是重複的,這時候我們需要耐心調整jar包的版本,儘量統一併相容。以上是在之前的微服務專案的jar包中將版本歸一後的的,現在再做一些jar去重,精簡後的配置檔案如下,並且這裡並沒有完全達到全部去重的效果:

<?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>org.kgc1803</groupId>
    <version>1.0-SNAPSHOT</version>
    <artifactId>smbms-springboot-dubbox-provider</artifactId>
    <!--定義變數名-->
    <properties>
        <java.version>1.8</java.version>
        <spring.boot.version>1.5.10.RELEASE</spring.boot.version>
        <mybaties.spring.boot.version>1.3.2</mybaties.spring.boot.version>
        <mysql.driver.version>5.1.46</mysql.driver.version>
    </properties>

    <dependencies>
        <!--公共包-->
        <dependency>
            <groupId>org.kgc1803</groupId>
            <artifactId>smbms-springboot-dubbox-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--spring-boot-starter 依賴-->

        <!--mysql-connector-java-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.driver.version}</version>
        </dependency>
        <!--mybaties-spring-boot-starter-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybaties.spring.boot.version}</version>
        </dependency>
        <!--spring-boot-starter-test-->

<!-- *************************************以下是spring+dubbox的jar包******************************** -->
        <!--zookeeper 包-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!-- zkclient 包-->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.8</version>
        </dependency>
        <!-- dubbo 包-->

        <!--hessian 包-->

        <!--dubbox rest 風格包 -->

        <!--dubbo-springboot-starter 包-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.1.1</version>
        </dependency>

    </dependencies>

</project>

3.2)編寫service 實現類、dao-mapper

UserMapper.java   dao-mapper類

package org.kgc1803.smbms.dao;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.kgc1803.smbms.pojo.User;
import org.springframework.stereotype.Repository;

/**
 * @Mapper 表示該介面是一個註解mybaties介面
 * @Repository 表示注入一個dao實現類
 */
@Mapper
@Repository
public interface UserMapper {
    //登陸
    @Select("SELECT id,userCode,userName\n" +
            "FROM smbms_user\t\n" +
            "WHERE userCode=#{userCode} and password=#{password}")
    @Results(id="userMap",value = {
            @Result(property = "id",column = "id",javaType =Integer.class ),
            @Result(property = "userName",column = "userName",javaType =String.class),
            @Result(property = "userCode",column = "userCode",javaType =String.class)
    })
    User loginUser(User u);
}

UserServiceImpl.java 實現類:

package org.kgc1803.smbms.service;

import com.alibaba.dubbo.config.annotation.Service;
import org.kgc1803.smbms.dao.UserMapper;
import org.kgc1803.smbms.pojo.User;

import javax.annotation.Resource;

/**
 * springboot的註解功能實現了dubbox的配置檔案部分功能,如釋出服務:
 * <dubbo:service protocol="dubbo" interface="cn.kgc1803.smbms_common.service.UserService" ref="userService" timeout="10000" />
 */

@Service(timeout = 10000)
public class UserServiceImpl implements UserService {

    @Resource
    private UserMapper userMapper;

    public User loginUser(User u) {
        return userMapper.loginUser(u);
    }
}

3.3)在spring boot中配置釋出dubbox 服務,spring boot精簡了更多的配置檔案,大多已經加入到註解裡面實現,只有部分需要配置檔案實現。
      1)在application.properties配置檔案配置

#dataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/dubbo-smbms
spring.datasource.username=root
spring.datasource.password=123456
#設定提供者本次釋出的應用名稱
dubbo.application.name=smbms_provider123
dubbo.registry.address=zookeeper://127.0.0.1:2181
#dubbo掃描包 釋出服務所在的包
dubbo.scan.base-packages=org.kgc1803.smbms.service

#伺服器釋出的埠號
server.port=21001

3.4)新建提供者的釋出main視窗SmbmsProviderApplication.java 通過這個main視窗將提供者注入到註冊中心,提供服務;重點是這裡要注意這個main視窗建立的位置,他必須與dao-mapper和service實現類同級或高一級,才能在啟動時掃描到所有類:

package org.kgc1803.smbms;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

@SpringBootApplication
public class SmbmsProviderApplication {
    public static void main(String[] args){
        //專案以web方式啟動
        new SpringApplicationBuilder(SmbmsProviderApplication.class).web(false).run();
    }
}

4. 新建module   smbms-springboot-dubbox-consume(消費者module)

按照上面的方法建立消費者模組:

在main下面建立webapp/WEB-INF/view目錄,以便建立web的jsp頁面。

4.1)增加jar包 修改配置;手動新增spring boot的啟動外掛:

<?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>org.kgc1803</groupId>
    <version>1.0-SNAPSHOT</version>

    <artifactId>smbms-springboot-dubbox-consume</artifactId>
    <packaging>war</packaging>

    <!--定義變數名-->
    <properties>
        <java.version>1.8</java.version>
        <spring.boot.version>1.5.10.RELEASE</spring.boot.version>
        <mybaties.spring.boot.version>1.3.2</mybaties.spring.boot.version>
        <mysql.driver.version>5.1.46</mysql.driver.version>
    </properties>

    <dependencies>
        <!--公共包-->
        <dependency>
            <groupId>org.kgc1803</groupId>
            <artifactId>smbms-springboot-dubbox-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--spring mvc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring.boot.version}</version>
        </dependency>

        <!--dubbo-spring-boot-starter-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.1.1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--zookeeper 包-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!-- zkclient 包-->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.8</version>
        </dependency>
        <!--jsp 頁面外掛jar包-->
        <!--ideal 內建tomcat不支援jsp,增加jsp jar包-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <version>8.5.27</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jsp-api</artifactId>
            <version>8.5.27</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <!--spring boot的啟動外掛-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.1.0.RELEASE</version>
            </plugin>
        </plugins>
    </build>

</project>

4.2)編寫 controller層

package org.kgc1803.smbms.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import org.kgc1803.smbms.pojo.User;
import org.kgc1803.smbms.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.servlet.http.HttpSession;


@Controller
@RequestMapping("/user")
public class UserController {

    @Reference
    private UserService userService;

    //登陸
    @RequestMapping(value = "/dologin.html",method = RequestMethod.POST)
    public String dologin(User user, HttpSession session){
        User u = userService.loginUser(user);
        if (u!=null){//登陸失敗
            session.setAttribute("session_user",u);
            return "index";
        }else {//登陸成功
            return "login";
        }
    }

}

4.3)在spring boot中配置訂閱dubbox服務

      1)在application.properties配置檔案配置

#spring mvc
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp
#伺服器
server.port=8083
server.tomcat.uri-encoding=UTF-8
#spring 字符集
spring.http.encoding.charset=UTF-8
spring.http.encoding.force=true
spring.http.encoding.enabled=true
#dubbo
dubbo.application.name=smbms_consume_123
dubbo.registry.address=zookeeper://127.0.0.1:2181

4.4)新建消費者的main視窗 SmbmsConsumeApplication.java:

package org.kgc1803.smbms;

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

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

注意:消費者的啟動並不使用這個視窗啟動,同樣用右邊的視窗spring boot run啟動。

login.jsp

<%--
  Created by IntelliJ IDEA.
  User: Lenovo
  Date: 2018/12/26
  Time: 15:30
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陸</title>
</head>
<body>
<form method="post" action="${pageContext.request.contextPath}/user/dologin.html">
    使用者名稱:<input type="text" name="userCode">
    密碼:<input type="password" name="password">
    <input type="submit" value="登陸">
</form>
</body>
</html>

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: Lenovo
  Date: 2018/12/24
  Time: 15:00
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>首頁</title>
</head>
<script type="text/javascript" src="${pageContext.request.contextPath}/statics/js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/statics/js/order.js"></script>

<body>
登陸成功,歡迎你:${session_user.userName}<br>

訂單列表:

<ul>

</ul>

</body>

</html>

5.啟動測試

5.1)啟動 SmbmsProviderApplication.java將提供者釋出到註冊中心(前提必須是啟動zookeeper和tomcat服務指令碼):

如下內容說明啟動成功:

如果這裡啟動不了,則需要修改maven配置,如下紅框處:

連結之前的配置:http://localhost:8080/dubbo-admin-2.8.4/

5.2)用spring boot 啟動消費者

連線埠號:http://localhost:8082/

輸入資料庫的登陸資訊驗證:

跳轉成功,到達首頁,並取到值:


以上基礎配置加測試就算成功了。有待更新!