本篇是 SpringCloud 学习笔记的第四篇。 Eclipse 构建Maven 分包分模块项目。本篇构建的Maven模块项目是之后SpringCloud各个组件整合的基础模块。本篇主要介绍的是微服务的消费者
本篇关联篇章如下:
- 主页
- 1、简单微服务SpringCloud学习
- 2、微服务架构与SpringCloud
- 3、Eclipse构建Maven分包项目并构建服务端
在一篇文章中我们使用Eclipse开发工具,通过Mavan 构建分项目springcloudDemo-provider-dept-8001(服务提供者),下面我们介绍服务的客户端
父项目SpringCloudDemo新建子项目
鼠标右键点击 父项目 springcloudDemo,新建 Maven Mondule ,点击下一步
点击下一步,直接finish,确认Packing为jar
项目结构
POM 文件
<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>
<parent>
<groupId>com.mike.demo</groupId>
<artifactId>springcloudDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>springcloudDemo-consumer-dept-80</artifactId>
<description>部门微服务消费者</description>
<dependencies>
<dependency><!-- 引入自己定义的api通用包,可以使用Dept部门Entity -->
<groupId>com.mike.demo</groupId>
<artifactId>springcloudDemo-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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: 80
ConfigBean 构建
这个模块是消费者的核心,类似JDBC 使用JDBCTemplates 来操作数据库, 消费者使用RestTemplate
来连接生产者微服务,调用生产者接口(Controller层面)
package com.mike.demo.cfgbeans;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration //表明此类是配置类,减少了XML配置
public class ConfigBean
{
@Bean // 注入配置中心
public RestTemplate getRestTemplate()
{
return new RestTemplate();
}
}
Controller
package com.mike.demo.controller;
import java.util.List;
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.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import com.mike.demo.entities.Dept;
@RestController
public class DeptController_Consumer {
private static final String REST_URL_PREFIX="http://localhost:8001";
@Autowired
private RestTemplate restTemplate;
/**
* RestTemplate 类似 JDBCTemplate 提供了多种便捷访问远程Http服务的方法,是一种简单便捷的访问Restful服务
* 模板类,是Spring 提供的用于访问Rest 服务的客户端模板工具集 GET POST PUT DELETE
* (url,requestMap,ResponseBean.class)
* REST 请求地址,请求参数, HTTP响应转换被转换的对象类型
*/
@PostMapping("/consumer/dept/add")
public Boolean add(Dept dept) {
return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);
}
@GetMapping("/consumer/dept/get/{id}")
public Dept get(@PathVariable("id") Long id) {
return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/"+id, Dept.class);
}
@GetMapping("/consumer/dept/list")
public List<Dept> list() {
return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);
}
}
主启动类
package com.mike.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 服务的消费者
* @author asus
*
*/
@SpringBootApplication
public class DeptConsumer80_App {
public static void main(String[] args) {
SpringApplication.run(DeptConsumer80_App.class, args);
}
}
测试:
启动服务的生产者和消费者