實(shí)戰(zhàn)分布式醫(yī)療掛號(hào)系統(tǒng)之設(shè)置微服務(wù)搭建醫(yī)院模塊
文章導(dǎo)讀
本系列文章介紹從0開(kāi)始搭建一個(gè)基于分布式的醫(yī)療掛號(hào)系統(tǒng)。本次四篇文章完成了醫(yī)院設(shè)置微服務(wù)模塊的后端接口,為了方便開(kāi)發(fā),對(duì)接口的返回結(jié)果、全局異常、全局日志進(jìn)行了統(tǒng)一處理。 同時(shí),為了方便進(jìn)行訪問(wèn)測(cè)試,還整合了Swagger2工具,這些通用的模塊中,除了全局日志被放在醫(yī)院設(shè)置微服務(wù)模塊的配置資源中,其余都統(tǒng)一被抽取在common模塊中。具體實(shí)現(xiàn)可參考下面文章:
醫(yī)院設(shè)置微服務(wù) | 接口開(kāi)發(fā)
通用模塊 | 統(tǒng)一返回結(jié)果、統(tǒng)一異常處理、統(tǒng)一日志處理
項(xiàng)目已開(kāi)源至 https://github.com/Guoqianliang/yygh_parent
一、項(xiàng)目模塊劃分圖
本系列文章開(kāi)始介紹從0開(kāi)始搭建一個(gè)《基于分布式的醫(yī)療掛號(hào)系統(tǒng)》,下圖是初步模塊劃分圖,可根據(jù)此圖在IDEA中創(chuàng)建出項(xiàng)目初步結(jié)構(gòu)。其中父工程是一個(gè)Spring工程,父模塊是Maven工程,注意兩者都需要使用pom方式進(jìn)行打包。
二、開(kāi)發(fā)前的準(zhǔn)備工作
1.醫(yī)院設(shè)置數(shù)據(jù)庫(kù)表設(shè)計(jì)
在《基于分布式的醫(yī)療預(yù)約掛號(hào)系統(tǒng)》中,醫(yī)院設(shè)置表yygh_hosp主要是用來(lái)保存每個(gè)醫(yī)院的一些基本信息,每個(gè)醫(yī)院的信息就是一條記錄。這條記錄中保存了醫(yī)院編號(hào)、接口調(diào)用相關(guān)的簽名等等。
只有開(kāi)通了醫(yī)院設(shè)置,才可以進(jìn)行醫(yī)院記錄的上傳。所以,在醫(yī)院設(shè)置模塊部分,我們所開(kāi)發(fā)的功能就是基于單表的一個(gè)CRUD、發(fā)送簽名信息等基本功能。
# 創(chuàng)建數(shù)據(jù)庫(kù): yygh_hosp CREATE DATABASE IF NOT EXISTS `yygh_hosp` CHARACTER SET utf8mb4; USE `yygh_hosp`; # 創(chuàng)建表:hospital_set CREATE TABLE `hospital_set` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '編號(hào)', `hosname` VARCHAR(100) DEFAULT NULL COMMENT '醫(yī)院名稱', `hoscode` VARCHAR(30) DEFAULT NULL COMMENT '醫(yī)院編號(hào)', `api_url` VARCHAR(100) DEFAULT NULL COMMENT 'api基礎(chǔ)路徑', `sign_key` VARCHAR(50) DEFAULT NULL COMMENT '簽名秘鑰', `contacts_name` VARCHAR(20) DEFAULT NULL COMMENT '聯(lián)系人', `contacts_phone` VARCHAR(11) DEFAULT NULL COMMENT '聯(lián)系人手機(jī)', `status` TINYINT(3) NOT NULL DEFAULT '0' COMMENT '狀態(tài)', `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間', `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間', `is_deleted` TINYINT(3) NOT NULL DEFAULT '0' COMMENT '邏輯刪除(1:已刪除,0:未刪除)', PRIMARY KEY (`id`), UNIQUE KEY `uk_hoscode` (`hoscode`) COMMENT '唯一約束(醫(yī)院編號(hào)必須唯一)' ) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='醫(yī)院設(shè)置表';
創(chuàng)建好后的數(shù)據(jù)庫(kù)表如下:
2.搭建醫(yī)院設(shè)置微服務(wù)模塊
在servie父模塊中創(chuàng)建service_hosp模塊,為service_hosp模塊添加如下配置信息:
# 服務(wù)端口 server.port=8201 # 服務(wù)名 spring.application.name=service-hosp # 環(huán)境設(shè)置:dev、test、prod spring.profiles.active=dev # mysql數(shù)據(jù)庫(kù)連接 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://[ip地址]:3306/yygh_hosp?characterEncoding=utf-8&useSSL=false spring.datasource.username=[數(shù)據(jù)庫(kù)名稱] spring.datasource.password=[數(shù)據(jù)庫(kù)密碼] #返回json的全局時(shí)間格式 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8
并為此微服務(wù)模塊創(chuàng)建啟動(dòng)類:
package com.gql.yygh.hosp; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @Description: 啟動(dòng)類 * @author Guoqianliang * @date 20:17 - 2021/4/3 */ @SpringBootApplication public class ServiceHospApplication { public static void main(String[] args) { SpringApplication.run(ServiceHospApplication.class, args); } }
在測(cè)試前,將service模塊中下圖所示的三個(gè)依賴注釋掉,這些現(xiàn)在還用不到。若不注釋,啟動(dòng)時(shí)項(xiàng)目會(huì)報(bào)錯(cuò)。
運(yùn)行此微服務(wù),發(fā)現(xiàn)項(xiàng)目成功啟動(dòng):
至此,醫(yī)院設(shè)置數(shù)據(jù)庫(kù)表,以及醫(yī)院微服務(wù)模塊搭建成功,后續(xù)就可以在此基礎(chǔ)上進(jìn)行接口的編寫了。
三、醫(yī)院設(shè)置微服務(wù)模塊開(kāi)發(fā)
步驟1:生成表對(duì)應(yīng)的實(shí)體類
此處在編寫實(shí)體類時(shí)使用了一個(gè)父子類來(lái)做映射,這樣做是為了將公用的字段給抽取出來(lái)。
在繼承中,子類繼承父類就擁有了父類的全部非私有屬性。
步驟2:創(chuàng)建Mapper
MyBatis-Plus在Mapper層為我們提供了一個(gè)BaseMapper<T>接口,繼承這個(gè)接口,即可獲得CRUD功能。
mapper一般對(duì)應(yīng)一個(gè)xml配置文件,下面對(duì)xml的開(kāi)發(fā)規(guī)范進(jìn)行補(bǔ)充:
mapper接口的地址通過(guò).xml中的namespace
屬性引入。mapper接口中方法名和.xml中id
一致。mapper接口中方法輸入?yún)?shù)類型和.xml中statement的parameterType指定的類型一致。mapper接口中方法返回值類型和.xml中statement的resultType指定的類型一致。
由于Mapperapper是一個(gè)接口,接口動(dòng)態(tài)生成實(shí)現(xiàn)類的對(duì)象默認(rèn)是找不到的,需要添加MapperScan才能找到動(dòng)態(tài)生成的對(duì)象??梢詫apperScan寫在啟動(dòng)類上,也可以如下所示編寫一個(gè)配置類進(jìn)行統(tǒng)一管理。
package com.gql.yygh.hosp.config; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Configuration; /** * @Description: 醫(yī)院配置 * @author Guoqianliang * @date 9:42 - 2021/4/4 */ @Configuration @MapperScan("com.gql.yygh.hosp.mapper") public class HospConfig { }
步驟3:創(chuàng)建Service
MyBatis-Plus在Service層為我們提供了一個(gè)IService接口和一個(gè)ServiceImpl
實(shí)現(xiàn)類,我們的Service接口繼承IService接口、我們的實(shí)現(xiàn)類繼承ServiceImpl實(shí)現(xiàn)類。就可以讓MyBatis-Plus在Service層幫我們?nèi)フ{(diào)用Mapper,直接使用封裝號(hào)的baseMapper
就能完成調(diào)用。
步驟4:創(chuàng)建Controller
創(chuàng)建Controller,在其中裝配Service即可,后續(xù)在Controller中調(diào)用Service層的方法,進(jìn)而調(diào)用數(shù)據(jù)庫(kù)即可實(shí)現(xiàn)功能。
/** * @Description: Controller * @author Guoqianliang * @date 0:16 - 2021/4/4 */ @RestController @RequestMapping("/admin/hosp/hospitalSet") public class HospitalSetController { /** * 注入Service */ @Autowired private HospitalSetService hospitalSetService; }
四、測(cè)試開(kāi)發(fā)環(huán)境
為了驗(yàn)證環(huán)境的正確性,下面對(duì)微服務(wù)整體進(jìn)行測(cè)試,我們?cè)贑ontroller中編寫一個(gè)查詢數(shù)據(jù)庫(kù)所有信息的方法。
/** * @Description: Controller * @author Guoqianliang * @date 0:16 - 2021/4/4 */ @RestController @RequestMapping("/admin/hosp/hospitalSet") public class HospitalSetController { /** * 注入Service */ @Autowired private HospitalSetService hospitalSetService; }
手動(dòng)在yygh_hosp數(shù)據(jù)庫(kù)hospital_set表中添加一條記錄:
將微服務(wù)跑起來(lái),在瀏覽器訪問(wèn)url:http://localhost:8201/admin/hosp/hospitalSet/findAll,
成功獲取到j(luò)son格式的信息:
至此,醫(yī)院設(shè)置微服務(wù)模塊就搭建成功了,接下來(lái)就可以在此環(huán)境上進(jìn)行接口的開(kāi)發(fā),更多關(guān)于分布式醫(yī)療掛號(hào)系統(tǒng)搭建資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 實(shí)戰(zhàn)分布式醫(yī)療掛號(hào)系統(tǒng)開(kāi)發(fā)醫(yī)院科室及排班的接口
- 開(kāi)發(fā)分布式醫(yī)療掛號(hào)系統(tǒng)MongoDB集成實(shí)現(xiàn)上傳醫(yī)院接口
- 分布式醫(yī)療掛號(hào)系統(tǒng)SpringCache與Redis為數(shù)據(jù)字典添加緩存
- 分布式醫(yī)療掛號(hào)系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用
- 分布式開(kāi)發(fā)醫(yī)療掛號(hào)系統(tǒng)數(shù)據(jù)字典模塊前后端實(shí)現(xiàn)
- 實(shí)戰(zhàn)分布式醫(yī)療掛號(hào)系統(tǒng)之設(shè)置微服務(wù)接口開(kāi)發(fā)模塊
- 分布式醫(yī)療掛號(hào)系統(tǒng)Nacos微服務(wù)Feign遠(yuǎn)程調(diào)用數(shù)據(jù)字典
相關(guān)文章
Spring activiti如何實(shí)現(xiàn)指定任務(wù)處理者
這篇文章主要介紹了Spring activiti如何實(shí)現(xiàn)指定任務(wù)處理者,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Java Spring JdbcTemplate基本使用詳解
JDBC已經(jīng)能夠滿足大部分用戶最基本的需求,但是在使用JDBC時(shí),必須自己來(lái)管理數(shù)據(jù)庫(kù)資源如:獲取PreparedStatement,設(shè)置SQL語(yǔ)句參數(shù),關(guān)閉連接等步驟2021-10-10在Eclipse安裝Spring boot插件的步驟(圖文)
這篇文章主要介紹了在Eclipse安裝Spring boot插件的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08詳解spring boot容器加載完后執(zhí)行特定操作
這篇文章主要介紹了詳解spring boot容器加載完后執(zhí)行特定操作,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01Java實(shí)現(xiàn)平鋪列表(List)互轉(zhuǎn)樹(shù)形(Tree)結(jié)構(gòu)
本文主要介紹了Java實(shí)現(xiàn)平鋪列表(List)互轉(zhuǎn)樹(shù)形(Tree)結(jié)構(gòu),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08SpringBoot多環(huán)境開(kāi)發(fā)與日志小結(jié)
這篇文章主要介紹了SpringBoot多環(huán)境開(kāi)發(fā)與日志,下面給大家說(shuō)一下如何基于多環(huán)境開(kāi)發(fā)做配置獨(dú)立管理,務(wù)必掌握,需要的朋友可以參考下2022-08-08java中Date和Timestamp類型的相互轉(zhuǎn)換方式
這篇文章主要介紹了java中Date和Timestamp類型的相互轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Spring如何利用@Value注解讀取yml中的map配置
這篇文章主要介紹了Spring如何利用@Value注解讀取yml中的map配置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02詳解IDEA啟動(dòng)多個(gè)微服務(wù)的配置方法
這篇文章主要介紹了詳解IDEA啟動(dòng)多個(gè)微服務(wù)的配置方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01