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版本不同应该叫法也不同,通过这个可以快速启动多个服务

浙公网安备 33010602011771号