javascript
Spring Cloud 云架构下的微服务架构:部门微服务(Dept)
作者 |?springML
來源 | CSDN 博客 責編 | Carol
出品 | CSDN云計算(ID:CSDNcloud)
封圖|?CSDN下載于視覺中國?
對于 Rest 基礎架構實現處理是 SpringCloud 核心所在,其基本操作形式在 SpringBoot 之中已經有了明確的講解,那么本次為了清晰可見,創建一套新的微服務架構:部門微服務(Dept)。
如果要想進行 SpringCloud 開發,那么一定要對 SpringBoot 有一定的了解,同時本次也將融合 MyBatis 開發技術實現整體的微服務的創建處理。
搭建項目環境
對于現在的項目創建一個:microcloud 的整體父 pom 項目,那么隨后為了方便管理,將創建其三個子模塊:
microcloud-api 模塊,作為公共的信息導入配置模塊;
microcloud-provider-dept-8001:作為服務提供者,該提供者負責使用 Mybatis 與數據庫交互;
microcloud-consumer-80:作為微服務調用的客戶端使用。
1.1 創建一個新的 maven 項目:microcloud;
1.2 【microcloud】修改 pom.xml 文件,主要追加 springcloud 與 springboot 兩個開發包的依賴關系;
<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> </project>1)【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+?"]";} }3、 創建一個 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())?;由于在整個微服務里面需要進行負載均衡的操作,所以本次在使用的時候加入了數據庫的名稱信息。
創建 Dept 微服務
所謂的微服務的核心本質就是 JSON 的傳輸,那么既然現在要求使用 MyBatis 進行數據庫操作,所以應該在項目里面配置 Druid 數據庫連接池,而后對外進行項目的發布。
1、 【microcloud-provider-dept-8001】修改 pom.xml 配置文件,追加相關的依賴程序支持包:
????<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】創建一個 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 和服務的相關配置信息:
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????#?配置當前要使用的數據源的操作類型driver-class-name:?org.gjt.mm.mysql.Driver??????#?配置MySQL的驅動程序類url:?jdbc:mysql://localhost:3306/study8001???????????#?數據庫連接地址username:?root??????????????????????????????????#?數據庫用戶名password:?mysqladmin????????????????????????????#?數據庫連接密碼dbcp2:??????????????????????????????????????????#?進行數據庫連接池的配置min-idle:?5???????????????????????????????????#?數據庫連接池的最小維持連接數????initial-size:?5???????????????????????????????#?初始化提供的連接數max-total:?5??????????????????????????????????#?最大的連接數max-wait-millis:?200??????????????????????????#?等待連接獲取的最大超時時間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>?<!--?進行Mybatis的相應的環境的屬性定義?--><settings>????<!--?在本項目之中開啟二級緩存?--><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 接口,做業務實現:
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?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("測試部-"?+?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()?;} }10、 修改 hosts 配置文件,追加一個映射路徑(路徑:C:\Windows\System32\drivers\etc\hosts)。
127.0.0.1?dept-8001.com11、 觀察 Rest 服務能否正常提供:
· 調用 get 操作:dept-8001.com:8001/dept/get/1;
· 調用 list 操作:dept-8001.com:8001/dept/list;
客戶端調用微服務
1、 創建一個 Maven 的新的模塊:microcloud-consumer-80;
2、 【microcloud-consumer-80】修改 application.yml 配置文件:
server:port:?803、 【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://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以后控制器就可以調用其他微服務了@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);} }6、 修改 hosts 配置文件,追加訪問控制路徑:
127.0.0.1?client.com7、 進行代碼測試調用:
調用數據返回:
http://client.com/consumer/dept/get?id=1;
測試列表數據:
http://client.com/consumer/dept/list;
測試數據增加:
http://client.com/consumer/dept/add?dname=WEB 測試
感興趣的開發者小伙伴都可以嘗試一下這個方法,或許能讓你找到一些新的靈感。也可以在評論區和我們一起討論你的想法~
本文由作者首發于 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
同時,歡迎所有開發者掃描下方二維碼填寫《開發者與AI大調研》,只需2分鐘,便可收獲價值299元的「AI開發者萬人大會」在線直播門票!
推薦閱讀:小網站的容器化(下):網站容器化的各種姿勢,先跟著擼一波代碼再說! 你知道嗎?其實 Oracle 直方圖自動統計算法存在這些缺陷!(附驗證步驟) 詳解以太坊虛擬機(EVM)的數據存儲機制 比特幣當贖金,WannaRen 勒索病毒二度來襲!平臺抗住日訪問量 7 億次,研發品控流程全公開“手把手撕LeetCode題目,扒各種算法套路的褲子”北京四環堵車引發的智能交通大構想從Ngin到Pandownload,程序員如何避免面向監獄編程? 真香,朕在看了!總結
以上是生活随笔為你收集整理的Spring Cloud 云架构下的微服务架构:部门微服务(Dept)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我最喜欢的云 IDE 推荐!
- 下一篇: 一文了解 Spring Boot 服务监