SpringCloud-3-定义两个服务 生产者 消费者

搭建生产者与消费者两个服务

注意:在pom依赖中取消不需要的依赖,例如在消费者中不需要mybatis

以及druid,等等无用的支持,所遇见的坑,无脑复制生产者pom,导致报错,

DataSource找不到,需要注意!!!!!!

1.搭建生产者子工程

子工程搭建方式参考第一篇笔记

提供数据层的服务 (payment) 依赖于父工程

包含:①mapper层 ②service层 ③entity层 ④controller层

代码

pom.xml参考上一章笔记

 

mapper.class

package com.mengxiangnongfu.mapper;

import com.mengxiangnongfu.entity.Pay;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 查询交易记录
 */
@Mapper
public interface PayMapper {

    public int create(Pay pay);

    public Pay getPayById(@Param("id") Long id);

}

mapper.xml

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mengxiangnongfu.mapper.PayMapper">

    <insert id="create" useGeneratedKeys="true" keyProperty="id" parameterType="com.mengxiangnongfu.entity.Pay">
        INSERT INTO pay(serial) VALUE (#{serial});
    </insert>

    <select id="getPayById" resultMap="BaseResultMap" parameterType="java.lang.Long">
        SELECT * FROM pay where id=#{id};
    </select>

    <resultMap id="BaseResultMap" type="com.mengxiangnongfu.entity.Pay">
        <id column="id" property="id" jdbcType="BIGINT"/>
        <result column="serial" property="serial" jdbcType="VARCHAR"/>
    </resultMap>

</mapper>

service.class

package com.mengxiangnongfu.service;

import com.mengxiangnongfu.entity.CommonResult;
import com.mengxiangnongfu.entity.Pay;
import org.apache.ibatis.annotations.Param;

public interface PayService {

    public CommonResult create(Pay pay);

    public CommonResult getPayById(@Param("id") Long id);

}

serviceImpl.class

package com.mengxiangnongfu.service.impl;

import com.mengxiangnongfu.entity.CommonResult;
import com.mengxiangnongfu.entity.Pay;
import com.mengxiangnongfu.mapper.PayMapper;
import com.mengxiangnongfu.service.PayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class PayServiceImpl implements PayService {

    @Resource
    private PayMapper payMapper;

    @Override

    public CommonResult create(Pay pay) {
        CommonResult commonResult = new CommonResult();
        if (payMapper.create(pay) > 0) {
            commonResult.setCode(200);
            commonResult.setMsg("插入成功!");
        } else {
            commonResult.setCode(444);
            commonResult.setMsg("插入失败!");
        }
        return commonResult;
    }

    @Override
    public CommonResult getPayById(Long id) {
        CommonResult commonResult = new CommonResult();
        Pay pay = payMapper.getPayById(id);
        if (pay != null) {
            commonResult.setCode(200);
            commonResult.setMsg("查询成功!");
            commonResult.setData(pay);
        } else {
            commonResult.setCode(444);
            commonResult.setMsg("未查询到数据!");
        }
        return commonResult;
    }
}

实体层entity.class

package com.mengxiangnongfu.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor //全参
@NoArgsConstructor //孔参
public class Pay {

    private Integer id;

    private String serial;
}

公共返回对象

package com.mengxiangnongfu.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 公共返回类
 *
 * @author Yang
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CommonResult<T> {

    /**
     * 编码
     */
    private Integer code;

    /**
     * 操作描述
     */
    private String msg;

    /**
     * 数据
     */
    private T data;

    public CommonResult(Integer code, String msg) {
        this(code, msg, null);
    }

}

application.yml

server:
  port: 8001
spring:
  application:
    #微服务的名称
    name: payment
  datasource:
    # 当前数据源操作类型
    type: com.alibaba.druid.pool.DruidDataSource
    # mysql驱动类
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/pay?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
    username: root
    password: root
mybatis:
  mapper-locations: classpath*:mapper/*.xml
  type-aliases-package: com.mengxiangnongfu.entity

2.搭建消费者子工程

子工程搭建方式参考第一篇笔记

消费数据的的服务 (order) 依赖于父工程

包含:①entity层  ②controller层  ③config

这边因为刚开始学习采用的是RestTemplate所以我多了个配置的包也就是③config

代码

RestTemplateConfig.class

package com.mengxiangnongfu.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import javax.swing.plaf.PanelUI;

@Configuration
public class ApplicationContextConfig {

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

}

OrderController.class

package com.mengxiangnongfu.controller;

import com.mengxiangnongfu.entity.CommonResult;
import com.mengxiangnongfu.entity.Pay;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;


@RestController
@Slf4j
public class OrderController {

  //定义数据提供者的URL也就是 payment
public static final String PAYMENT_URL = "http://127.0.0.1:8001"; //传统RestTemplate请求 @Autowired RestTemplate restTemplate; @GetMapping("/consumer/pay/create") public CommonResult<Pay> create(Pay pay) { log.info("----------->创建订单--->消费者"); return restTemplate.postForObject(PAYMENT_URL + "/pay/createPay", pay, CommonResult.class); } @GetMapping("/consumer/pay/get/{id}") public CommonResult<Pay> getPayById(@PathVariable(value = "id") Long id) { log.info("----------->查询订单--->消费者"); return restTemplate.getForObject(PAYMENT_URL + "/pay/get/" + id, CommonResult.class); } }

实体层和公共对象同上直接复制生产者的实体即可 这里略过.......

application.yml

server:
  port: 80
spring:
  application:
    name: order

 

启动的时候idea可以直接使用Services 这个根据idea版本不同应该叫法也不同,通过这个可以快速启动多个服务

 

posted @ 2020-08-29 23:27  洋三岁  阅读(337)  评论(0)    收藏  举报
友情链接: 梦想农夫