zoukankan      html  css  js  c++  java
  • springcloud之环境工程模块(一)

    整理SpringCloud相关组件的demo,自己重新复习一下,做个记录。

    首先搭建初始环境、公共模块。

    一、创建一个父工程 springcloud

    通过IDEA,使用maven方式创建一个父模块,将src文件删除,因为用不到。当然用不用的到 需要结合实际工作之中。

    导入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>
    
        <groupId>com.common</groupId>
        <artifactId>springcloudtest</artifactId>
        <version>1.0-SNAPSHOT</version>
        <modules>
            <module>springcloud-api</module>
            <module>springcloud-provider-dept-8001</module>
            <module>springcloud-consumer-dept-80</module>
        </modules>
        <packaging>pom</packaging>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <junit.version>4.12</junit.version>
            <log4j.version>1.2.17</log4j.version>
        </properties>
        <dependencyManagement>
            <dependencies>
                <!--cloud的jar-->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Greenwich.SR1</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!--boot的jar-->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>2.1.4.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!--mysql的驱动包-->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.40</version>
                </dependency>
                <!--Druid数据库连接池-->
                <dependency>
                    <groupId>com.alibaba</groupId>
                    <artifactId>druid</artifactId>
                    <version>1.1.10</version>
                </dependency>
                <!-- mybatis和boot整合的主jar包 -->
                <dependency>
                    <groupId>org.mybatis.spring.boot</groupId>
                    <artifactId>mybatis-spring-boot-starter</artifactId>
                    <version>2.0.1</version>
                </dependency>
                <!-- logback的主jar包 -->
                <dependency>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-core</artifactId>
                    <version>1.2.3</version>
                </dependency>
                <!-- junit的测试jar包 -->
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>${junit.version}</version>
                    <scope>test</scope>
                </dependency>
                <!-- log4j的主jar包 -->
                <dependency>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                    <version>${log4j.version}</version>
                </dependency>
    
                <dependency>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok</artifactId>
                    <version>1.16.20</version>
                </dependency>
                <!--热部署依赖-->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-devtools</artifactId>
                    <version>2.1.2.RELEASE</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    </project>

    父项目pom引入的都是子项目都用的到的jar,放在父类统一版本,尽量减少版本冲突

    二、创建公共子项目springcloud-api

    如上图,在父模块下创建子模块

    ① 引入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">
        <parent>
            <artifactId>springcloudtest</artifactId>
            <groupId>com.common</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
        <artifactId>springcloud-api</artifactId>
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
        </dependencies>
    </project>

    ② 创建实体类

    新建包com.common.springcloud.entity -> 创建实体类Dept

    package com.yt.springcloud.entity;
    
    import java.io.Serializable;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.experimental.Accessors;
    
    @AllArgsConstructor//全参构造函数
    @NoArgsConstructor//无参构造函数
    @Data//生成set,get
    @Accessors(chain=true)//链式风格访问
    public class Dept  implements Serializable{//微服务必须要实现序列化接口
        
        private Long deptNo;//主键
        private String dName;//部门名称
        private String db_source;//来自哪个数据库,因为微服务架构可以一个服务对应一个数据库,同一个信息被存储到不同数据库
    }

    三、创建服务提供者和消费者

    同理用idea在父项目下创建子项目

    服务提供者

    ① 引入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">
        <parent>
            <artifactId>springcloudtest</artifactId>
            <groupId>com.common</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
        <artifactId>springcloud-provider-dept-8001</artifactId>
        <dependencies>
            <!-- 引入自己已定义的api通用包,可以使用Dept部门Entity -->
            <dependency>
                <groupId>com.common</groupId>
                <artifactId>springcloud-api</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            <!-- junit的jar包 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </dependency>
            <!-- mysql的jar包 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <!-- druid的jar包 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
            </dependency>
            <!--日志核心依赖-->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
            </dependency>
            <!-- mybatis的整合 -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
            </dependency>
            <!-- springboot的整合web-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- springboot的整合测试 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-test</artifactId>
            </dependency>
            <!--jetty依赖相当于tomcat(springboot自带tomcat)-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jetty</artifactId>
            </dependency>
            <!-- 修改后立即生效,热部署 (一修改,自动发布,自动构建)-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>springloaded</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>
        </dependencies>
    </project>

    ② 编写application.yml配置文件

    server:
      port: 8001
    
    mybatis:
      config-location: classpath:mybatis/mybatis-config.xml
      type-aliases-package: com.common.springcloud.entity
      mapper-locations:
        - classpath:mybatis/mapper/*.xml
    spring:
      application:
        name: springcloud-provider-dept
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: org.gjt.mm.mysql.Driver
        url: jdbc:mysql://localhost:3306/db01?useUnicode=true&serverTimezone=GMT%2B8&characterEncoding=UTF-8&useSSL=false
        username: root
        password: 123456
          #以下为新增
      druid:
        # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个,
        #注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串
        test-on-borrow: false
        # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.
        #注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串
        test-while-idle: true
        # 指明是否在归还到池中前进行检验,注意: 设置为true后如果要生效,
        #validationQuery参数必须设置为非空字符串
        test-on-return: false
        # SQL查询,用来验证从连接池取出的连接,在将连接返回给调用者之前.
        #如果指定,则查询必须是一个SQL SELECT并且必须返回至少一行记录
        validation-query: select 1

    ③ 创建mybatis配置文件

    创建 resources > mybatis > mybatis-config.xml

    <?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>
        <settings>
            <!--开启二级缓存-->
            <setting name="cacheEnabled" value="true"></setting>
        </settings>
    </configuration>

    ④ 创建mapper.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="com.common.springcloud.dao.DeptDao">
    
        <select id="findById" resultType="Dept" parameterType="Long">
                select deptno,dname,db_source from dept where deptno=#{deptno}
            </select>
    
        <select id="findAll"  parameterType="Long" resultType="Dept">
                select deptno,dname,db_source from dept
            </select>
    
        <insert id="addDept"  parameterType="Long">
                insert into dept(dname,db_source) values(#{dname},database())
            </insert>
    </mapper>

    ⑤ 创建数据库

    DROP DATABASE IF EXISTS cloudDB01;
    CREATE DATABASE cloudDB01 CHARACTER SET UTF8;
    USE cloudDB01;
    CREATE TABLE dept(
        deptno BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
        dname VARCHAR(60),
        db_source VARCHAR(60)
    );
    
    INSERT INTO dept(dname,db_source)VALUES ('开发部',DATABASE());
    INSERT INTO dept(dname,db_source)VALUES ('人事部',DATABASE());
    INSERT INTO dept(dname,db_source)VALUES ('财务部',DATABASE());
    INSERT INTO dept(dname,db_source)VALUES ('市场部',DATABASE());
    INSERT INTO dept(dname,db_source)VALUES ('运维部',DATABASE());
    
    SELECT * FROM dept;

    ⑥ 创建dao、service、service --> impl 这些包层

    具体包的创建不用多说,相关类如下

    package com.common.springcloud.dao; 
    import java.util.List;
    import org.apache.ibatis.annotations.Mapper;
    import com.yt.springcloud.entity.Dept;
    @Mapper
    public interface DeptDao {
        public boolean addDept(Dept dept);
        public Dept findById(Long id);
        public List<Dept> findAll();
    }
    package com.common.springcloud.service;
    import java.util.List;
    import com.yt.springcloud.entity.Dept;
    //业务层接口
    public interface DeptService {
        public boolean add(Dept dept);
        public Dept get(Long id);
        public List<Dept> list();
    }
    package com.common.springcloud.service.impl;
    import java.util.List;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import com.yt.springcloud.dao.DeptDao;
    import com.yt.springcloud.entity.Dept;
    import com.yt.springcloud.service.IDeptService ;
    //业务逻辑层的实现类
    @Service
    public class DeptServiceImpl implements DeptService {
        @Autowired
        private DeptDao deptDao;
        @Override
        public boolean add(Dept dept) {
            return deptDao.addDept(dept);
        }
        @Override
        public Dept get(Long id) {
            return deptDao.findById(id);
        }
        @Override
        public List<Dept> list() {
            return deptDao.findAll();
        }
    }

    ⑦ 创建Controller启动类

    package com.common.springcloud.controller;
    import com.common.springcloud.entity.Dept;
    import com.common.springcloud.service.DeptService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    import java.util.List;
    @RestController//整合了responceBody+Controller
    public class DeptController {
        @Autowired
        private DeptService deptService;
        @PostMapping(value="/dept/add")
        public boolean add(@RequestBody Dept dept) {
            return deptService.addDept(dept);
        }
        @GetMapping(value="/dept/get/{id}")
        public Dept get(@PathVariable("id") Long id) {
            return deptService.findById(id);
        }
        @GetMapping(value="/dept/list")
        public List<Dept> list() {
            return deptService.findAll();
        }
    }

    启动类略

    测试验证即可


     服务消费者

    ① 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">
        <parent>
            <artifactId>springcloudtest</artifactId>
            <groupId>com.common</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
        <artifactId>springcloud-consumer-dept-80</artifactId>
    
        <dependencies>
            <dependency>
                <groupId>com.common</groupId>
                <artifactId>springcloud-api</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>
        </dependencies>
    </project>

     ② 创建以下内容

    package com.common.springcloud.config;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
    @Configuration
    public class ConfigBean {
        @Bean
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    }
    package com.common.springcloud.controller;
    
    import com.common.springcloud.entity.Dept;
    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 org.springframework.web.client.RestTemplate;
    
    import java.util.List;
    
    @RestController
    public class DeptController_consumer {
        @Autowired
        private RestTemplate restTemplate;
        private static final String REST_URL_PREFIX = "http://localhost:8001";
        @RequestMapping(value = "/consumer/dept/add")
        public boolean add(Dept dept){
            return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add", dept, boolean.class);
        }
        @RequestMapping("/consumer/dept/get/{id}")
        public Dept get(@PathVariable("id") Long id) {
            return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/"+id, Dept.class);
        }
        @RequestMapping("/consumer/dept/list")
        public List<Dept> list() {
            return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);
        }
    }
    package com.common.springcloud;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class DeptConsumer80_App {
        public static void main(String[] args) {
            SpringApplication.run(DeptConsumer80_App.class, args);
        }
    }

    测试

    先启动服务提供者,再启动服务消费者,使用消费者接口调用测试即可。

    模块结构

     

  • 相关阅读:
    C#代码动态编译、动态执行、动态调试
    php’s explode() 函数
    exec函数族
    在C语言中执行shell命令
    dmesg简介
    错误输出
    php’s json_decode函数
    使expect脚本传回返回值
    php’s fgets() 函数
    统计当前目录下的所有文件目录大小,不显示子目录与子文件
  • 原文地址:https://www.cnblogs.com/FondWang/p/12258757.html
Copyright © 2011-2022 走看看