从零搭建Spring boot +dubbo+zookeeper +Mybatis(二)

这章会利用maven进行分模块,并且引入dubbo和spring-boot,废话不多说,就开始一步步的搭建。

分模块

首先新建一个maven项目(其实目前好像更流行用gradle,虽然在android中我使用过,但仅仅是用gradle模块管理,以及引入一些包文件,具体的大作用还是没仔细了解,有兴趣的小伙伴可以去了解使用)项目目录如下图所示。因为我这个是作为一个父模块,并不需要src。我们这边可以直接删掉src,保留也可以,问题不大。


新的maven项目.png

然后我们将子模块添加到父模块下,我们分别需要一个提供者,一个消费者和一个基础模块。创建完成后文件目录如图显示


项目目录.png

我们在项目的pom.xml文件中添加需要的jar包。使用dependencyManagement标签,子项目pom不会自动使用父pom中的jar包,如果需要使用,就要给出groupId和artifactId,无需给出version


    4.0.0

    com.zym.test
    SpringBoot_Dubbo_Demo
    pom
    1.0-SNAPSHOT
    
        SpringBoot_Dubbo_Consumer
        SpringBoot_Dubbo_Provider
        SpringBoot_Dubbo_Common
    
    
    
        UTF-8
        1.7
        2.5.5
        0.10
        1.16.18
        1.5.7.RELEASE
    
    
    
        
            
            
                org.springframework.boot
                spring-boot-starter
                ${spring-boot.version}
            

            
            
                org.springframework.boot
                spring-boot-starter-web
                ${spring-boot.version}
            

            
            
                org.projectlombok
                lombok
                ${lombok.version}
                provided
            

            
            
                com.alibaba
                dubbo
                ${dubbo.version}
            

            
            
                com.101tec
                zkclient
                ${zkclient.version}
            

        
    


接着基础模块都要被消费者和提供者模块引用。我们对基础模块的pom.xml导入需要的jar文件。以及创建基础模块存放的文件夹。现在我们仅仅将domin和service接口作为基础提供给消费者和提供者使用。在基础模块中引用lombok,一个非常好用减少get set 的编写,并且不影响速度。给出common项目的目录结构以及pom.xml。

Common项目的.pom.xml:



    
        SpringBoot_Dubbo_Demo
        com.zym.test
        1.0-SNAPSHOT
    
    4.0.0

    SpringBoot_Dubbo_Common

    
        
            org.projectlombok
            lombok
            provided
        
    

Common项目的目录结构.png

然后我们分别在两个模块中的pom.xml文件中引用基础模块,并且引入需要的jar包。

SpringBoot_Dubbo_Consumer pom.xml:



    
        SpringBoot_Dubbo_Demo
        com.zym.test
        1.0-SNAPSHOT
    
    4.0.0

    SpringBoot_Dubbo_Consumer

    
        
            com.zym.test
            SpringBoot_Dubbo_Common
            1.0-SNAPSHOT
        
        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            com.alibaba
            dubbo
        
        
            com.101tec
            zkclient
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


SpringBoot_Dubbo_Provider 的pom.xml:



    
        SpringBoot_Dubbo_Demo
        com.zym.test
        1.0-SNAPSHOT
    
    4.0.0

    SpringBoot_Dubbo_Provider
    
        
            com.zym.test
            SpringBoot_Dubbo_Common
            1.0-SNAPSHOT
        
        
            org.springframework.boot
            spring-boot-starter
        
        
            com.alibaba
            dubbo
        
        
            com.101tec
            zkclient
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            1.3.1
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            mysql
            mysql-connector-java
            5.1.35
        
        
        
            com.alibaba
            druid
            1.0.11
        
    

这样我们就将需要的Jar包以及各个模块之间的关系搭建完了,接着就是各个子项目中搭建配置文件了,比如提供者肯定需要去实现service然后去数据库查询数据返回给消费者所以提供者肯定需要配置mybatis以及dubbo的文件配置。我们这边使用springboot,因为基本上都封装好了,配置就很简单了。我们先新增一个application.yml,具体配置如下,这边直接将mybatis的配置写在配置文件里了,就不需要像ssm一样需要xml文件配置了。
application.yml:

server:
  port: 8082
  context-path: /
spring:
 datasource:
        name: test
        url: jdbc:mysql://127.0.0.1:3306/test
        username: root
        password: 123456
        # 使用druid数据源
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        filters: stat
        maxActive: 20
        initialSize: 1
        maxWait: 60000
        minIdle: 1
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: select 'x'
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxOpenPreparedStatements: 20
        mybatis:
          type-aliases-package:  domain

同时,我们需要在项目中配置dubbo,让该项目成为提供者。
SpringBoot_Dubbo_Provider 的 spring-dubbo.xml:




    
    
    
    
    

Springboot是使用类来作为启动器的,所以我们启动添加一个启动器ProviderApplication.java,在启动器中将dubbo的配置文件引用,并且去扫描mapper包。

SpringBoot_Dubbo_Provider ProviderApplication.java:

@SpringBootApplication
@ImportResource({"classpath:config/spring-dubbo.xml"})
@MapperScan("mapper")
public class ProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这样SpringBoot_Dubbo_Provider这个项目就完成配置了。这是SpringBoot_Dubbo_Provider的项目结构

SpringBoot_Dubbo_Provider项目结构.png

接下来完成SpringBoot_Dubbo_Consumer 需要的项目配置。消费者需要实现的是将返回的数据显示给前端.(这里涉及到如果你的项目是前后端分离的话,那你的项目就应该直接返回json格式数据就好,可以直接使用springboot的@RestController。但是如果你使用的模板引擎或者是jsp那就要根据自己选择方式去做,具体的话就不展现了.自行百度). 下面为该项目的项目结构以及dubbo的配置XML.


SpringBoot_Dubbo_Consumer 项目结构.png

SpringBoot_Dubbo_Consumer 的 spring-dubbo.xml:




    
    
    

同样我们也要为这个项目写一个启动器。在启动器中加载dubbo配置文件 。这里提供者和消费者两个项目不能使用相同的端口号,所以消费者这边端口我使用的是8081 提供者为8082。因为消费者这边只是配置了一个端口号所以就不给出配置代码了。

SpringBoot_Dubbo_Consumer 的ConsumerApplication .java:

@SpringBootApplication
@ImportResource({"classpath:config/spring-dubbo.xml"})
public class ConsumerApplication {

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

这样,所有的配置我们都完成了,接着就是添加我们要的业务逻辑以及相关代码了。这里,我就简单的从数据库根据ID查一个user信息为例子。

首先根据下面脚本创建user表

CREATE TABLE t_user(
  user_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  user_name VARCHAR(255) NOT NULL ,
  password VARCHAR(255) NOT NULL ,
  phone VARCHAR(255) NOT NULL
) ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;

然后将表的映射java类,放在SpringBoot_Dubbo_Common的domin中,并且在service的包中添加一个userService接口。
User.java:

@Data
public class User implements Serializable {
    private Integer userId;

    private String userName;

    private String password;

    private String phone;
}

userService.java


/**
 * 用户接口
 *
 * @author zym
 * @create 2018-06-19 14:10
 **/
public interface UserService {
    User findUser();
}

在SpringBoot_Dubbo_Provider的mapper包中添加UserMapper.java。(本来应该有mapper.xml文件,我这边不知道什么原因,总是说找不到我的xml文件,我这边就写成了注解形式)
UserMapper.java:

public interface UserMapper {
    @Results(id = "userMap", value = {
            @Result(column = "user_id", property = "userId"),
            @Result(column = "phone", property = "phone"),
            @Result(column = "user_name", property = "userName"),
            @Result(column = "password", property = "password")})
    @Select("SELECT * FROM t_user")
    List getAll();

    @Select("SELECT * FROM t_user WHERE user_id = #{id}")
    @ResultMap("userMap")
    User getOne(Long id);

}

并且在SpringBoot_Dubbo_Provider的impl中实现UserService接口
UserServiceImpl.java:

@Service(version = "1.0.0")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;
    
    @Override
    public User findUser() {

        return  userMapper.getOne(1L);
    }

}

SpringBoot_Dubbo_Consumer中添加UserController,像普通的springmvc一样,只是在RPC调用的时候需要带上注解。这样就完成了所有的代码

@RestController
@RequestMapping("/user")
public class UserController {
    @Reference(version = "1.0.0")
    private UserService userService;



    @GetMapping("getUser")
    public User user() {
        return userService.findUser();
    }
}

执行程序发现运行失败,发现不能把启动类直接放在java文件下,新建了com.test包将之前的包都扔在了这下面,更改下配置中的包路径。先启动Provider再启动Consumer。

返回结果.png

成功读取到数据,我们再到dubbo-admin的web看下,发现一个消费者和一个提供者。分别点击提供者和消费者发现有我们代码中注册的userService了。这样就完成了整个dubbo项目的搭建。
dubbo-admin的应用管理.png

源码已经上传到了github上源码

你可能感兴趣的:(从零搭建Spring boot +dubbo+zookeeper +Mybatis(二))