微服务SpringCloud开弓之 Rest微服务工程搭建《二》
文章目录
- 构建步骤
- 1. Cloud-provider-payment8001 微服务提供者Module模块
- 2.热部署
- 3.cloud-consumer-order80 微服务消费者订单Module模块
- 4. 工程重构
构建步骤
1. Cloud-provider-payment8001 微服务提供者Module模块
-
建module
-
改POM
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> </dependency> <!--mysql-connector-java--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
-
写YML
server: port: 8001 spring: application: name: cloud-provider-service datasource: username: root password: 123 url: jdbc:mysql://localhost:3306/db2019?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.atguigu.springcloud.entities
-
主启动
@SpringBootApplication public class PaymentMain8001 { public static void main(String[] args) { SpringApplication.run(PaymentMain8001.class); } }
-
业务类
1.建库
CREATE TABLE `payment`( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `serial` varchar(200) DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
2.emtities
主实体Payment
@Data @AllArgsConstructor @NoArgsConstructor public class Payment implements Serializable { private Long id; private String serial; }
-
Json封装体CommonResult (用于给前端传送json数据)
@Data @AllArgsConstructor @NoArgsConstructor public class CommonResult<T> { private Integer code; private String message; private T data; public CommonResult(Integer code,String message){ this(code,message,null); } }
3.dao
-
接口PaymentDao
@Mapper public interface PaymentDao { public int create(Payment payment); public Payment getPaymentById(@PathParam("id") Long id); }
-
mybatis的映射文件PaymentMapper.xml 对应放到resource下的mapper,与接口名对应
src\main\resources\mapper\PaymentMapper.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.atguigu.springcloud.dao.PaymentDao"> <insert id="create" parameterType="payment" useGeneratedKeys="true" keyProperty="id"> insert into payment(serial) values (#{serial}); </insert> <resultMap id="BaseResultMap" type="com.atguigu.springcloud.entities.Payment"> <id column="id" property="id" jdbcType="BIGINT"/> <id column="serial" property="serial" jdbcType="VARCHAR"/> </resultMap> <select id="getPaymentById" parameterType="Long" resultMap="BaseResultMap"> select * from payment where id=#{id}; </select> </mapper>
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.atguigu.springcloud.dao.PaymentDao"> </mapper>
4.service
-
接口PaymentService
public interface PaymentService { public int create(Payment payment); public Payment getPaymentById(@PathParam("id") Long id); }
-
实现类
@Service public class PaymentServiceImpl implements PaymentService { @Resource private PaymentDao paymentDao; @Override public int create(Payment payment) { return paymentDao.create(payment); } @Override public Payment getPaymentById(Long id) { return paymentDao.getPaymentById(id); } }
5.controller
@RestController @Slf4j public class PaymentController { @Resource private PaymentService paymentService; @PostMapping(value = "/payment/create") public CommonResult create(Payment payment){ int result = paymentService.create(payment); log.info("###########插入结果"+result); if(result>0){ return new CommonResult(200,"插入数据库成功",result); }else{ return new CommonResult(444,"插入数据库失败",null); } } @GetMapping(value = "/payment/get/{id}") public CommonResult getPaymentById(@PathVariable("id") Long id) { Payment paymentById = paymentService.getPaymentById(id); log.info("*********查找结果为: " + paymentById); if (paymentById != null) { return new CommonResult(200, "查找成功", paymentById); } else { return new CommonResult(444, "查找为空,查找ID为: " + id, null); } } }
-
测试
访问地址: http://localhost:8001/payment/get/31
结果
{"code":200,"message":"查找成功","data":{"id":31,"serial":"尚硅谷01"}}
postman模拟: http://localhost:8001/payment/create?serial=atguigu002
结果
{ "code": 200, "message": "插入数据库成功", "data": 1 }
Dashboard窗口
<component name="RunDashboard"> <option name="configurationTypes"> <set> <option value="SpringBootApplicationConfigurationType" /> </set> </option> </component>
Dashboard窗口方法二
- 小总结
- 建module
- 改POM
- 写YML
- 主启动
- 业务类
2.热部署
-
Adding devtools to your project
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>
-
Adding plugin to your pom.xml
下面配置我们粘贴进聚合父类总工程的pom.xml里 <build> <fileName>你自己的工程名字<fileName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> <addResources>true</addResources> </configuration> </plugin> </plugins> </build>
-
Enabling automatic build
- 重启idea
3.cloud-consumer-order80 微服务消费者订单Module模块
-
建cloud-consumer-order80
-
改POM
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
-
写YML
server: port: 80
-
主启动
@SpringBootApplication public class OrderMain80 { public static void main(String[] args) { SpringApplication.run(OrderMain80.class,args); } }
-
业务类
entites 和 Cloud-provider-payment8001 一样
-
首说Resttemplate
- config对其配置
```xml @Configuration public class ApplicationContextConfig { @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); } } ```
-
controller
@RestController @Slf4j public class OrderController { public static final String PAYMENT_URL="http://localhost:8001"; @Resource private RestTemplate restTemplate; @GetMapping("/consumer/payment/create") public CommonResult<Payment> create(Payment payment){ return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class); } @GetMapping("/consumer/payment/{id}") public CommonResult<Payment> getPayment(@PathVariable("id") Long id){ return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class); } }
-
测试
http://localhost/consumer/payment/32
http://localhost/consumer/payment/create?serial=222
注意
测试一下插入发现成功了,但是数据库没值,只有自增主键,这里插入没成功的原因是,8001的创建参数没加@RequestBody,
4. 工程重构
- 系统中有重复部分,重构
-
新建
cloud-api-common
-
POM
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.1.0</version> </dependency> </dependencies>
-
entties
Payment实体、CommonResult通用封装类 进行打包
-
maven命令clean install
-
订单80和支付8001分别改造
1、删除各自的原先的entities文件夹
2、分别在pom文件中进行配置
<dependency> <groupId>com.atguigu.springcloud</groupId> <artifactId>cloud-api-common</artifactId> <version>${project.version}</version> </dependency>
欢迎转载和分享,记得点赞呀
漂吧 原创文章 9获赞 3访问量 282 关注 私信- 10.SpringBoot+SpringCloud+RestTemplate+Ribbon搭建微服务
- 【Spring Cloud】Eureka服务注册中心搭建
- Spring Cloud 入门教程(二): 服务消费者(rest+ribbon)
- SpringCloud(四):服务注册中心Eureka Eureka高可用集群搭建 Eureka自我保护机制
- @4步教你idea搭建SpringCloud工程
- SpringCloud从入门到进阶(四)——使用SpringBoot搭建微服务
- SpringCloud: 服务消费者(rest+ribbon)
- Spring Cloud云架构 - commonservice-sso服务搭建
- SpringCloud(三):服务消费以及负载均衡(RestTemplate+Ribbon)
- (超详细)SSM+SpringBoot+SpringCloud--Rest微服务简单案例(学习springcloud之前可以参考)
- SpringCloud 服务消费者(rest+ribbon/Feign)
- SpringCloud微服务搭建教程有负载均衡
- spring cloud+.net core搭建微服务架构:服务注册(一)
- Linux服务器Git私服搭建:为Spring Cloud Config提供Git服务支持
- 【Spring Cloud】Eureka服务注册中心搭建
- SpringCloud学习之路(一): SpringCloud 微服务环境搭建
- spring cloud+dotnet core搭建微服务架构:服务发现(二)
- 玩转SpringCloud(F版本) 二.服务消费者(1)ribbon+restTemplate
- Spring Cloud 入门教程(六): 用声明式REST客户端Feign调用远端HTTP服务
- spring cloud 微服务搭建