目录:
(1)后台系统-医院管理-需求和Nacos启动
(2)医院列表-Nacos注册服务
(3)医院列表接口-初步实现
.(1)后台系统-医院管理-需求和Nacos启动
之前我们完成了数据相关的接口,包括医院,科室,排班目前呢这些数据都已经上传到平台中,那我们现在呢可以用管理平台把这些数据管理起来,在下面可以建立一个新的模块 ,医院管理,里面可以看到医院信息,科室信息,排班信息
医院的显示 等级的显示,需要添加接口进行查询:
下面写医院的相关管理写到service_hosp这个模块中,查询数据字典表,相关接口写在service_cmn模块中,要得到数据字典数据需要写service_hosp模块调用service_cmm模块中的方法。要实现不同模块之间的调用,用专业数据叫做远程调用
- 注册中心与服务调用
目前在医院列表中需要医院的信息和等级信息,而两段信息属于不同的的模块,service-hosp和service-cmn,所以我们需要使用到远程调用。
1、Nacos概述
1.1 什么是Nacos
Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施
1.2 常见的注册中心
1. Eureka(原生,2.0遇到瓶颈,停止维护)
2. Zookeeper(支持,专业的独立产品。例如:dubbo)
3. Consul(原生,GO语言开发)
4. Nacos
相对于 Spring Cloud Eureka 来说,Nacos 更强大。
Nacos = Spring Cloud Eureka + Spring Cloud Config
Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config。
- 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
- 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。
1.3 Nacos结构图
1.4 Nacos下载和安装
下载地址:https://github.com/alibaba/nacos/releases
下载版本:nacos-server-1.1.4.tar.gz或nacos-server-1.1.4.zip,解压任意目录即可
下载之后:
解压
startup.sh是Linux系统的启动
startup.cmd:这个是Windows系统的启动
Nacos占用的端口号是8848
Windows
启动命令:cmd startup.cmd 或者双击startup.cmd运行文件。
访问:http://localhost:8848/nacos
用户名密码:nacos/nacos
输入地址访问:
输入用户名密码都是nacos:
就进入到nacos的管理界面:
往里面注册服务可以通过服务列表看到:
我们在service_hosp中创建接口,和在service_cmn中创建接口,然后再注册中心进行注册,然后通过远程调用得到医院等级数据最终显示
(2)医院列表-Nacos注册服务
实现服务的远程调用,首先需要把服务现在Nacos注册中心进行注册:
在service模块的pom文件中引入Nacos的依赖:
在打开service_hosp模块的application.properties配置文件:
在service-hosp的配置文件添加nacos服务地址
# nacos服务地址 |
在service-hosp的启动类添加注解 @EnableDiscoveryClient
package com.atguigu.yygh.hosp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages = "com.atguigu")
@EnableDiscoveryClient //服务在Nacos中注册
public class ServiceHospApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceHospApplication.class, args);
}
}
重新启动项目
在Nacos就出现了这个服务
service-cmn注册过程和service-hosp相同
然后再service_hosp中创建一个医院列表接口这个接口肯定是条件查询带分页
在service_cmn模块中创建接口根据编号或者值得到数据字典名称具体说是医院名称
(3)医院列表接口-初步实现
创建HospitalController:
package com.atguigu.yygh.hosp.controller;
import com.atguigu.yygh.hosp.service.HospitalService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/admin/hosp/hospital")
@CrossOrigin //跨域访问注解
public class HospitalController {
@Autowired
private HospitalService hospitalService;
}
创建service:前面已经创建过了HospitalService接口
创建HospitalService的实现类HospitalServiceImpl,也创建过了
HospitalController:编写医院列表方法:
package com.atguigu.yygh.hosp.controller;
import com.atguigu.yygh.common.result.Result;
import com.atguigu.yygh.hosp.service.HospitalService;
import com.atguigu.yygh.model.hosp.Hospital;
import com.atguigu.yygh.vo.hosp.HospitalQueryVo;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/admin/hosp/hospital")
@CrossOrigin //跨域访问注解
public class HospitalController {
@Autowired
private HospitalService hospitalService;
//医院列表(条件查询分页) 条件使用HospitalQueryVo类进行封装
@ApiOperation(value = "获取分页列表")
@GetMapping("list/{page}/{limit}")
public Result index(
@ApiParam(name = "page", value = "当前页码", required = true)
@PathVariable Integer page,
@ApiParam(name = "limit", value = "每页记录数", required = true)
@PathVariable Integer limit,
@ApiParam(name = "hospitalQueryVo", value = "查询对象", required = false)
HospitalQueryVo hospitalQueryVo) {
Page<Hospital> pageModel=hospitalService.selectHospPage(page, limit, hospitalQueryVo);
return Result.ok(pageModel);
}
}
HospitalService 接口:
package com.atguigu.yygh.hosp.service;
import com.atguigu.yygh.model.hosp.Hospital;
import com.atguigu.yygh.vo.hosp.HospitalQueryVo;
import org.springframework.data.domain.Page;
import java.util.Map;
public interface HospitalService {
//上传医院接口的方法
void save(Map<String, Object> paramMap);
//根据医院编号进行查询
Hospital getByHoscode(String hoscode);
//医院列表(条件查询分页)
Page<Hospital> selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo);
}
实现类:HospitalServiceImpl添加方法:
//医院列表(条件查询分页)
@Override
public Page<Hospital> selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo) {
//创建Pageable的对象
Pageable pageable= PageRequest.of(page-1,limit);
//创建条件匹配器
ExampleMatcher matcher=ExampleMatcher.matching()
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
.withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
//将hospitalQueryVo对象转换为Hospital对象
Hospital hospital =new Hospital();
BeanUtils.copyProperties(hospitalQueryVo, hospital);//使用工具类把HospitalQueryVo转换成department
//创建Example对象
Example<Hospital> example=Example.of(hospital,matcher);
//调用方法进行实现
Page<Hospital> all = hospitalRepository.findAll(example, pageable);
return all;
}