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

猜你喜欢

转载自www.cnblogs.com/jingchen/p/10155064.html
今日推荐