gpt4 book ai didi

SpringCloud入门实验环境搭建

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章SpringCloud入门实验环境搭建由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

微服务

个人理解

所谓微服务是指每个模块都可以独立完成自己的核心业务,某一个模块的崩溃不影响其他模块的运行, 每个微服务有自己单独的一个数据库 每一个微小的服务组成了一个复杂的软件系统 。

微服务架构

微服务指的是服务的大小,关注的是完成一个具体的服务(医院的科室) 。

微服务架构是一种架构模式 ,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相 配合,为用户提供最终价值。一种将一个单一应用程序开发为一组小型服务的方法,每个服务都在其运行 的进程中。(整个医院) 。

优点

  • 针对特定服务发布,影响小,风险小,成本低
  • 频繁发布版本,快速交付需求
  • 低成本扩容,弹性伸缩,适应云环境

SpringCould简介

Springboot关注于更快的开发单体的微服务,而SpringCloud关注于全局服务的治理 。

Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署.

Spring 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装、屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包.

环境搭建

在idea中新建一个maven父工程在其pom配置对应依赖,以管理子类依赖的版本 。

 <properties>        <lombock.version>1.18.18</lombock.version>        <log4j.version>1.2.17</log4j.version>    </properties>    <dependencyManagement>        <dependencies>            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->            <dependency>                <groupId>org.springframework.cloud</groupId>                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>                <version>3.0.2</version>            </dependency>            <!--spring cloud 依赖包-->            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->            <dependency>                <groupId>org.springframework.cloud</groupId>                <artifactId>spring-cloud-dependencies</artifactId>                <version>Hoxton.SR9</version>                <type>pom</type>                <scope>import</scope>            </dependency>            <!--spring boot 依赖包-->            <dependency>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-dependencies</artifactId>                <version>2.3.5.RELEASE</version>                <type>pom</type>                <scope>import</scope>            </dependency>            <!--数据库驱动-->            <dependency>                <groupId>mysql</groupId>                <artifactId>mysql-connector-java</artifactId>                <version>8.0.22</version>            </dependency>            <dependency>                <groupId>com.alibaba</groupId>                <artifactId>druid</artifactId>                <version>1.1.21</version>            </dependency>            <!--springboot 启动器--><!--            <dependency>--><!--                <groupId>org.springframework.boot</groupId>--><!--                <artifactId>spring-boot-starter</artifactId>--><!--                <version>2.4.4</version>--><!--            </dependency>-->            <!--JUnit-->            <dependency>                <groupId>junit</groupId>                <artifactId>junit</artifactId>                <version>4.13</version>                <scope>test</scope>            </dependency>            <!--lombock-->            <dependency>                <groupId>org.projectlombok</groupId>                <artifactId>lombok</artifactId>                <version>${lombock.version}</version>                <scope>import</scope>            </dependency>            <!--log4j-->            <dependency>                <groupId>log4j</groupId>                <artifactId>log4j</artifactId>                <version>${log4j.version}</version>            </dependency>        </dependencies>    </dependencyManagement>

1. 创建数据库

创建名为db01的数据库,有一张表dept 。

SpringCloud入门实验环境搭建

2. 新建一个子模块api

其中只有一个实体类dept对应我们数据库中的表 。

SpringCloud入门实验环境搭建

public class Dept {    private int deptnumber;    private String dname;    private String d_source;   //对应属性的get和set方法}

3. 新建一个子模块provider作为服务的提供者

导入依赖 。

  <dependencies>  <!--将api模块导入由此可使用Dept实体类-->        <dependency>            <groupId>org.example</groupId>            <artifactId>springcloud-api</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>        </dependency>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <scope>test</scope>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>2.1.1</version>        </dependency>    </dependencies>

配置配置文件和对应的操作类和接口 。

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 。

<?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>    <settings>        <setting name="cacheEnabled" value="true"/>    </settings></configuration>
<?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="com.Dao.DeptDao">    <insert id="add" parameterType="Dept">        insert into dept(dname, d_source) values (#{dname},DATABASE());    </insert>    <select id="queryByID" resultType="Dept" parameterType="Long">        select * from dept where deptnumber = #{id};    </select>    <select id="queryAll" resultType="Dept">        select * from dept;    </select></mapper>

对应的Dao,Controller,Service 。

@Mapperpublic interface DeptDao {    boolean add(Dept dept);    Dept queryByID(long id);    List<Dept> 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<Dept> 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<Dept> DeptqueryAll() {        return deptimpl.queryAll();    }

启动类 。

@SpringBootApplicationpublic class SApplication {    public static void main(String[] args) {        SpringApplication.run(SApplication.class,args);    }}

新建子模块consumer作为消费者

导入依赖 。

<dependencies>    <dependency>        <groupId>org.example</groupId>        <artifactId>springcloud-api</artifactId>        <version>1.0-SNAPSHOT</version>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency>    </dependencies>

配置文件 。

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 List<Dept> list(){        //请求的路径,返回的对象        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);    }}

SpringCloud入门实验环境搭建

debug

子项目无法使用父项目的依赖包

1 如果父项目pom使用 。

<dependencyManagement><dependencies>          ....</dependencies></dependencyManagement>

方式,则子项目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 环境搭建的资料请关注我其它相关文章! 。

原文链接:https://juejin.cn/post/6949533826339700767#heading-2 。

最后此篇关于SpringCloud入门实验环境搭建的文章就讲到这里了,如果你想了解更多关于SpringCloud入门实验环境搭建的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com