1. 程式人生 > >2、SpringBoot整合

2、SpringBoot整合

2.1. 整合Spring Data JPA

2.1.1. 需求

使用Spring Boot + Spring MVC + Spring Data JPA + EasyUI 框架組合實現部門列表查詢

2.1.2. 環境準備

2.1.2.1. 匯入資料庫表

在MySQL資料庫執行以下語句

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT,

`user_name` varchar(100) DEFAULT NULL COMMENT '使用者名稱',

`password` varchar(100) DEFAULT NULL COMMENT '密碼',

`name` varchar(100) DEFAULT NULL COMMENT '姓名',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

 

INSERT INTO `user` VALUES ('1', 'zhangsan', '123456', '張三');

INSERT INTO `user` VALUES ('2', 'lisi', '123456', '李四');

INSERT INTO `user` VALUES ('3', 'wangwu', '123456', '王五');

INSERT INTO `user` VALUES ('4', 'zhangwei', '123456', '張偉');

INSERT INTO `user` VALUES ('5', 'lina', '123456', '李娜');

INSERT INTO `user` VALUES ('6', 'lilei', '123456', '李磊');

 

2.1.2.2. 建立Maven工程

itcast-info(打jar包),在pom.xml中進行如下配置

<parent>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-parent</artifactId>

  <version>1.4.4.RELEASE</version>

</parent>

<dependencies>

  <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

    <version>1.4.4.RELEASE</version>

  </dependency>

  <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-devtools</artifactId>

    <version>1.4.4.RELEASE</version>

  </dependency>

  <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-data-jpa</artifactId>

    <version>1.4.4.RELEASE</version>

  </dependency>

  <dependency>

    <groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

    <version>5.1.6</version>

  </dependency>

</dependencies>

2.1.2.3. 加入Spring-Boot配置檔案

在src/main/resources 下新增application.properties 配置檔案,內容如下:

#DB Configuration:

spring.datasource.driverClassName=com.mysql.jdbc.Driver

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/taotao

spring.datasource.username=root

spring.datasource.password=root

#JPA Configuration:

spring.jpa.database=MySQL

spring.jpa.show-sql=true

spring.jpa.generate-ddl=true

spring.jpa.hibernate.ddl-auto=update

spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy

2.1.3. 後端實現

2.1.3.1. 建立實體類

import javax.persistence.Entity;

import javax.persistence.Id;

 

@Entity

public class User {

  @Id

  private Long id;

  private String userName;

  private String password;

  private String name;

  //新增 get 和set 方法

}

2.1.3.2. 建立DAO介面

import org.springframework.data.jpa.repository.JpaRepository;

import cn.itcast.info.pojo.User;

 

public interface UserDao extends JpaRepository<User, Long> {

}

 

3.1.3.3. 建立業務邏輯介面
import java.util.List;

import cn.itcast.info.pojo.User;

 

public interface UserService {

  List<User> findAll();

}

 

3.1.3.4. 建立業務邏輯實現類
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import cn.itcast.info.dao.UserDao;

import cn.itcast.info.pojo.User;

import cn.itcast.info.service.UserService;

 

@Service

public class UserServiceImpl implements UserService {

  @Autowired

  private UserDao userDao;

  @Override

  public List<User> findAll() {

    List<User> list = this.userDao.findAll();

    return list;

  }

}

2.1.3.5. 建立Controller

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import cn.itcast.info.pojo.User;

import cn.itcast.info.service.UserService;

 

@RestController

@RequestMapping("user")

public class UserControlelr {

  @Autowired

  private UserService userService;

  @RequestMapping("list")

  public List<User> queryUserAll() {

    List<User> list = this.userService.findAll();

    return list;

  }

}

2.1.3.6. 建立引導類

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

 

@SpringBootApplication

public class Application {

  public static void main(String[] args) {

    SpringApplication.run(Application.class, args);

  }

}

執行引導類Application,開啟瀏覽器輸入http://127.0.0.1:8080/user/list

2.1.4. 前端實現

把資料中的static資料夾,拷貝到src/main/resources路徑下

瀏覽器位址列輸入:http://127.0.0.1:8080/user.html,檢視顯示效果。

執行引導類Application

2.2. 整合MyBatis

2.2.1. 簡單整合

2.2.1.1. 加入依賴

在pom.xml中加入以下依賴

<!-- SpringBoot的Mybatis啟動器 -->

<dependency>

  <groupId>org.mybatis.spring.boot</groupId>

  <artifactId>mybatis-spring-boot-starter</artifactId>

  <version>1.1.1</version>

</dependency>

 

2.2.1.2. 編寫Mapper

和之前的方式一樣,只是多了兩個註解

@Mapper:宣告Mapper介面

@Select:宣告這個介面所需要使用的sql,當然,有查詢的註解,肯定就有增刪改的註解。

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import org.apache.ibatis.annotations.Select;

import cn.itcast.info.pojo.User;

 

@Mapper

public interface UserMapper {

  @Select("select * from user where name like '%${value}%'")

  public List<User> queryUserByName(String name);

}

2.2.1.3. 編寫Service和Controller

新增Service呼叫Mapper

@Service

public class UserServiceImpl implements UserService {

  @Autowired

  private UserDao userDao;

  @Autowired

  private UserMapper userMapper;

  @Override

  public List<User> findAll() {

    List<User> list = this.userDao.findAll();

    return list;

  }

  @Override

  public List<User> queryUserByName(String name) {

    List<User> list = this.userMapper.queryUserByName(name);

    return list;

  }

}

 

修改Controller:

@RestController

@RequestMapping("user")

public class UserControlelr {

  @Autowired

  private UserService userService;

  @RequestMapping("list")

  public List<User> queryUserAll() {

    List<User> list = this.userService.findAll();

    return list;

  }

  @RequestMapping("list/{name}")

  public List<User> queryUserAll(@PathVariable String name) {

    List<User> list = this.userService.queryUserByName(name);

    return list;

  }

}

2.2.1.4. 測試

瀏覽器位址列輸入:http://127.0.0.1:8080/user/list/張,檢視顯示效果。

2.2.2. 整合通用Mapper和分頁助手

以上所有的配置都是使用的預設配置,我們只需要專注java程式碼的開發即可,不需要加入配置檔案了。

但並不是所有得場景都是簡單的業務,有時候業務複雜,需要我們加入自定義的配置檔案;有時候需要載入例如分頁助手這樣的外掛,輔助開發,所以我們也需要了解如何載入這些

配置。

2.2.2.1. 加入依賴

我們需要加入通用Mapper和分頁外掛,所以需要在pom.xml加入以下依賴

<!-- 通用Mapper -->

<dependency>

  <groupId>com.github.abel533</groupId>

  <artifactId>mapper</artifactId>

  <version>2.3.4</version>

</dependency>

<!-- 分頁助手 -->

<dependency>

  <groupId>com.github.pagehelper</groupId>

  <artifactId>pagehelper</artifactId>

  <version>3.7.5</version>

</dependency>

<dependency>

  <groupId>com.github.jsqlparser</groupId>

  <artifactId>jsqlparser</artifactId>

  <version>0.9.1</version>

</dependency>

2.2.2.2. 修改配置檔案

在application.properties新增配置

#spring整合Mybatis環境

#pojo別名掃描包

mybatis.type-aliases-package=cn.itcast.info.pojo

#載入Mybatis核心配置檔案

mybatis.mapper-locations=classpath:mapper/*Mapper.xml

mybatis.config-location=classpath:mybatis/SqlMapConfig.xml

#配置連線池,還需要在pom.xml中加入該連線池的依賴

#spring.datasource.type=com.jolbox.bonecp.BoneCPDataSource

在src\main\resources\mapper路徑下加入UserMapper.xml配置檔案

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<mapper namespace="cn.itcast.info.dao.UserMapper">

  <select id="queryAll" resultType="user">

    select * from user

  </select>

</mapper>

 

在src\main\resources\mybatis加入SqlMapConfig.xml配置檔案,用以載入通用Mapper和分頁助手

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<!-- 分頁助手 -->

  <plugins>

    <plugin interceptor="com.github.pagehelper.PageHelper">

      <property name="dialect" value="mysql" />

      <!-- 該引數預設為false -->

      <!-- 設定為true時,使用RowBounds分頁會進行count查詢 -->

      <property name="rowBoundsWithCount" value="true" />

    </plugin>

    <!-- 通用Mapper -->

    <plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">

      <!--主鍵自增回寫方法,預設值MYSQL,詳細說明請看文件 -->

      <property name="IDENTITY" value="MYSQL" />

      <!--通用Mapper介面,多個通用介面用逗號隔開 -->

      <property name="mappers" value="com.github.abel533.mapper.Mapper" />

    </plugin>

  </plugins>

</configuration>

2.2.2.3. 編寫Mapper

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import org.apache.ibatis.annotations.Select;

import cn.itcast.info.pojo.User;

 

//extends com.github.abel533.mapper.Mapper<User>:需要繼承通用Mapper

@Mapper

public interface UserMapper extends com.github.abel533.mapper.Mapper<User> {

  @Select("select * from user where name like '%${value}%'")

  public List<User> queryUserByName(String name);

  // 使用UserMapper.xml配置檔案

  public List<User> queryAll();

}

2.2.2.4. 編寫Service和Controller

Service編寫:

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import com.github.pagehelper.PageHelper;

import cn.itcast.info.dao.UserDao;

import cn.itcast.info.dao.UserMapper;

import cn.itcast.info.pojo.User;

import cn.itcast.info.service.UserService;

 

@Service

public class UserServiceImpl implements UserService {

  @Autowired

  private UserDao userDao;

  @Autowired

  private UserMapper userMapper;

  @Override

  public List<User> findAll() {

    List<User> list = this.userDao.findAll();

    return list;

  }

  @Override

  public List<User> queryUserByName(String name) {

    List<User> list = this.userMapper.queryUserByName(name);

    return list;

  }

  // 呼叫使用UserMapper.xml的Mapper

  @Override

  public List<User> queryAll() {

    List<User> list = this.userMapper.queryAll();

    return list;

  }

  // 使用通用Mapper和分頁助手

  @Override

  public List<User> queryUserByPage(Integer page, Integer rows) {

    // 設定分頁

    PageHelper.startPage(page, rows);

    // 使用通用Mapper的方法進行查詢所有資料

    List<User> list = this.userMapper.select(null);

    return list;

  }

}

 

Controller編寫:

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import cn.itcast.info.pojo.User;

import cn.itcast.info.service.UserService;

 

@RestController

@RequestMapping("user")

public class UserControlelr { 

  @Autowired

  private UserService userService;

  @RequestMapping("list")

  public List<User> queryUserAll() {

    List<User> list = this.userService.findAll();

    return list;

  }

  @RequestMapping("list/{name}")

  public List<User> queryUserAll(@PathVariable String name) {

    List<User> list = this.userService.queryUserByName(name);

    return list;

  }

  @RequestMapping("list/query")

  public List<User> queryUserAll2() {

    List<User> list = this.userService.queryAll();

    return list;

  }

  @RequestMapping("list/{page}/{rows}")

  public List<User> queryUserAll(@PathVariable Integer page, @PathVariable Integer rows) {

    List<User> list = this.userService.queryUserByPage(page, rows);

    return list;

  }

}

2.2.2.5. 測試

測試使用UserMapper.xml

瀏覽器位址列輸入:http://127.0.0.1:8080/user/list/query,檢視效果。

測試使用通用Mapper和分頁助手

瀏覽器位址列輸入:http://127.0.0.1:8080/user/list/2/2,檢視效果。

2.3. 整合Redis

2.3.1. 註解方式實現新增快取

需求:基於上例程式碼,將列表資料快取到Redis

2.3.1.1. 加入依賴

在pom.xml加入依賴

<!-- 配置使用redis啟動器 -->

<dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-redis</artifactId>

</dependency>

2.3.1.2. 修改引導類

修改開啟快取,添加註解@EnableCaching

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cache.annotation.EnableCaching;

 

@SpringBootApplication

@EnableCaching

public class Application {

  public static void main(String[] args) {

    SpringApplication.run(Application.class, args);

  }

}

2.3.1.3. 設定實現序列化介面

需要修改實體,讓實體實現序列化介面

@Entity

public class User implements Serializable {

  @Id

  private Long id;

  private String userName;

  private String password;

  private String name;

  。。。。。。

}

2.3.1.4. 實現新增/刪除快取

修改UserServiceImpl,新增@Cacheable註解實現快取新增

@Override

@Cacheable(value = "userCache", key = "'user.findAll'")

public List<User> findAll() {

  System.out.println("從Mysql中查詢");

  List<User> list = this.userDao.findAll();

  return list;

}

@Override

@CacheEvict(value = "userCache", key = "'user.findAll'")

public List<User> queryUserByName(String name) {

  System.out.println("快取清理了!");

  List<User> list = this.userMapper.queryUserByName(name);

  return list;

}

這樣設定完成後,執行findAll()方法就會使用快取,如果快取沒有就新增快取,而queryUserByName(String name)方法則是刪除快取

@Cacheable:新增/使用快取

@CacheEvict:刪除快取

引數value是快取的名字,在執行的時候,會找叫這個名字的快取使用/刪除

引數key預設情況下是空串””,是Spring的一種表示式語言SpEL,我們這裡可以隨意指定,但是需要注意一定要加單引號

2.3.2. redis的深入使用

2.3.2.1. 直接操作redis

redis除了作為快取使用,還有很多其他的作用,例如利用redis的單執行緒獲取唯一數,例如使用redis為單點登入系統儲存使用者登入資訊等,我們就需要直接操作redis。

官網提供了三種介面RedisConnectionFactory, StringRedisTemplate 和 RedisTemplate,我們可以直接注入或者自己實現其他的實現類,來直接操作redis。我們這裡使用

RedisTemplate來操作Redis。我們只需要直接注入RedisTemplate即可使用以下方法操作redis的五種不同的資料型別

測試:

@Autowired

private RedisTemplate<String, String> redisTemplate;

@Override

@CacheEvict(value = "userCache", key = "'user.findAll'")

public List<User> queryUserByName(String name) {

  // 儲存資料

  this.redisTemplate.boundValueOps("redis").set("Hello redis !");

  // 設定有效時間為100秒

  this.redisTemplate.boundValueOps("redis").expire(100l, TimeUnit.SECONDS);

  // 給value每次執行加一操作

  this.redisTemplate.boundValueOps("count").increment(1l);

  System.out.println("快取清理了!");

  List<User> list = this.userMapper.queryUserByName(name);

  return list;

}

2.3.2.2. 設定redis連線屬性

redis單機版

redis啟動器預設情況下會找本地的redis服務,埠號預設是6379如果需要訪問其他伺服器的redis,則需要在application.properties中進行如下配置:

#Redis

spring.redis.host=192.168.37.161

spring.redis.port=6379

這表示會去找ip為192.168.37.161和埠為6379的服務

redis叢集版

#Redis

#spring.redis.host=192.168.37.161

#spring.redis.port=6379

 

#Redis Cluster

spring.redis.cluster.nodes=192.168.37.161:7001,192.168.37.161:7002,192.168.37.161:7003,192.168.37.161:7004,192.168.37.161:7005,192.168.37.161:7006

切換到叢集版只需要做以上配置,配置叢集版節點資訊,註釋掉單機版資訊

2.4. 整合ActiveMQ

2.4.1. 加入依賴

在pom.xml中加入以下配置

<!-- 配置ActiveMQ啟動器 -->

<dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-activemq</artifactId>

</dependency>

2.4.2. 建立佇列

在引導類中新增以下方法,設定佇列

@SpringBootApplication

@EnableCaching

public class Application {

  public static void main(String[] args) {

    SpringApplication.run(Application.class, args);

  }

  @Bean

  public Queue queue() {

    return new ActiveMQQueue("itcast.queue");

  }

}

2.4.3. 傳送訊息

編寫Controller,傳送訊息:

import javax.jms.Destination;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.jms.core.JmsTemplate;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

 

@RestController

@RequestMapping("queue")

public class QueueController {

  //注入傳送訊息的物件

  @Autowired

  private JmsTemplate jmsTemplate;

  //注入訊息佇列

  @Autowired

  private Destination destination;

  //編寫傳送訊息的方法

  @RequestMapping("send/{message}")

  public String send(@PathVariable String message) {

    this.jmsTemplate.convertAndSend(destination, message);

    return "訊息傳送成功!訊息內容:" + message;

  }

}

2.4.4. 接收訊息
編寫bean,加入@Component註解讓spring管理這個bean,作為接收訊息的消費者

import org.springframework.jms.annotation.JmsListener;

import org.springframework.stereotype.Component;

 

@Component

public class Consumer {

  // 接受訊息方法

  @JmsListener(destination = "itcast.queue")

  public void readMessage(String text) {

    System.out.println("接受到的訊息是:" + text);

  }

}

測試:

啟動服務後,在瀏覽器執行http://127.0.0.1:8080/queue/send/發訊息了11,即可看到訊息傳送成功,同時可以在控制檯看到列印資訊

我們沒有安裝ActiveMQ,為什麼可以使用?因為Spring Boot 內建了ActiveMQ 的服務,所以我們不用單獨啟動也可以實現訊息的傳送和接收。

2.4.5. 使用外部服務

首先確認有一臺外部ActiveMQ服務可以使用

在application.properties中加入以下配置

#ActiveMQ

spring.activemq.broker-url=tcp://192.168.37.161:61616

這樣就加入了ActiveMQ服務的地址

2.5. 整合junit

2.5.1. 加入依賴

在pom.xml中加入測試依賴

<!-- 配置測試啟動器 -->

<dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-test</artifactId>

  <scope>test</scope>

</dependency>

2.5.2. 編寫測試類

import javax.jms.Destination;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.jms.core.JmsTemplate;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import cn.itcast.info.Application;

 

@RunWith(SpringJUnit4ClassRunner.class)

@SpringBootTest(classes = Application.class)

public class MessageTest {

  @Autowired

  private Destination destination;

  @Autowired

  private JmsTemplate jmsTemplate;

  @Test

  public void test() {

    System.out.println("我發訊息了!");

    this.jmsTemplate.convertAndSend(destination, "Hello ActiveMQ!");

  }

}

SpringRunner 與SpringJUnit4ClassRunner 是繼承關係,但是沒有不同的地方,只是看起來子類SpringRunner要短一些而已。

@SpringBootTest 註解的class 屬性要指定引導類的class

2.6. 整合dubbox

2.6.1. 環境準備

2.6.1.1. dubbox

dubbo是一個分散式的服務架構,可直接用於生產環境作為SOA服務框架。官網首頁:http://dubbo.io/  

淘寶將這個專案開源出來以後,得到了不少同行的支援,包括:

噹噹網的擴充套件版本dubbox :https://github.com/dangdangdotcom/dubbox,京東的擴充套件版本jd-hydra: http://www.oschina.NET/p/jd-hydra

不過,略有遺憾的是, dubbo由於某些原因導致dubbo團隊已經解散,已經很牛沒有更新了,反到是噹噹網的擴充套件版本仍在持續發展。

因為dubbox支援更新的spring版本,所以我們使用dubbox。Dubbox在maven中央倉庫並沒有對應的依賴,所以我們需要自己動手將其釋出到我們的本地倉庫來使用。

使用git從碼雲上把dubbox的程式碼clone下來,地址:https://git.oschina.net/wuyu15255872976/dubbox.git。

執行Maven命令把工程安裝到本地倉庫。

命令:clean install -Dmaven.test.skip,課程資料提供的倉庫已經安裝好了,可以直接使用

2.6.1.2. spring-boot-starter-dubbo

我們以前在使用dubbo的時候都是用的xml配置。而在整合Spring Boot的時候可以使用@ImportResource註解來引入的dubbo的xml配置。

但是Spring Boot本身並不推薦xml配置。怎麼解決這個矛盾,我們可以自己準備一個Spring Boot Starter dubbo的專案來引導Spring Boot對Dubbo的自動化配置。

已經有人開發好了這個自動化配置專案,我們直接使用就行了

使用git從碼雲上把spring-boot-starter-dubbo的程式碼clone下來,

地址:https://git.oschina.net/wuyu15255872976/spring-boot-starter-dubbo.git。

執行Maven命令把工程安裝到本地倉庫,命令:clean install -Dmaven.test.skip。

為了統一管理,把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>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>1.4.4.RELEASE</version>

  </parent>

  <artifactId>spring-boot-starter-dubbo</artifactId>

  <version>1.4.4.RELEASE</version>

  <name>Spring Boot Dubbo Rpc</name>

  <description>Spring Boot Dubbo Rpc</description>

  <url>http://projects.spring.io/spring-boot/</url>

  <organization>

    <name>Pivotal Software, Inc.</name>

    <url>http://www.spring.io</url>

  </organization>

  <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <java.version>1.7</java.version>

  </properties>

     <dependencies>

    <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-actuator</artifactId>

      </dependency>

    <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-configuration-processor</artifactId>

    </dependency>

    <dependency>

      <groupId>com.alibaba</groupId>

      <artifactId>dubbo</artifactId>

      <version>2.8.5-SNAPSHOT</version>

      <exclusions>

        <exclusion>

          <artifactId>spring</artifactId>

          <groupId>org.springframework</groupId>

        </exclusion>

      </exclusions>

    </dependency>

    <!-- zookeeper 客戶端 -->

    <dependency>

      <groupId>com.github.sgroschupf</groupId>

      <artifactId>zkclient</artifactId>

      <version>0.1</version>

    </dependency>

  </dependencies>

  <dependencyManagement>

    <dependencies>

      <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-dependencies</artifactId>

        <version>1.4.4.RELEASE</version>

        <type>pom</type>

        <scope>import</scope>

      </dependency>

    </dependencies>

  </dependencyManagement>

  <build>

    <plugins>

      <plugin>

        <artifactId>maven-source-plugin</artifactId>

        <configuration>

          <attach>true</attach>

        </configuration>

        <executions>

          <execution>

            <phase>compile</phase>

            <goals>

              <goal>jar</goal>

            </goals>

          </execution>

        </executions>

      </plugin>

    </plugins>

  </build>

</project>

2.6.1.3. zookeeper註冊中心

我們使用zookeeper作為dubbo的註冊中心。

這裡使用的zookeeper註冊中心地址是:192.168.37.161:2181,修改hosts,配置註冊中心的域名是zookeeper.taotao.com

2.6.2. 搭建專案

taotao-parent作為所有工程的父工程

taotao- interface作為提供pojo和抽取服務介面的

taotao-provider作為服務提供者

taotao-consumer作為服務消費者

2.6.2.1. 搭建taotao-parent

建立taotao-parent,並打pom包,這裡配置公共使用的依賴。

修改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>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>1.4.4.RELEASE</version>

  </parent>

  <groupId>com.taotao</groupId>

  <artifactId>taotao-parent</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>pom</packaging>

  <properties>

  <!-- 配置java版本 -->

    <java.version>1.7</java.version>

  </properties>

  <dependencies>

    <!-- 配置測試啟動器 -->

    <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-test</artifactId>

      <scope>test</scope>

    </dependency>

    <!-- 配置web啟動器 -->

    <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-web</artifactId>

      <optional>true</optional>

    </dependency>

    <!-- 配置dubbo啟動器 -->

    <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-dubbo</artifactId>

      <version>1.4.4.RELEASE</version>

      <optional>true</optional>

    </dependency>

  </dependencies>

</project>

2.6.2.2. 搭建taotao-interface

建立taotao-interface,並打jar包。

修改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>com.taotao</groupId>

    <artifactId>taotao-parent</artifactId>

    <version>0.0.1-SNAPSHOT</version>

  </parent>

  <groupId>com.taotao</groupId>

  <artifactId>taotao-interface</artifactId>

  <version>0.0.1-SNAPSHOT</version>

</project>

2.6.2.3. 搭建taotao-provider

建立taotao-provider,並打jar包。

修改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>com.taotao</groupId>

    <artifactId>taotao-parent</artifactId>

    <version>0.0.1-SNAPSHOT</version>

  </parent>

  <groupId>com.taotao</groupId>

  <artifactId>taotao-provider</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <dependencies>

    <!-- 加入taotao-interface依賴 -->

    <dependency>

      <groupId>com.taotao</groupId>

      <artifactId>taotao-interface</artifactId>

      <version>0.0.1-SNAPSHOT</version>

    </dependency>

    <!-- 配置MyBatis啟動器 -->

    <dependency>

      <groupId>org.mybatis.spring.boot</groupId>

      <artifactId>mybatis-spring-boot-starter</artifactId>

      <version>1.1.1</version>

    </dependency>

    <!-- MySQL連線驅動 -->

    <dependency>

      <groupId>mysql</groupId>

      <artifactId>mysql-connector-java</artifactId>

    </dependency>

  </dependencies>

</project>

2.6.2.4. 搭建taotao-consumer

建立taotao-consumer,並打jar包。

修改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>com.taotao</groupId>

    <artifactId>taotao-parent</artifactId>

    <version>0.0.1-SNAPSHOT</version>

  </parent>

  <groupId>com.taotao</groupId>

  <artifactId>taotao-consumer</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <dependencies>

    <!-- 加入taotao-interface依賴 -->

    <dependency>

      <groupId>com.taotao</groupId>

      <artifactId>taotao-interface</artifactId>

      <version>0.0.1-SNAPSHOT</version>

    </dependency>

  </dependencies>

</project>

2.7. 實現功能

2.7.1. 實現taotao-interface

編寫pojo

import java.io.Serializable;

 

public class User implements Serializable {

  private Long id;

  private String userName;

  private String password;

  private String name;

  get/set方法

}

 

編寫Service介面

import com.taotao.common.pojo.User;

 

public interface UserService {

  public User queryUserById(Long id);

}

 

1.7.2. 實現taotao-provider

編寫UserMapper

import org.apache.ibatis.annotations.Mapper;

import org.apache.ibatis.annotations.Select;

import com.taotao.common.pojo.User;

 

@Mapper

public interface UserMapper {

  @Select("select * from user where id=#{id}")

  public User queryUserById(Long id);

}

 

編寫UserServiceImpl實現類

import org.springframework.beans.factory.annotation.Autowired;

import com.alibaba.dubbo.config.annotation.Service;

import com.taotao.common.consumer.UserService;

import com.taotao.common.pojo.User;

import com.taotao.mapper.UserMapper;

 

@Service

public class UserServiceImpl implements UserService {

  @Autowired

  private UserMapper userMapper;

  @Override

  public User queryUserById(Long id) {

    User user = this.userMapper.queryUserById(id);

    return user;

  }

}

 

編寫引導類;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.alibaba.boot.dubbo.EnableDubboAutoConfiguration;

 

@SpringBootApplication

@EnableDubboAutoConfiguration

public class ProviderApplication {

  public static void main(String[] args) {

    SpringApplication.run(ProviderApplication.class, args);

  }

}

 

在src/main/resources加入配置檔案application.properties

#DB Configuration:

spring.datasource.driverClassName=com.mysql.jdbc.Driver

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/taotao

spring.datasource.username=root

spring.datasource.password=root

#配置伺服器訪問埠號

server.port=8081

#配置dubbo資訊

#配置服務名稱

spring.dubbo.application.name=taotao-provider

#註冊中心型別

spring.dubbo.registry.protocol=zookeeper

#註冊中心連線方式

spring.dubbo.registry.address=manager.taotao.com:2181

#配置服務呼叫所使用的協議

spring.dubbo.protocol.name=dubbo

#配置服務埠號

spring.dubbo.protocol.port=20880

#配置服務訪問地址

spring.dubbo.protocol.host=localhost

#配置dubbo掃描

spring.dubbo.scan=com.taotao.provider

2.7.3. 實現taotao-consumer

編寫Controller

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import com.alibaba.dubbo.config.annotation.Reference;

import com.taotao.common.consumer.UserService;

import com.taotao.common.pojo.User;

 

@RestController

@RequestMapping("user")

public class UserController {

  @Reference

  private UserService userService;

  @RequestMapping("{id}")

  public User queryUserById(@PathVariable Long id) {

    User user = this.userService.queryUserById(id);

    return user;

  }

}

 

編寫引導類

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.alibaba.boot.dubbo.EnableDubboAutoConfiguration;

 

@SpringBootApplication

@EnableDubboAutoConfiguration

public class ConsumerApplication {

  public static void main(String[] args) {

    SpringApplication.run(ConsumerApplication.class, args);

  }

}

 

在src/main/resources加入配置檔案application.properties

#配置伺服器訪問埠號

server.port=8080

#配置dubbo資訊

#配置服務名稱

spring.dubbo.application.name=taotao-consumer

#註冊中心型別

spring.dubbo.registry.protocol=zookeeper

#註冊中心連線方式

spring.dubbo.registry.address=manager.taotao.com:2181

#配置服務呼叫所使用的協議

spring.dubbo.protocol.name=dubbo

#配置服務埠號

spring.dubbo.protocol.port=20880

#配置服務訪問地址

spring.dubbo.protocol.host=localhost

#配置dubbo掃描

spring.dubbo.scan=com.taotao.consumer