javascript
Spring Cloud 云架构下的微服务架构:部门微服务(Dept)
作者 |?springML
來源 | CSDN 博客 責(zé)編 | Carol
出品 | CSDN云計(jì)算(ID:CSDNcloud)
封圖|?CSDN下載于視覺中國?
對(duì)于 Rest 基礎(chǔ)架構(gòu)實(shí)現(xiàn)處理是 SpringCloud 核心所在,其基本操作形式在 SpringBoot 之中已經(jīng)有了明確的講解,那么本次為了清晰可見,創(chuàng)建一套新的微服務(wù)架構(gòu):部門微服務(wù)(Dept)。
如果要想進(jìn)行 SpringCloud 開發(fā),那么一定要對(duì) SpringBoot 有一定的了解,同時(shí)本次也將融合 MyBatis 開發(fā)技術(shù)實(shí)現(xiàn)整體的微服務(wù)的創(chuàng)建處理。
搭建項(xiàng)目環(huán)境
對(duì)于現(xiàn)在的項(xiàng)目創(chuàng)建一個(gè):microcloud 的整體父 pom 項(xiàng)目,那么隨后為了方便管理,將創(chuàng)建其三個(gè)子模塊:
microcloud-api 模塊,作為公共的信息導(dǎo)入配置模塊;
microcloud-provider-dept-8001:作為服務(wù)提供者,該提供者負(fù)責(zé)使用 Mybatis 與數(shù)據(jù)庫交互;
microcloud-consumer-80:作為微服務(wù)調(diào)用的客戶端使用。
1.1 創(chuàng)建一個(gè)新的 maven 項(xiàng)目:microcloud;
1.2 【microcloud】修改 pom.xml 文件,主要追加 springcloud 與 springboot 兩個(gè)開發(fā)包的依賴關(guān)系;
<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>????<!--?進(jìn)行SpringCloud依賴包的導(dǎo)入處理?--><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><!--?源代碼使用的開發(fā)版本?--><target>${jdk.version}</target><!--?需要生成的目標(biāo)class文件的編譯版本?--><encode>${project.build.sourceEncoding}</encode></configuration></plugin></plugins></build> </project>1)【microcloud-api】建立一個(gè) api 的公共模塊,該模塊的主要功能是提供有公共處理類,本次預(yù)計(jì)建立一個(gè) Dept 數(shù)據(jù)表,里面的字段:deptno(Long)、dname(String)、loc(保存的數(shù)據(jù)庫的名字);
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+?"]";} }3、 創(chuàng)建一個(gè) Rest 提供者的【microcloud-provider-dept-8001】項(xiàng)目模塊,在這個(gè)模塊里面主要定義要使用的數(shù)據(jù)庫腳本:
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?('開發(fā)部',database())?; INSERT?INTO?dept(dname,loc)?VALUES?('財(cái)務(wù)部',database())?; INSERT?INTO?dept(dname,loc)?VALUES?('市場(chǎng)部',database())?; INSERT?INTO?dept(dname,loc)?VALUES?('后勤部',database())?; INSERT?INTO?dept(dname,loc)?VALUES?('公關(guān)部',database())?;由于在整個(gè)微服務(wù)里面需要進(jìn)行負(fù)載均衡的操作,所以本次在使用的時(shí)候加入了數(shù)據(jù)庫的名稱信息。
創(chuàng)建 Dept 微服務(wù)
所謂的微服務(wù)的核心本質(zhì)就是 JSON 的傳輸,那么既然現(xiàn)在要求使用 MyBatis 進(jìn)行數(shù)據(jù)庫操作,所以應(yīng)該在項(xiàng)目里面配置 Druid 數(shù)據(jù)庫連接池,而后對(duì)外進(jìn)行項(xiàng)目的發(fā)布。
1、 【microcloud-provider-dept-8001】修改 pom.xml 配置文件,追加相關(guān)的依賴程序支持包:
????<dependencies><dependency><groupId>cn.study</groupId><artifactId>microcloud-api</artifactId></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></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><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>2、 【microcloud-provider-dept-8001】創(chuàng)建一個(gè) IDeptDAO 數(shù)據(jù)操作接口,這個(gè)接口里面將提供有三個(gè)數(shù)據(jù)操作方法:
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 和服務(wù)的相關(guān)配置信息:
server:port:?8001 mybatis:config-location:?classpath:mybatis/mybatis.cfg.xml????#?mybatis配置文件所在路徑type-aliases-package:?cn.study.vo????????????#?定義所有操作類的別名所在包mapper-locations:?????????????????????????????????????#?所有的mapper映射文件-?classpath:mybatis/mapper/**/*.xml spring:datasource:type:?com.alibaba.druid.pool.DruidDataSource????#?配置當(dāng)前要使用的數(shù)據(jù)源的操作類型driver-class-name:?org.gjt.mm.mysql.Driver??????#?配置MySQL的驅(qū)動(dòng)程序類url:?jdbc:mysql://localhost:3306/study8001???????????#?數(shù)據(jù)庫連接地址username:?root??????????????????????????????????#?數(shù)據(jù)庫用戶名password:?mysqladmin????????????????????????????#?數(shù)據(jù)庫連接密碼dbcp2:??????????????????????????????????????????#?進(jìn)行數(shù)據(jù)庫連接池的配置min-idle:?5???????????????????????????????????#?數(shù)據(jù)庫連接池的最小維持連接數(shù)????initial-size:?5???????????????????????????????#?初始化提供的連接數(shù)max-total:?5??????????????????????????????????#?最大的連接數(shù)max-wait-millis:?200??????????????????????????#?等待連接獲取的最大超時(shí)時(shí)間4、 【microcloud-provider-dept-8001】定義 src/main/resources/mybatis/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>?<!--?進(jìn)行Mybatis的相應(yīng)的環(huán)境的屬性定義?--><settings>????<!--?在本項(xiàng)目之中開啟二級(jí)緩存?--><setting?name="cacheEnabled"?value="true"/></settings> </configuration>5、 【microcloud-provider-dept-8001】修改 src/main/resources/mybatis/mapper/cn/mldn/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 接口,做業(yè)務(wù)實(shí)現(xiàn):
7、 【microcloud-provider-dept-8001】定義程序的運(yùn)行主類
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】進(jìn)行業(yè)務(wù)接口測(cè)試編寫:
package?cn.study.test;import?static?org.junit.Assert.fail;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("測(cè)試部-"?+?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 服務(wù)類:
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()?;} }10、 修改 hosts 配置文件,追加一個(gè)映射路徑(路徑:C:\Windows\System32\drivers\etc\hosts)。
127.0.0.1?dept-8001.com11、 觀察 Rest 服務(wù)能否正常提供:
· 調(diào)用 get 操作:dept-8001.com:8001/dept/get/1;
· 調(diào)用 list 操作:dept-8001.com:8001/dept/list;
客戶端調(diào)用微服務(wù)
1、 創(chuàng)建一個(gè) Maven 的新的模塊:microcloud-consumer-80;
2、 【microcloud-consumer-80】修改 application.yml 配置文件:
server:port:?803、 【microcloud-consumer-80】創(chuàng)建一個(gè) Rest 的配置程序類,主要進(jìn)行 RestTemplate 類對(duì)象創(chuàng)建,這里很重要,編寫這個(gè)類然后在控制器里面使用@Resource注解注入以后控制器就可以調(diào)用其他微服務(wù)了
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】創(chuàng)建一個(gè)控制器,為了簡(jiǎn)化處理,本次不再進(jìn)行頁面定義了,所有服務(wù)結(jié)果都使用 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://dept-8001.com:8001/dept/get/";public?static?final?String?DEPT_LIST_URL?=?"http://dept-8001.com:8001/dept/list/";public?static?final?String?DEPT_ADD_URL?=?"http://dept-8001.com:8001/dept/add";//使用@Resource注解注入RestTemplate以后控制器就可以調(diào)用其他微服務(wù)了@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】編寫啟動(dòng)程序類
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);} }6、 修改 hosts 配置文件,追加訪問控制路徑:
127.0.0.1?client.com7、 進(jìn)行代碼測(cè)試調(diào)用:
調(diào)用數(shù)據(jù)返回:
http://client.com/consumer/dept/get?id=1;
測(cè)試列表數(shù)據(jù):
http://client.com/consumer/dept/list;
測(cè)試數(shù)據(jù)增加:
http://client.com/consumer/dept/add?dname=WEB 測(cè)試
感興趣的開發(fā)者小伙伴都可以嘗試一下這個(gè)方法,或許能讓你找到一些新的靈感。也可以在評(píng)論區(qū)和我們一起討論你的想法~
本文由作者首發(fā)于 CSDN 博客,原文鏈接:
https://blog.csdn.net/springML/article/details/88039134?ops_request_misc=&request_id=&biz_id=&utm_source=distribute.pc_search_result.none-task-blog-blog_SOBAIDUEND-9
同時(shí),歡迎所有開發(fā)者掃描下方二維碼填寫《開發(fā)者與AI大調(diào)研》,只需2分鐘,便可收獲價(jià)值299元的「AI開發(fā)者萬人大會(huì)」在線直播門票!
推薦閱讀:小網(wǎng)站的容器化(下):網(wǎng)站容器化的各種姿勢(shì),先跟著擼一波代碼再說! 你知道嗎?其實(shí) Oracle 直方圖自動(dòng)統(tǒng)計(jì)算法存在這些缺陷!(附驗(yàn)證步驟) 詳解以太坊虛擬機(jī)(EVM)的數(shù)據(jù)存儲(chǔ)機(jī)制 比特幣當(dāng)贖金,WannaRen 勒索病毒二度來襲!平臺(tái)抗住日訪問量 7 億次,研發(fā)品控流程全公開“手把手撕LeetCode題目,扒各種算法套路的褲子”北京四環(huán)堵車引發(fā)的智能交通大構(gòu)想從Ngin到Pandownload,程序員如何避免面向監(jiān)獄編程? 真香,朕在看了!總結(jié)
以上是生活随笔為你收集整理的Spring Cloud 云架构下的微服务架构:部门微服务(Dept)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我最喜欢的云 IDE 推荐!
- 下一篇: 90% 程序员都吃亏在这门技术上了,你呢