美文网首页个人学习
Rest环境搭建:服务者和消费者

Rest环境搭建:服务者和消费者

作者: 弹钢琴的崽崽 | 来源:发表于2020-02-25 17:17 被阅读0次

1. 项目搭建

1.1 创建一个简单的Maven项目

可以把src删了,父项目,完全可以不要它

打包方式:

<!--    打包方式-->
<packaging>pom</packaging>

1.2 导入依赖

<!--    依赖版本控制-->
<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>
    <lombok.version>1.16.18</lombok.version>
</properties>
<!--    依赖管理-->
<dependencyManagement>
    <dependencies>
        <!--            springcloud的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--            springboot的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.4.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--            数据库依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--            数据源依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!--            springboot启动依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!--            junit测试依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
        </dependency>
        <!--            lombok插件依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
        <!--            日志依赖-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

2. 创建一个maven模块API

2.1 导入依赖

<dependencies>
    <!--        当前的module依赖,可以导入父工程依赖(如果父工程有此依赖-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>

2.2 新建实体类

实现序列化

package com.common.springcloud.pojo;
@Data
@NoArgsConstructor
@Accessors(chain = true)    //链式写法
//实现序列化的目的是为了保证流传输不出问题
public class Dept implements Serializable {
    private long deptno;    //主键
    private String dname;
    //这个数据存在哪个数据库
    private  String db_source;
    /**
     * 链式写法
     * dept.setDeptNo(11).setDname('sss').setDb_source()
     */
}

2.3 表结构

API这个微服务就结束了

3. 创建一个服务的提供者

3.1 导入依赖

<dependencies>
    <!--        我们需要拿到实体类,从api项目的pojo拿-->
    <dependency>
        <groupId>com.common</groupId>
        <artifactId>springcloud-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <!--        junit-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
    <!--        mysql依赖-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!--        druid数据源依赖-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
    </dependency>

    <!--        日志核心依赖-->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
    </dependency>
    <!--        springboot启动依赖-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
    </dependency>

    <!--        spirngboot测试依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-test</artifactId>
    </dependency>
    <!--        springboot的web依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--        jetty依赖相当于tomcat(springboot自带tomcat)-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
    <!--        热部署依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
</dependencies>

3.2 编写配置文件application.yml

配置Mybatis和Spring

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"/>
    </settings>
</configuration>
Server:
  port: 8001

#mybatis配置
mybatis:
  type-aliases-package: com.common.springcloud.pojo
  mapper-locations: classpath:mybatis/mapper/*.xml
  config-location: classpath:mybatis/mybatis-config.xml


#spring配置
spring:
  application:
    name: springcloud-provider-dept
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/db01?useUnicode=true&serverTimezone=GMT%2B8&characterEncoding=UTF-8&useSSL=false
    username: root
    password: root
    driver-class-name: org.gjt.mm.mysql.Driver
  #以下为新增
  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


3.3 编写Dao接口

package com.common.springcloud.mapper;
@Mapper     //将dao交给spring管理    不用写mapper.xml了      自动注册一个接口实现类
@Repository //将dao类声明为bean
public interface DeptDao {
    boolean addDept(Dept dept);
    Dept queryId(Long id);
    List<Dept> queryAll();
}

3.4 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.mapper.DeptDao">
    <insert id="addDept" parameterType="Dept">
        insert into dept (dname, db_source)
        values (#{dname}, DATABASE());
    </insert>
    <select id="queryId" resultType="Dept" parameterType="java.lang.Long">
        select * from dept where deptno = #{deptno};
    </select>
    <select id="queryAll" resultType="Dept">
        select * from dept;
    </select>
</mapper>

3.5 编写Service层

3.5 Controller层提供Restful服务

3.6 编写启动类

4. 创建一个服务的消费者

4.1 导入依赖

<!--    实体类依赖,从api中导-->
<dependency>
    <groupId>com.common</groupId>
    <artifactId>springcloud-api</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<!--        spirngboot的web依赖-->
<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>

4.2 application.yml配置

只用配端口号

server:
  port: 80

4.3 Controller需要RestTemple

a. 配置类ConfigBean中配置

b. Controller中调用

对应提供者的方法

package com.common.springcloud.controller;
@RestController
public class DeptConsumerController {
    //消费者 没有servicec层
    //RestTemplate ...方法供我们调用就可以了! 注册sring中
    //(url, 实体: Map, Class<T> ResponseType)
    @Autowired
    private RestTemplate restTemplate;
    private static final String REST_URL_PREFIX = "http://localhost:8001";
    @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/add")
    public boolean add(Dept dept) {
        return restTemplate.postForObject(REST_URL_PREFIX +"/dept/add", dept, boolean.class);
    }
    @RequestMapping("/consumer/dept/list")
    public List<Dept> list() {
        return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);
    }
}

4.4 编写启动类

测试拿到数据

相关文章

网友评论

    本文标题:Rest环境搭建:服务者和消费者

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