當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringCloud 搭建项目环境、创建 Dept 微服务、客户端调用微服务
生活随笔
收集整理的這篇文章主要介紹了
SpringCloud 搭建项目环境、创建 Dept 微服务、客户端调用微服务
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于 Rest 基礎架構實現處理是 SpringCloud 核心所在,其基本操作形式在 SpringBoot 之中已經有了明確
的講解,那么本次為 了清晰可見,創建一套新的微服務架構:部門微服務(Dept)。如果要想進行 SpringCloud 開發,那么一定要對 SpringBoot 有一定的了解,同時本次也將融合 MyBatis
開發技術實現整體的微 服務的創建處理。2.1、搭建項目環境對于現在的項目創建一個:microcloud 的整體父 pom 項目,那么隨后為了方便管理,將創建其三個子模塊:· microcloud-api 模塊,作為公共的信息導入配置模塊;· microcloud-provider-dept-8001:作為服務提供者,該提供者負責使用 Mybatis 與數據庫交互;· microcloud-consumer-80:作為微服務調用的客戶端使用。· microcloud-consumer-80:作為微服務調用的客戶端使用。1、 創建一個新的 maven 項目:microcloud;2、 【microcloud】修改 pom.xml 文件,主要追加 springcloud 與 springboot 兩個開發包的依賴關系;注意:SpringCloud 中針對于依賴包的版本并不是像傳統那樣采用數字的形式定義的,而是使用了一系列的英國的地鐵或城鎮的名字來定義的。<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>cn.study</groupId><artifactId>microcloud</artifactId><version>0.0.1</version><packaging>pom</packaging><name>microcloud</name><url>http://maven.apache.org</url><properties><jdk.version>1.8</jdk.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencyManagement><dependencies><dependency> <!-- 進行SpringCloud依賴包的導入處理 --><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.SR1</version><type>pom</type><scope>import</scope></dependency><dependency> <!-- SpringCloud離不開SpringBoot,所以必須要配置此依賴包 --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>1.5.4.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><finalName>microcloud</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${jdk.version}</source><!-- 源代碼使用的開發版本 --><target>${jdk.version}</target><!-- 需要生成的目標class文件的編譯版本 --><encode>${project.build.sourceEncoding}</encode></configuration></plugin></plugins></build><modules><module>microcloud-provider-dept-8001</module></modules>
</project>
3、 【microcloud-api】建立一個 api 的公共模塊,該模塊的主要功能是提供有公共處理類,本次預計建立一個 Dept 數據表,里面 的字段:deptno(Long)、dname(String)、loc(保存的數據庫的名字);package cn.study.vo;import java.io.Serializable;@SuppressWarnings("serial")
public class Dept implements Serializable {private Long deptno ;private String dname ;private String loc ;public Long getDeptno() {return deptno;}public void setDeptno(Long deptno) {this.deptno = deptno;}public String getDname() {return dname;}public void setDname(String dname) {this.dname = dname;}public String getLoc() {return loc;}public void setLoc(String loc) {this.loc = loc;}@Overridepublic String toString() {return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc+ "]";}
}<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>cn.study</groupId><artifactId>microcloud-api</artifactId><version>0.0.1-SNAPSHOT</version>
</project>
4、 創建一個 Rest 提供者的【microcloud-provider-dept-8001】項目模塊,在這個模塊里面主要定義要使用的數據庫腳本:DROP DATABASE IF EXISTS study8001;
CREATE DATABASE study8001 CHARACTER SET UTF8 ;
USE study8001 ;
CREATE TABLE dept (deptno BIGINT AUTO_INCREMENT ,dname VARCHAR(50) ,loc VARCHAR(50) ,CONSTRAINT pk_deptno PRIMARY KEY(deptno)
) ;
INSERT INTO dept(dname,loc) VALUES ('開發部',database()) ;
INSERT INTO dept(dname,loc) VALUES ('財務部',database()) ;
INSERT INTO dept(dname,loc) VALUES ('市場部',database()) ;
INSERT INTO dept(dname,loc) VALUES ('后勤部',database()) ;
INSERT INTO dept(dname,loc) VALUES ('公關部',database()) ;由于在整個微服務里面需要進行負載均衡的操作,所以本次在使用的時候加入了數據庫的名稱信息。
2.2、創建 Dept 微服務所謂的微服務的核心本質就是 JSON 的傳輸,那么既然現在要求使用 MyBatis 進行數據庫操作,所以應該在項目里面配置 Druid 數據庫連接池,而后對外進行項目的發布。1、 【microcloud-provider-dept-8001】修改 pom.xml 配置文件,追加相關的依賴程序支持包:<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>cn.study</groupId><artifactId>microcloud</artifactId><version>0.0.1</version></parent><artifactId>microcloud-provider-dept-8001</artifactId><dependencies><dependency><groupId>cn.study</groupId><artifactId>microcloud-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency> <groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.31</version></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><version>2.0.0</version></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><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>springloaded</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies></project>
2、 【microcloud-provider-dept-8001】創建一個 IDeptDAO 數據操作接口,這個接口里面將提供有三個數據操作方法:package cn.study.microcloud.dao;import java.util.List;import org.apache.ibatis.annotations.Mapper;import cn.study.vo.Dept;@Mapper
public interface IDeptDAO {public boolean doCreate(Dept vo) ;public Dept findById(Long id) ;public List<Dept> findAll() ;
}
3、 【microcloud-provider-dept-8001】修改 application.yml 配置文件,追加 mybatis 和服務的相關配置信息:application.propertiesserver.port = 8001spring.messages.basename=i18n/Messages,i18n/Pagesspring.profiles.active=productspring.datasource.url=jdbc:mysql://localhost:3306/study8001
?characterEncoding=utf-8&useSSL=false&useUnicode=true
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.druid.initialSize=5
spring.datasource.druid.minIdle=5
spring.datasource.druid.maxActive=20
spring.datasource.druid.maxWait=60000## Mybatis?
mybatis.config-location=classpath:mybatis/mybatis.cfg.xml
mybatis.mapper-locations=classpath:mybatis/mapper/**/*.xml
mybatis.typeAliasesPackage=cn.study.vo
4、 【microcloud-provider-dept-8001】定義 src/main/resources/mybatis/mybatis.cfg.xml 配置文件:mybatis.cfg.xml<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> <!-- 進行Mybatis的相應的環境的屬性定義 --><settings> <!-- 在本項目之中開啟二級緩存 --><setting name="cacheEnabled" value="true"/></settings>
</configuration>
5、 【microcloud-provider-dept-8001】修改 src/main/resources/mybatis/mapper/cn/study/Dept.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="cn.study.microcloud.dao.IDeptDAO"><select id="findById" resultType="Dept" parameterType="long">SELECT deptno,dname,loc FROM dept WHERE deptno=#{deptno} ;</select><select id="findAll" resultType="Dept">SELECT deptno,dname,loc FROM dept ;</select><insert id="doCreate" parameterType="Dept">INSERT INTO dept(dname,loc) VALUES (#{dname},database()) ;</insert>
</mapper>
6、 【microcloud-provider-dept-8001】建立 IDeptService 接口,做業務實現:package cn.study.microcloud.service;import java.util.List;import cn.study.vo.Dept;public interface IDeptService {public Dept get(long id) ;public boolean add(Dept dept) ;public List<Dept> list() ;
}package cn.study.microcloud.service.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Service;import cn.study.microcloud.dao.IDeptDAO;
import cn.study.microcloud.service.IDeptService;
import cn.study.vo.Dept;@Service
public class DeptServiceImpl implements IDeptService {@Resourceprivate IDeptDAO deptDAO ;@Overridepublic Dept get(long id) {return this.deptDAO.findById(id);}@Overridepublic boolean add(Dept dept) {return this.deptDAO.doCreate(dept);}@Overridepublic List<Dept> list() {return this.deptDAO.findAll();}}
7、 【microcloud-provider-dept-8001】定義程序的運行主類package cn.study.microcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Dept_8001_StartSpringCloudApplication {public static void main(String[] args) {SpringApplication.run(Dept_8001_StartSpringCloudApplication.class, args);}
}
8、 【microcloud-provider-dept-8001】進行業務接口測試編寫:package cn.study.test;import javax.annotation.Resource;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;import cn.study.microcloud.Dept_8001_StartSpringCloudApplication;
import cn.study.microcloud.service.IDeptService;
import cn.study.vo.Dept;@SpringBootTest(classes = Dept_8001_StartSpringCloudApplication.class)
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class IDeptServiceTest {@Resourceprivate IDeptService deptService ;@Testpublic void testGet() {System.out.println(this.deptService.get(1));}@Testpublic void testAdd() {Dept dept = new Dept() ;dept.setDname("測試部-" + System.currentTimeMillis());System.out.println(this.deptService.add(dept)); }@Testpublic void testList() {System.out.println(this.deptService.list());}}
9、 【microcloud-provider-dept-8001】建立Restful的DeptRest 服務類:package cn.study.microcloud.rest;import javax.annotation.Resource;import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import cn.study.microcloud.service.IDeptService;
import cn.study.vo.Dept;@RestController
public class DeptRest {@Resourceprivate IDeptService deptService ;@RequestMapping(value="/dept/get/{id}",method=RequestMethod.GET)public Object get(@PathVariable("id") long id) {return this.deptService.get(id) ;}@RequestMapping(value="/dept/add",method=RequestMethod.GET)public Object add(@RequestBody Dept dept) {return this.deptService.add(dept) ;}@RequestMapping(value="/dept/list",method=RequestMethod.GET)public Object list() {return this.deptService.list() ;}
}
11、 觀察 Rest 服務能否正常提供:· 調用 get 操作:http://localhost:8001/dept/get/1{"deptno":1,"dname":"開發部","loc":"study8001"}· 調用 list 操作:http://localhost:8001/dept/list[{"deptno":1,"dname":"開發部","loc":"study8001"},
{"deptno":2,"dname":"財務部","loc":"study8001"},
{"deptno":3,"dname":"市場部","loc":"study8001"},
{"deptno":4,"dname":"后勤部","loc":"study8001"},
{"deptno":5,"dname":"公關部","loc":"study8001"},
{"deptno":6,"dname":"測試部-1551928957533","loc":"study8001"}]
2.3、客戶端調用微服務1、 創建一個 Maven 的新的模塊:microcloud-consumer-80;2、 【microcloud-consumer-80】修改 application.properties 配置文件:server.port = 80pom.xml<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>microcloud-consumer-80</groupId><artifactId>microcloud-consumer-80</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><thymeleaf.version>3.0.9.RELEASE</thymeleaf.version><thymeleaf-layout-dialect.version>2.3.0</thymeleaf-layout-dialect.version><!-- 布局功能的支持程序 thymeleaf3主程序 layout2以上版本 --><!-- thymeleaf2 layout1 --><thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version></properties> <dependencies><dependency><!-- 引入web模塊 --><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>microboot-restful-api</groupId><artifactId>microboot-restful-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.7.0</version></dependency><dependency><groupId>cn.study</groupId><artifactId>microcloud-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies></project>
3、 【microcloud-consumer-80】創建一個 Rest 的配置程序類,主要進行 RestTemplate 類對象創建,這里很重要,編寫這個類然后在控制器里面使用@Resource注解注入以后控制器就可以調用其他微服務了package cn.study.microcloud.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class RestConfig {@Beanpublic RestTemplate getRestTemplate() {return new RestTemplate() ;}
}
4、 【microcloud-consumer-80】創建一個控制器,為了簡化處理,本次不再進行頁面定義了,所有服務結果都使用 Rest 返回;package cn.study.microcloud.controller;import java.util.List;import javax.annotation.Resource;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import cn.study.vo.Dept;@RestController
public class ConsumerDeptController {public static final String DEPT_GET_URL = "http://localhost:8001/dept/get/";public static final String DEPT_LIST_URL = "http://localhost:8001/dept/list/";public static final String DEPT_ADD_URL = "http://localhost:8001/dept/add";//使用@Resource注解注入RestTemplate以后控制器就可以調用其他微服務了@Resourceprivate RestTemplate restTemplate;@RequestMapping(value = "/consumer/dept/get")public Object getDept(long id) {Dept dept = this.restTemplate.getForObject(DEPT_GET_URL + id,Dept.class);return dept;}@SuppressWarnings("unchecked")@RequestMapping(value = "/consumer/dept/list")public Object listDept() {List<Dept> allDepts = this.restTemplate.getForObject(DEPT_LIST_URL,List.class); return allDepts;}@RequestMapping(value = "/consumer/dept/add")public Object addDept(Dept dept) {Boolean flag = this.restTemplate.postForObject(DEPT_ADD_URL, dept,Boolean.class);return flag;}
}}
}
5、 【microcloud-consumer-80】編寫啟動程序類package cn.study.microcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Consumer_80_StartSpringCloudApplication {public static void main(String[] args) {SpringApplication.run(Consumer_80_StartSpringCloudApplication.class,args);}
}
進行代碼測試調用:· 調用數據返回:http://localhost/consumer/dept/get?id=1{"deptno":1,"dname":"開發部","loc":"study8001"}· 測試列表數據:http://localhost/consumer/dept/list[{"deptno":1,"dname":"開發部","loc":"study8001"},
{"deptno":2,"dname":"財務部","loc":"study8001"},
{"deptno":3,"dname":"市場部","loc":"study8001"},
{"deptno":4,"dname":"后勤部","loc":"study8001"},
{"deptno":5,"dname":"公關部","loc":"study8001"},
{"deptno":6,"dname":"測試部-1551928957533","loc":"study8001"}]· 測試數據增加:http://localhost/consumer/dept/add?dname=WEB測試
?
總結
以上是生活随笔為你收集整理的SpringCloud 搭建项目环境、创建 Dept 微服务、客户端调用微服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot整合 Shiro
- 下一篇: SpringCloud 配置安全验证、服