Spring Cloud --- (一) 项目搭建

1、建立父工程

​ 首先创建一个父工程,名字为spring cloud打开IDEA(以下编码过程编码工具采用IDEA)。

创建新工程为Spring Cloud。

QQ20181114-231422.png

​ 选择下一步


QQ20181114-231655.png
QQ20181114-231747.png
QQ20181114-231821.png

引入pom.xml代码如下:



 4.0.0

 cn.org.july.springcloud
 springcloud
 1.0-SNAPSHOT
 pom


 
     1.0-SNAPSHOT
     UTF-8
     UTF-8
     1.8
     1.16.18
     1.2.17
     4.12
     6.0.6
     1.1.10
 

 
     
         
             org.springframework.cloud
             spring-cloud-dependencies
             Finchley.SR2
             pom
             import
         

         
             org.springframework.boot
             spring-boot-dependencies
             2.0.6.RELEASE
             pom
             import
         

         
         
             mysql
             mysql-connector-java
             ${mysql.version}
         
         
             com.alibaba
             druid
             ${druid.version}
         
         
             org.mybatis.spring.boot
             mybatis-spring-boot-starter
             1.3.2
         
         
             ch.qos.logback
             logback-core
             1.2.3
         
         
             junit
             junit
             ${junit.version}
             test
         
         
             log4j
             log4j
             ${log4j.version}
         
     
 

 
     
         
             org.apache.maven.plugins
             maven-jar-plugin
         
         
             maven-site-plugin
             2.3
             
                 
                     default-site
                     site
                     
                         site
                     
                 
             
         
         
             org.apache.maven.plugins
             maven-deploy-plugin
             2.8.2
             
                 true
             
         
     
 

​ 该工程为父工程,打包方式为pom.pom

2、建立服务API模块

​ 在父工程中,新建Module,module名称为springcloud-api

111801.png

111802.png

​ 创建完成后项目结构如下:

111803.png

​ 新建包cn.org.july.springcloud.api.entities

​ 新建类User内容如下:

@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class User implements Serializable {
    /**
     * 主键
     */
    private Integer id;
    /**
     * 部门名称
     */
    private String userName;
    /**
     * 存储数据库位置(分布式部署可能存在多个数据库)
     */
    private String dbSource;
    /**
     * 电话号
     */
    private Spring phone;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 密码
     */
    private String pwd;

}

说明:此次使用lombok插件;官网 https://www.projectlombok.org/

注解 说明
@Data 在JavaBean或类JavaBean中使用,这个注解包含范围最广,它包含getter、setter、NoArgsConstructor注解,即当使用当前注解时,会自动生成包含的所有方法;
@getter 在JavaBean或类JavaBean中使用,使用此注解会生成对应的getter方法;
@setter 在JavaBean或类JavaBean中使用,使用此注解会生成对应的setter方法;
@NoArgsConstructor 在JavaBean或类JavaBean中使用,使用此注解会生成对应的无参构造方法;
@AllArgsConstructor 在JavaBean或类JavaBean中使用,使用此注解会生成对应的有参构造方法;
@ToString 在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的toStirng方法;
@EqualsAndHashCode 在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的equals方法和hashCode方法;
@Slf4j 在需要打印日志的类中使用,当项目中使用了slf4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可;
@Log4j 在需要打印日志的类中使用,当项目中使用了log4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可;
@Accessors(prefix = {"first"}, fluent = true, chain = false) 与生存的get和set方法有关,prefix与定义属性前缀相同时且接下来的字符大写才生效,可以看源码注释或自行尝试;
fluent是决定生成的get/set方法要不要set/get前缀,chain决定set方法是void类型还是返回this

项目POM文件内容如下:



    4.0.0

    
        cn.org.july.springcloud
        springcloud
        1.0-SNAPSHOT
    

    springcloud-api

    
        
            org.projectlombok
            lombok
            1.16.18
        
    


@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class User implements Serializable {
    /**
     * 主键
     */
    private Integer id;
    /**
     * 部门名称
     */
    private String userName;
    /**
     * 存储数据库位置(分布式部署可能存在多个数据库)
     */
    private String dbSource;
    /**
     * 电话号
     */
    private Spring phone;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 密码
     */
    private String pwd;

}

3、建立服务提供者

​ 在父工程中,新建Module,module名称为springcloud-provider-user-8001

​ 创建过程如上,不再截图。

修改该Module pom.xml文件,内容如下:



    
        springcloud
        cn.org.july.springcloud
        1.0-SNAPSHOT
    
    4.0.0

    springcloud-provider-user-8001
    
        
        
            cn.org.july.springcloud
            springcloud-api
            ${project.version}
        
        
        
            junit
            junit
        
        
        
            com.alibaba
            druid
        
        
        
            mysql
            mysql-connector-java
        
        
        
            ch.qos.logback
            logback-core
        
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
        
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.springframework.boot
            spring-boot-starter-test
        
    


我们这里主要是讲整体架构搭建,我们不具体实现复杂的业务逻辑。以下只实现查询接口

在新建的Module中建立如下项目结构:

111804.png
  • 新建包路径cn.org.july.springcloud.dao;cn.org.july.springcloud.service;cn.org.july.springcloud.controller;

  • resources目录下创建application.yml配置文件。

    xserver:
      port: 8001
    mybatis:
      type-aliases-package:  cn.org.july.springcloudapi.entities       #所以entity别名类所在路径
    
    spring:
      application:
        name: springcloud-user
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource                   #当前数据源操作类型
        driver-class-name: com.mysql.cj.jdbc.Driver                    #mysql驱动包
        url: jdbc:mysql://127.0.0.1:3306/cloudDB01                     #数据库连接
        username: root
        password: xxxx
        dbcp2:
          min-idle: 5                                                   #数据库连接池的最小维持连接数
          initial-size: 5                                               #初始化连接数
          max-total: 5                                                  #最大连接数
          max-wait-millis: 200                                          #等待连接获取的最大超时时间
    
    

    注意

    spring:
      application:
        name: springcloud-user
    
  • 新建数据库cloudDB01执行以下脚本

    /*
     Navicat MySQL Data Transfer
    
     Source Server         : localhost
     Source Server Type    : MySQL
     Source Server Version : 50719
     Source Host           : localhost
     Source Database       : cloudDB01
    
     Target Server Type    : MySQL
     Target Server Version : 50719
     File Encoding         : utf-8
    
     Date: 11/18/2018 14:19:42 PM
    */
    
    SET NAMES utf8;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    --  Table structure for `user`
    -- ----------------------------
    DROP TABLE IF EXISTS `user`;
    CREATE TABLE `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `userName` varchar(50) DEFAULT NULL,
      `dbSource` varchar(50) DEFAULT NULL,
      `phone` varchar(20) DEFAULT NULL,
      `email` varchar(50) DEFAULT NULL,
      `pwd` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
    
    -- ----------------------------
    --  Records of `user_copy`
    -- ----------------------------
    BEGIN;
    INSERT INTO `user` VALUES ('1', 'JULY', 'cloudDB01', '18232533234', '[email protected]', '123456'), ('2', 'WHJ', 'cloudDB01', '12312312312', '[email protected]', '123456');
    COMMIT;
    
    SET FOREIGN_KEY_CHECKS = 1;
    
  • 在dao中新建类:UserDao.内容如下:

    @Mapper
    public interface UserDao {
    
        @Select("select * from user")
        List findAll();
    
        @Select("select * from user where id = #{id}")
        User findById(Long id);
    
    }
    
  • 在service中新建类:UserService。内容如下:

    @Service
    public class UserService {
    
        @Autowired
        private UserDao userDao;
    
        public User findById(Long id) {
            return userDao.findById(id);
        }
    
        public List findAll() {
            return userDao.findAll();
        }
    }
    
  • 在controller中新建类:UserController。内容如下:

    @RestController
    @RequestMapping
    public class UserController {
        @Autowired
        private UserService userService;
    
        @RequestMapping(value = "/user/all")
        @ResponseBody
        public List getAllUser(){
            return userService.findAll();
        }
        
        @RequestMapping(value = "/user/{id}")
        @ResponseBody
        public User getUserById(@PathVariable("id") Long id){
            return userService.findById(id);
        }
    }
    
    
  • 创建服务启动类Application_provider_8001。内容如下:

    @SpringBootApplication
    @MapperScan(basePackages = "cn.org.july.springcloud")
    public class Application_provider_8001 {
        public static void main(String[] args) {
            SpringApplication.run(Application_provider_8001.class, args);
        }
    }
    
  • 启动后在浏览器中输入http://localhost:8001/user/all;返回内容如下,说明服务提供者搭建成功。

111601.png

4、创建服务消费者

​ 新建Module,名称为springcloud-consumer-user-8000

创建过来不在详细讲述;创建完成后,项目结构目录如下:

[图片上传失败...(image-f5e239-1546251342956)]

  • springcloud-consumer-user-8000中,新建包结构,cn.org.july.springcloud.cfgbean;cn.org.july.springcloud.controller.

  • resources目录新建application.yml配置文件

    server:
      port: 8000
    

    作为服务消费者,只需要指定服务端口即可。

  • cn.org.july.springcloud.cfgbean包创建ConfigBean.内容如下:

    @Configuration
    public class ConfigBean {
        @Bean
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    }
    

    关于这两个注解,笔者在Spring Boot 中已经详细讲解过,有想了解,提供传送门;https://blog.csdn.net/July_whj/article/details/83449911

    RestTemplate: RestTemplate 提供了多种便捷访问远程HTTP服务的方法,是一种简单便捷的访问restful服务模版类,是Spring提供的用于访问Rest服务的客户端模版工具集。详情查看官方网站 https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html

  • controller中新建UserController_Consumer类。(这里命名有点怪。。。)

    @RestController
    public class UserController_Consumer {
      /**
       * 服务提供方地址
       */
        private static final String url = "http://localhost:8001/";
    
        /**
         * RestTemplate 提供了多种便捷访问远程HTTP服务的方法
         * 是一种简单便捷的访问restful服务模版类,是Spring提供的用于访问
         * Rest服务的客户端模版工具集
         */
        @Autowired
        private RestTemplate restTemplate;
    
        @RequestMapping(value = "/consumer/user/all")
        @ResponseBody
        public List getUserAll() {
            return restTemplate.getForObject(url.concat("user/all"), List.class);
        }
    
        @RequestMapping(value = "/consumer/user/{id}")
        @ResponseBody
        public ResponseEntity getUserById(@PathVariable("id") Long id) {
            return restTemplate.getForEntity(url.concat("user/").concat(id.toString()), User.class);
        }
    
    }
    

    这里和服务提供者的区别访问地址新增consumer路径。

  • 创建服务启动类Application_consumer_8000,内容如下:

    @SpringBootApplication
    public class Application_consumer_8000 {
        public static void main(String[] args) {
            SpringApplication.run(Application_consumer_8000.class, args);
        }
    }
    
  • 首先启动服务提供者服务springcloud-provider-user-8001,在启动服务消费者springcloud-consumer-user-8000.服务启动成功后访问 http://localhost:8000/consumer/user/1;http://localhost:8000/consumer/user/all

111806.png
111807.png

出现以上结果,服务消费者配置成功。该程序只做简单实例。

你可能感兴趣的:(Spring Cloud --- (一) 项目搭建)