美文网首页Spring Cloud系列专题springboot
Spring Cloud --- (一) 项目搭建

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

作者: July_whj | 来源:发表于2018-12-31 18:24 被阅读2次

    1、建立父工程

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

    创建新工程为Spring Cloud。

    QQ20181114-231422.png

    ​ 选择下一步


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

    引入pom.xml代码如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <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>
    
     <groupId>cn.org.july.springcloud</groupId>
     <artifactId>springcloud</artifactId>
     <version>1.0-SNAPSHOT</version>
     <packaging>pom</packaging>
    
    
     <properties>
         <project.version>1.0-SNAPSHOT</project.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <java.version>1.8</java.version>
         <lombok.version>1.16.18</lombok.version>
         <log4j.version>1.2.17</log4j.version>
         <junit.version>4.12</junit.version>
         <mysql.version>6.0.6</mysql.version>
         <druid.version>1.1.10</druid.version>
     </properties>
    
     <dependencyManagement>
         <dependencies>
             <dependency>
                 <groupId>org.springframework.cloud</groupId>
                 <artifactId>spring-cloud-dependencies</artifactId>
                 <version>Finchley.SR2</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
    
             <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-dependencies</artifactId>
                 <version>2.0.6.RELEASE</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
    
             <!-- mysql jdbc 驱动 -->
             <dependency>
                 <groupId>mysql</groupId>
                 <artifactId>mysql-connector-java</artifactId>
                 <version>${mysql.version}</version>
             </dependency>
             <dependency>
                 <groupId>com.alibaba</groupId>
                 <artifactId>druid</artifactId>
                 <version>${druid.version}</version>
             </dependency>
             <dependency>
                 <groupId>org.mybatis.spring.boot</groupId>
                 <artifactId>mybatis-spring-boot-starter</artifactId>
                 <version>1.3.2</version>
             </dependency>
             <dependency>
                 <groupId>ch.qos.logback</groupId>
                 <artifactId>logback-core</artifactId>
                 <version>1.2.3</version>
             </dependency>
             <dependency>
                 <groupId>junit</groupId>
                 <artifactId>junit</artifactId>
                 <version>${junit.version}</version>
                 <scope>test</scope>
             </dependency>
             <dependency>
                 <groupId>log4j</groupId>
                 <artifactId>log4j</artifactId>
                 <version>${log4j.version}</version>
             </dependency>
         </dependencies>
     </dependencyManagement>
    
     <build>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
             </plugin>
             <plugin>
                 <artifactId>maven-site-plugin</artifactId>
                 <version>2.3</version>
                 <executions>
                     <execution>
                         <id>default-site</id>
                         <phase>site</phase>
                         <goals>
                             <goal>site</goal>
                         </goals>
                     </execution>
                 </executions>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-deploy-plugin</artifactId>
                 <version>2.8.2</version>
                 <configuration>
                     <skip>true</skip>
                 </configuration>
             </plugin>
         </plugins>
     </build>
    </project>
    

    ​ 该工程为父工程,打包方式为pom.<packaging>pom</packaging>

    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文件内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <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>cn.org.july.springcloud</groupId>
            <artifactId>springcloud</artifactId>
            <version>1.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>springcloud-api</artifactId>
    
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.18</version>
            </dependency>
        </dependencies>
    </project>
    
    
    @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文件,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
        <parent>
            <artifactId>springcloud</artifactId>
            <groupId>cn.org.july.springcloud</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>springcloud-provider-user-8001</artifactId>
        <dependencies>
            <!-- 引入API -->
            <dependency>
                <groupId>cn.org.july.springcloud</groupId>
                <artifactId>springcloud-api</artifactId>
                <version>${project.version}</version>
            </dependency>
            <!-- 单元测试 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </dependency>
            <!-- 数据源 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
            </dependency>
            <!-- 数据库驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <!-- 日志 -->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
            </dependency>
            <!-- springBoot 集成 mybatis-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
            </dependency>
            <!-- web模块 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- 单元测试 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
        </dependencies>
    
    </project>
    

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

    在新建的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', 'july@163.com', '123456'), ('2', 'WHJ', 'cloudDB01', '12312312312', '123@qq.com', '123456');
      COMMIT;
      
      SET FOREIGN_KEY_CHECKS = 1;
      
    • 在dao中新建类:UserDao.内容如下:

      @Mapper
      public interface UserDao {
      
          @Select("select * from user")
          List<User> 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<User> findAll() {
              return userDao.findAll();
          }
      }
      
    • 在controller中新建类:UserController。内容如下:

      @RestController
      @RequestMapping
      public class UserController {
          @Autowired
          private UserService userService;
      
          @RequestMapping(value = "/user/all")
          @ResponseBody
          public List<User> 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<User> 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/1http://localhost:8000/consumer/user/all

    111806.png 111807.png

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

    相关文章

      网友评论

        本文标题:Spring Cloud --- (一) 项目搭建

        本文链接:https://www.haomeiwen.com/subject/yujwlqtx.html