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