SpringCloud环境的初步搭建方法
这篇文章主要介绍了SpringCloud环境的初步搭建方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringCloud环境的初步搭建方法文章都会有所收获,下面我们一起来看看吧。
微服务
个人理解:
所谓微服务是指每个模块都可以独立完成自己的核心业务,某一个模块的崩溃不影响其他模块的运行,
每个微服务有自己单独的一个数据库
每一个微小的服务组成了一个复杂的软件系统
微服务架构
微服务指的是服务的大小,关注的是完成一个具体的服务(医院的科室)
微服务架构是一种架构模式 ,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相
配合,为用户提供最终价值。一种将一个单一应用程序开发为一组小型服务的方法,每个服务都在其运行
的进程中。(整个医院)
优点:
针对特定服务发布,影响小,风险小,成本低
频繁发布版本,快速交付需求
低成本扩容,弹性伸缩,适应云环境
SpringCould简介
Springboot关注于更快的开发单体的微服务,而SpringCloud关注于全局服务的治理
Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。
Spring 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装、屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
环境搭建
在idea中新建一个maven父工程在其pom配置对应依赖,以管理子类依赖的版本
1.18.18 1.2.17 org.springframework.cloud spring-cloud-starter-netflix-eureka-client 3.0.2 org.springframework.cloud spring-cloud-dependencies Hoxton.SR9 pom import org.springframework.boot spring-boot-dependencies 2.3.5.RELEASE pom import mysql mysql-connector-java 8.0.22 com.alibaba druid 1.1.21 junit junit 4.13 test org.projectlombok lombok ${lombock.version} import log4j log4j ${log4j.version}
1. 创建数据库
创建名为db01的数据库,有一张表dept
2. 新建一个子模块api
其中只有一个实体类dept对应我们数据库中的表
public class Dept { private int deptnumber; private String dname; private String d_source; //对应属性的get和set方法}
3. 新建一个子模块provider作为服务的提供者
导入依赖
org.example springcloud-api 1.0-SNAPSHOT mysql mysql-connector-java com.alibaba druid junit junit test org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.1
配置配置文件和对应的操作类和接口
application.xml
server: port: 8081mybatis: type-aliases-package: pojo mapper-locations: classpath:Mybatis/mapper/*.xml config-location: classpath:Mybatis/mybatis-config.xmlspring: application: name: provider-name datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver username: root password: 123456 url: jdbc:mysql://localhost:3306/db01?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
mapper-config.xml和Deptmapper.xml
insert into dept(dname, d_source) values (#{dname},DATABASE());
对应的Dao,Controller,Service
@Mapperpublic interface DeptDao { boolean add(Dept dept); Dept queryByID(long id); List queryAll();}
@Servicepublic class DeptImpl implements DeptService{ @Resource private DeptDao deptDao; public boolean add(Dept dept) { return deptDao.add(dept) ; } public Dept queryByID(long id) { System.out.println("deptimpl"+id); return deptDao.queryByID(id); } public List queryAll() { return deptDao.queryAll(); }}
@RestControllerpublic class DeptController { @Autowired private DeptImpl deptimpl; @PostMapping("/dev/add") public boolean addDept(@RequestBody Dept dept){ System.out.println(dept); return deptimpl.add(dept); } @GetMapping("/dev/{id}") public Dept DeptqueryByID(@PathVariable("id") long id) { System.out.println("deptcontroller"+id); return deptimpl.queryByID(id); } @PostMapping("/dev/list") public List DeptqueryAll() { return deptimpl.queryAll(); }
启动类
@SpringBootApplicationpublic class SApplication { public static void main(String[] args) { SpringApplication.run(SApplication.class,args); }}
新建子模块consumer作为消费者
导入依赖
org.example springcloud-api 1.0-SNAPSHOT org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web
配置文件
server: port: 80
config类和controller
/*RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。*/@Configurationpublic class ConfigBean { @Bean public RestTemplate getRestTemplate() { return new RestTemplate(); }}
@RestControllerpublic class ConsumerController { @Autowired private RestTemplate template; private static final String url="http://localhost:8001"; @RequestMapping("/consumer/get/{id}") public Dept getByID(@PathVariable long id){ //请求的路径,请求返回的对象 Dept getEntity = template.getForObject(url + "/dev/" + id, Dept.class); return getEntity; } @RequestMapping("/consumer/add") public boolean add(String dname){ Dept dept = new Dept(); dept.setDname(dname); System.out.println(dept); //请求的路径,传递的参数,返回的对象 return template.postForObject(url+ "/dev/add",dept,Boolean.class); } @RequestMapping("/consumer/list") public Listlist(){ //请求的路径,返回的对象 return template.postForObject(url+"/dev/list",void.class,List.class); }}
启动类及运行结果
debug-connect refuserd---debug-传参为null
@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class,args); }}
debug
子项目无法使用父项目的依赖包
1 如果父项目pom使用
....
方式,则子项目pom不会自动使用父pom中的jar包, 如果需要使用,就要给出groupId和artifactId,无需给出version
使用是为了统一管理版本信息
在子工程中使用时,还是需要引入坐标的,但是不需要给出version
在我们项目顶层的POM文件中,元素。
通过它元素来管理jar包的版本,
让子项目中引用一个依赖而不用显示的列出版本号。
Maven会沿着父子层次向上找,
直到找到一个拥有dependencyManagement元素的项目,
然后它就会使用在这个dependencyManagement元素中指定的版本号。
required a bean of type 'DeptDao' that could not be found.
使用@Mapper而不是@Repository
1、使用@mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入到ServiceImpl中。
2、@repository则需要在Spring中配置扫描包地址,然后生成dao层的bean,之后被注入到ServiceImpl中
Connection refused connect
检查url端口号,是否写对,是否占用
RestTemplate传递对象无法接收(null)
在服务器端对应的参数上添加@RequestBody
@PostMapping("/dev/add") public boolean addDept(@RequestBody Dept dept){ System.out.println(dept); return deptimpl.add(dept); }
关于"SpringCloud环境的初步搭建方法"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"SpringCloud环境的初步搭建方法"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。