SpringCloud入门实验环境搭建

网友投稿 205 2022-10-28


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

http://

org.springframework.cloud

spring-cloud-dependencies

Hoxton.SR9

pom

import

org.springframework.boot

spring-boot-dependencies

2.3.5.RELEASE

pom

import</scope>

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: 8081

mybatis:

type-aliases-package: pojo

mapper-locations: classpath:Mybatis/mapper/*.xml

config-location: classpath:Mybatis/mybatis-config.xml

spring:

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

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

insert into dept(dname, d_source) values (#{dname},DATABASE());

select * from dept where deptnumber = #{id};

select * from dept;

对应的Dao,Controller,Service

@Mapper

public interface DeptDao {

boolean add(Dept dept);

Dept queryByID(long id);

List queryAll();

}

@Service

public 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();

}

}

@RestController

public 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();

}

启动类

@SpringBootApplication

public 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。

*/

@Configuration

public class ConfigBean {

@Bean

public RestTemplate getRestTemplate() {

return new RestTemplate();

}

}

@RestController

public 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 List list(){

//请求的路径,返回的对象

return template.postForObject(url+"/dev/list",void.class,List.class);

}

}

启动类及运行结果

debug-connect refuserd---debug-传参为null

@SpringBootApplication

public 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 环境搭建的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:1116
下一篇:首部校验和
相关文章

 发表评论

暂时没有评论,来抢沙发吧~