课程2-1-springcloud项目搭建

springcloud项目搭建

引入依赖

  1. 引入springcloud的版本管理
    在这里插入图片描述

    <!--springcloud的版本控制,不会依赖进来-->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>2.2.3.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
  2. 配置中心nacos的依赖引进
    在这里插入图片描述

    <!--配置中心nacos的依赖引进-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
    
  3. 安装nacos
    自行安装,如果不会可以参考博主准备的相关安装教程:nacos安装教程

    操作步骤一:新增命名空间
    在这里插入图片描述
    操作步骤二:新增配置文件
    在这里插入图片描述

  4. 新增配置文件bootstrap.properties

     注:该文件会在所有配置文件加载之前加载,加载优先级高
    

    在这里插入图片描述

    spring.application.name=study
    spring.cloud.nacos.config.server-addr=120.92.151.118:8848
    spring.cloud.nacos.config.namespace=fbbf640d-3387-438e-a5d9-7d39668dade5
    spring.cloud.nacos.discovery.server-addr=120.92.151.118:8848
    spring.cloud.nacos.discovery.namespace=fbbf640d-3387-438e-a5d9-7d39668dade5
    
    

    spring.application.name就是nacos中的Data Id的有效值;
    spring.cloud.nacos.config.server-addr为nacos的连接地址;
    spring.cloud.nacos.config.namespace为命名空间ID;

  5. 新增初始化代码,获取nacos数据测试
    在这里插入图片描述

    @Value("${spring.datasource.url}")
        private String jdbc;
    
    
        @PostConstruct
        public void init() {
            log.info("jdbc="+jdbc);
        }
    
  6. 启动项目,查看情况;
    在这里插入图片描述
    获取成功;

  7. 引入注册中心依赖
    在这里插入图片描述

    <!--注册中心nacos的依赖引进-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
    
  8. 新增bootstrap文件配置项,前面实际上我们已经加过了,所以完成第六步的依赖引入即可;
    在这里插入图片描述

  9. 重新启动项目,查看服务是否注册到服务注册中心;
    在这里插入图片描述
    注册成功;

服务间调用

  1. copy项目
    操作一:更换包名
    在这里插入图片描述
    操作二:更换mapper文件扫描位置
    在这里插入图片描述

    操作三:更改pom文件里的名称
    在这里插入图片描述
    操作四:更改项目端口号为1002;
    操作五:nacos新增study-provider的配置;
    在这里插入图片描述

  2. 启动项目,查看运行状况;
    在这里插入图片描述

微服务调用

  1. 新增ApiController
    List item

    package com.xcc.studyprovider.controller;
    
    
    import com.xcc.studyprovider.model.User;
    import com.xcc.studyprovider.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/api")
    public class ApiController {
        @Autowired
        private UserService userService;
    
        @PostMapping("/getUserData")
        public User getUserData(Integer id) {
            User userById = userService.getUserById(id);
            return userById;
        }
    
    }
    
    
  2. 重启项目,检测接口是否有效,检测时将接口请求方式改为get;
    在这里插入图片描述

  3. 定义一个http请求的一个bean
    在这里插入图片描述

    @Bean // 注册成http请求的一个bean
    @LoadBalanced // 在多条机器上启动了服务后,可以任意选一个进行请求
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
    
  4. 远程请求study-provider项目api
    在这里插入图片描述

    @Autowired
        private RestTemplate restTemplate;
    
        @Override
        public User getUserById(Integer id) {
            return restTemplate.postForEntity("http://study-provider/api/getUserData?id={1}", null, User.class, id).getBody();
        }
    

在这里插入图片描述

引入api调用封装包

  1. 引入依赖在这里插入图片描述

    <!--远程调用api封装依赖-->
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-openfeign</artifactId>
           <version>2.2.5.RELEASE</version>
       </dependency>
    
  2. 新增文件userApi在这里插入图片描述

    package com.xcc.study.api;
    
    import org.springframework.cloud.openfeign.FeignClient;
    
    @FeignClient("study-provider") // 设置去远程应用调取接口
    public class UserApi {
    
    }
    

> @FeignClient(“study-provider”) // 设置去远程应用调取接口 ------很重要

  1. 新增调用方法 ,此处调用study-provider项目的方法
    在这里插入图片描述

  2. 扫面api的文件,注册成bean;在这里插入图片描述

  3. api注入到service并调用api内的接口;在这里插入图片描述

    注:即使使用注解的方法,一下的代码块依然不能少,因为注解的本质还是使用这个bean的方法;

        @LoadBalanced // 在多条机器上启动了服务后,可以任意选一个进行请求
        public RestTemplate restTemplate() {
            return new RestTemplate();
        } 
    
  4. 重启项目测试在这里插入图片描述

更改api提供者的项目结构

1.更改其项目结构,新建两个文件夹,如下;在这里插入图片描述
接下来把原先的src文件放到study-provider-web层下,再分别为study-provider-web和study-provider-api层都拷贝原先的pom.xml文件即可,后面我们在这个基础上修改就可以了,则结构如下图所示;
在这里插入图片描述

  1. 修改最外层pom.xml文件;
    操作一:删除build标签依赖,build下web层下进行即可;
    操作二:去掉所有依赖;
    操作三:新增子模块,代码如下

    <modules>
            <module>study-provider-api</module>
            <module>study-provider-web</module>
        </modules>
    

    修改完成后,最外层pom.xml文件内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.3.4.RELEASE</version>
        </parent>
        <groupId>com.xcc</groupId>
        <artifactId>study-provider</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <name>study-provider</name>
        <description>Demo project for Spring Boot</description>
    
        <packaging>pom</packaging>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
    
        </dependencies>
    
        <!--springcloud的版本控制,不会依赖进来-->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>2.2.3.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <modules>
            <module>study-provider-api</module>
            <module>study-provider-web</module>
        </modules>
    
    </project>
    
    
  2. 修改web层pom.xml文件;
    修改父文件和该文件名,在这里插入图片描述

    修改完后的pom.xml文件内容如下;

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>com.xcc</groupId>
            <artifactId>study-provider</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <artifactId>study-provider-web</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <name>study-provider-web</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <!--spring-boot依赖-->
            <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>
    
            <!--mysql依赖-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.21</version>
            </dependency>
    
            <!--mybatis依赖-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.3.0</version>
            </dependency>
    
            <!--lombok依赖-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
    
            <!--配置中心nacos的依赖引进-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>
    
            <!--注册中心nacos的依赖引进-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
                <version>2.2.5.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>com.xcc</groupId>
                <artifactId>study-provider-api</artifactId>
                <version>1.0.0-SNAPSHOT</version>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    
  3. 修改api层pom.xml文件,修改过程基本相似;
    操作一:不需要build;
    操作二:不需要数据库依赖和nacos依赖、mybatis依赖等;
    操作三:修改父文件名称和该文件名称;
    修改完之后内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>com.xcc</groupId>
            <artifactId>study-provider</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <artifactId>study-provider-api</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <name>study-provider-api</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
                <version>2.2.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
    
            <!--远程调用api封装依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
                <version>2.2.5.RELEASE</version>
            </dependency>
        </dependencies>
    
        <!--springcloud的版本控制,不会依赖进来-->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>2.2.3.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
    </project>
    
    

    以上操作完成后,关闭idea,重新打开该项目并刷新maven,重启项目;

  4. provider新建api文件,加入model文件和api文件,定义提供的pai接口给别人调用;在这里插入图片描述

    package com.xcc.studyprovider.api;
    
    import com.xcc.studyprovider.api.model.User;
    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    @FeignClient("study-provider") // 设置去远程应用调取接口
    public interface UserApi {
    
        @PostMapping("/api/getUserData")
        User getUser(@RequestParam("id") Integer id);
    
    }
    

    在api层的pom.xml文件中引入依赖;

    <!--远程调用api封装依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
    
  5. 重启项目,重启成功后,把项目打包到本地仓库;
    在这里插入图片描述
    如果执行该步骤错误,修正pom.xml文件内容如下;

     <!--springcloud的版本控制,不会依赖进来-->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>2.2.3.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
  6. 操作一:study项目引入api依赖在这里插入图片描述
    操作二:api注册成bean;
    在这里插入图片描述
    操作三:service层注入并调用api,由于返回的数据类型是study-provider项目的类型,所以需要转换成本项目的model类型才能返回;在这里插入图片描述

    package com.xcc.study.service;
    
    import com.xcc.study.mapper.UserMapper;
    import com.xcc.study.model.User;
    import com.xcc.studyprovider.api.UserApi;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    import org.springframework.web.client.RestTemplate;
    
    @Component
    public class UserServiceImpl implements UserService{
        @Autowired
        private UserMapper userMapper;
        @Autowired
        private RestTemplate restTemplate;
        @Autowired
        private UserApi userApi;
    
        @Override
        public User getUserById(Integer id) {
            // return userMapper.getUserById(id);
            // return restTemplate.postForEntity("http://study-provider/api/getUserData?id={1}", null, User.class, id).getBody();
            com.xcc.studyprovider.api.model.User user = userApi.getUser(id);
            User user1 = new User();
            user1.setAge(user.getAge());
            user1.setName(user.getName());
            return user1;
        }
    
    }
    
    

8.重启项目并检测
在这里插入图片描述
访问成功;

注:项目已上传;
链接:https://pan.baidu.com/s/1NaxN3mpxoOMGI5fxM3ev6w
提取码:fd8y
复制这段内容后打开百度网盘手机App,操作更方便哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值