天天看點

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

目錄

一、總體介紹

1、背景知識

2、maven的分包分子產品架構

3、動手直接幹

二、SpringCloud版本

三、建構步驟

1、microservicecloud整體父工程project(pom)

(1)項目結構--以下是建立了兩個子產品之後的

(2)pom檔案

2、microservicecloud-api公共子子產品module(jar)

(1)項目結構

(2)pom檔案

(3)Dept.java

3、microservicecloud-provider-dept-8001部門微服務提供者module(jar)

(1)項目結構

(2)pom檔案

(3)application.yml檔案

(3)sql腳本

(4)編寫dao、對應的xml以及service、serviceImpl

(5)主啟動類

(6)測試

4、microservicecloud-consumenr-dept-80部門微服務消費者module(jar)

(1)項目結構

(2)pom檔案

(3)application.yml

(4)ConfigBean編寫

(4)Controller編寫

(5)啟動主類DeptConsumer80_App .java

(6)測試

一、總體介紹

1、背景知識

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

2、maven的分包分子產品架構

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟
Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟
Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

3、動手直接幹

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

二、SpringCloud版本

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟
Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

三、建構步驟

1、microservicecloud整體父工程project(pom)

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

(1)項目結構--以下是建立了兩個子產品之後的

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

(2)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>
  <groupId>com.atguigu.springcloud</groupId>
  <artifactId>microservicecloud</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  
  <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>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Dalston.SR1</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-dependencies</artifactId>
				<version>1.5.9.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
			<dependency>
				<groupId>mysql</groupId>
				<artifactId>mysql-connector-java</artifactId>
				<version>5.0.4</version>
			</dependency>
			<dependency>
				<groupId>com.alibaba</groupId>
				<artifactId>druid</artifactId>
				<version>1.0.31</version>
			</dependency>
			<dependency>
				<groupId>org.mybatis.spring.boot</groupId>
				<artifactId>mybatis-spring-boot-starter</artifactId>
				<version>1.3.0</version>
			</dependency>
			<dependency>
				<groupId>ch.qos.logback</groupId>
				<artifactId>logback-core</artifactId>
				<version>1.2.3</version>
			</dependency>
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>${junit.version}</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>log4j</groupId>
				<artifactId>log4j</artifactId>
				<version>${log4j.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<finalName>microservicecloud</finalName>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<configuration>
					<delimiters>
						<delimit>$</delimit>
					</delimiters>
				</configuration>
			</plugin>
		</plugins>
	</build>
  
   <!-- module後面添加的時候會自動導入-->
	<!--<modules>
		<module>microservicecloud-api</module>
	</modules>-->
</project>
           

2、microservicecloud-api公共子子產品module(jar)

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

(1)項目結構

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

(2)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.atguigu.springcloud</groupId>
    <artifactId>microservicecloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>microservicecloud-api</artifactId>
  
  <dependencies><!-- 目前Module需要用到的jar包,按自己需求添加,如果父類已經包含了,可以不用寫版本号 -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-feign</artifactId>
		</dependency>
	</dependencies>
</project>
           

(3)Dept.java

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

3、microservicecloud-provider-dept-8001部門微服務提供者module(jar)

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

(1)項目結構

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

(2)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.atguigu.springcloud</groupId>
    <artifactId>microservicecloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>microservicecloud-provider-dept-8001</artifactId>
  <dependencies>
		<!-- 引入自己定義的api通用包,可以使用Dept部門Entity -->
		<dependency>
			<groupId>com.atguigu.springcloud</groupId>
			<artifactId>microservicecloud-api</artifactId>
			<version>${project.version}</version>
		</dependency>
		<!-- actuator監控資訊完善 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<!-- 将微服務provider側注冊進eureka -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-core</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jetty</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</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>
           

(3)application.yml檔案

server:
  port: 8001
  
mybatis:
  config-location: classpath:mybatis/mybatis.cfg.xml        # mybatis配置檔案所在路徑
  type-aliases-package: com.atguigu.springcloud.entities    # 所有Entity别名類所在包
  mapper-locations:
  - classpath:mybatis/mapper/**/*.xml                       # mapper映射檔案
    
spring:
   application:
    name: microservicecloud-dept 
   datasource:
    type: com.alibaba.druid.pool.DruidDataSource            # 目前資料源操作類型
    driver-class-name: org.gjt.mm.mysql.Driver              # mysql驅動包
    url: jdbc:mysql://localhost:3306/cloudDB01?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&verifyServerCertificate=false&useSSL=false              # 資料庫名稱
    username: root
    password: 123456
    dbcp2:
      min-idle: 5                                           # 資料庫連接配接池的最小維持連接配接數
      initial-size: 5                                       # 初始化連接配接數
      max-total: 5                                          # 最大連接配接數
      max-wait-millis: 200                                  # 等待連接配接擷取的最大逾時時間
           

(3)sql腳本

DROP DATABASE IF EXISTS cloudDB01;
CREATE DATABASE cloudDB01 CHARACTER SET UTF8;
USE cloudDB01;
CREATE TABLE dept
(
  deptno BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  dname VARCHAR(60),
  db_source   VARCHAR(60)
);
 
INSERT INTO dept(dname,db_source) VALUES('開發部',DATABASE());
INSERT INTO dept(dname,db_source) VALUES('人事部',DATABASE());
INSERT INTO dept(dname,db_source) VALUES('财務部',DATABASE());
INSERT INTO dept(dname,db_source) VALUES('市場部',DATABASE());
INSERT INTO dept(dname,db_source) VALUES('運維部',DATABASE());
 
SELECT * FROM dept;
 
 
 
           

(4)編寫dao、對應的xml以及service、serviceImpl

A、DeptDao.java

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

B、DeptMapper.xml

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

C、DeptService.java

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

D、DeptServiceImpl.java

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

E、DeptController.java

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

(5)主啟動類

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

(6)測試

啟動項目後通路:http://localhost:8001/dept/list

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

4、microservicecloud-consumenr-dept-80部門微服務消費者module(jar)

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

(1)項目結構

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

(2)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.atguigu.springcloud</groupId>
    <artifactId>microservicecloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>microservicecloud-consumenr-dept-80</artifactId>
  <description>部門微服務消費者</description>
  
  <dependencies>
		<dependency><!-- 自己定義的api -->
			<groupId>com.atguigu.springcloud</groupId>
			<artifactId>microservicecloud-api</artifactId>
			<version>${project.version}</version>
		</dependency>
		<!-- Ribbon相關 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-ribbon</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</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>
           

(3)application.yml

server:
  port: 80
           

(4)ConfigBean編寫

 RestTemplate提供了多種便捷通路遠端Http服務的方法, 

是一種簡單便捷的通路restful服務模闆類,是Spring提供的用于通路Rest服務的用戶端模闆工具集

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

官網位址:https://docs.spring.io/spring-framework/docs/4.3.7.RELEASE/javadoc-api/org/springframework/web/client/RestTemplate.html

(4)Controller編寫

使用restTemplate通路restful接口非常的簡單粗暴無腦。

(url, requestMap, ResponseBean.class)這三個參數分别代表 REST請求位址、請求參數、HTTP響應轉換被轉換成的對象類型。 

@RestController
public class DeptController_Consumer
{
    private static final String REST_URL_PREFIX = "http://localhost:8001";
    
    @Autowired
    private RestTemplate restTemplate;
    
    @RequestMapping(value="/consumer/dept/add")
    public boolean add(Dept dept)
    {
         return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add", dept, Boolean.class);
    }
    
    @RequestMapping(value="/consumer/dept/get/{id}")
    public Dept get(@PathVariable("id") Long id)
    {
         return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get/"+id, Dept.class);
    }
    
    @SuppressWarnings("unchecked")
    @RequestMapping(value="/consumer/dept/list")
    public List<Dept> list()
    {
         return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list", List.class);
    }   
}
           

(5)啟動主類DeptConsumer80_App .java

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

(6)測試

運作provider和consumer子產品後通路:http://localhost/consumer/dept/get/1

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟

檢視程序,可看到啟動了兩個程序,每一個微服務耗費的記憶體挺大的

Rest微服務建構案例工程子產品一、總體介紹二、SpringCloud版本三、建構步驟