• springcloud环境搭建


    今天来到SpringCloud的学习,我们从spring boot微服务阶段,学习到了用springboot去创建很多的微服务,但是这么多微服务我们如果去管理,以及相互之间的联系呢?

    而到了我们学习springcloud阶段,其实相对而言是变简单的,不需要写很多代码以及什么操作,主要就是接收思想,了解其中的机制,而springCloud项目基于springboot项目,只需要几行简单的配置即可开始使用;

    那来到了我们最熟悉的官网:Spring | Home

    进入spring cloud的学习,可以去读读这里的话,我读懂了,不告诉你

    从springcloud的学习,我们可以看这张图,我们学习这里面几个部分

    Rest环境搭建

    环境说明:jdk1.8,idea2019,maven3.6.X,springcloud最新版2021.0.3,mybatis-plus

    我们首先搭建一个父工程项目,创建一个空的普通的maven项目,我们直接把src目录删除掉,pom文件写下面的使用父工程管理依赖,这里都是与文章日期最新依赖。

    <properties>    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>    <maven.compiler.source>1.8maven.compiler.source>    <maven.compiler.target>1.8maven.compiler.target>    <junit.version>4.12junit.version>    <log4j.version>1.2.17log4j.version>    <lombok.version>1.18.24lombok.version>    <springcloud-version>2021.0.3springcloud-version>properties><dependencyManagement>    <dependencies>        <dependency>                        <groupId>org.springframework.cloudgroupId>            <artifactId>spring-cloud-dependenciesartifactId>            <version>${springcloud-version}version>            <type>pomtype>            <scope>importscope>        dependency>                <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-dependenciesartifactId>            <version>2.7.0version>            <type>pomtype>            <scope>importscope>        dependency>                <dependency>            <groupId>mysqlgroupId>            <artifactId>mysql-connector-javaartifactId>            <version>8.0.28version>        dependency>                <dependency>            <groupId>com.alibabagroupId>            <artifactId>druidartifactId>            <version>1.2.11version>        dependency>        <dependency>            <groupId>com.baomidougroupId>            <artifactId>mybatis-plus-boot-starterartifactId>            <version>3.0.5version>        dependency>                <dependency>            <groupId>ch.qos.logbackgroupId>            <artifactId>logback-coreartifactId>            <version>1.2.3version>        dependency>        <dependency>            <groupId>junitgroupId>            <artifactId>junitartifactId>            <version>${junit.version}version>            <scope>testscope>        dependency>        <dependency>            <groupId>log4jgroupId>            <artifactId>log4jartifactId>            <version>${log4j.version}version>        dependency>        <dependency>            <groupId>org.projectlombokgroupId>            <artifactId>lombokartifactId>            <version>${lombok.version}version>        dependency>    dependencies>dependencyManagement><build>        <finalName>springcloudfinalName>    <resources>        <resource>            <directory>src/main/resourcesdirectory>            <filtering>truefiltering>        resource>    resources>    <plugins>        <plugin>            <groupId>org.apache.maven.pluginsgroupId>            <artifactId>maven-resources-pluginartifactId>            <configuration>                                <delimiters>                    <delimit>$delimit>                delimiters>            configuration>        plugin>    plugins>build>
    

    有了父工程项目,我们再准备一个数据库环境,写一个api类,这里我们新建一个简单的账户表,往里面插入几条简单的数据

    DROP TABLE IF EXISTS `account`;CREATE TABLE `account` (  `account_id` int(11) NOT NULL,  `account_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,  `account_pwd` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,  PRIMARY KEY (`account_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;-- ------------------------------ Records of account-- ----------------------------INSERT INTO `account` VALUES ('1', 'zhangsan', '333');INSERT INTO `account` VALUES ('2', 'lisi', '444');INSERT INTO `account` VALUES ('3', 'wangwu', '555');INSERT INTO `account` VALUES ('4', 'zhangliu', '666');INSERT INTO `account` VALUES ('5', 'qiqi', '777');INSERT INTO `account` VALUES ('6', 'baba', '888');
    

    新建一个maven普通项目起名叫springcloud-api,里面呢,放一个这样的实体类,与表的关系对应起来的一个简单对象,使用了lombok,这里大家可以自行去了解

    1、导入依赖

    <dependency>    <groupId>org.projectlombokgroupId>    <artifactId>lombokartifactId>dependency>
    

    我们可以看到这里如果正确会有一个小圆圈,如果你这里没有,那就要检查下父工程依赖了

    2、编写配置,这里没有什么配置,所以就是滤过

    3、编写对应代码

    provider-服务端提供者

    再新建一个maven普通项目模块,我们做服务的提供者

    1、导入依赖

    <dependencies>    <dependency>        <groupId>com.xuexigroupId>        <artifactId>springcloud-apiartifactId>        <version>1.0-SNAPSHOTversion>    dependency>    <dependency>        <groupId>mysqlgroupId>        <artifactId>mysql-connector-javaartifactId>    dependency>    <dependency>        <groupId>com.alibabagroupId>        <artifactId>druidartifactId>    dependency>    <dependency>        <groupId>ch.qos.logbackgroupId>        <artifactId>logback-coreartifactId>    dependency>    <dependency>        <groupId>com.baomidougroupId>        <artifactId>mybatis-plus-boot-starterartifactId>    dependency>    <dependency>        <groupId>org.springframework.bootgroupId>        <artifactId>spring-boot-testartifactId>    dependency>    <dependency>        <groupId>org.springframework.bootgroupId>        <artifactId>spring-boot-starter-webartifactId>    dependency>    <dependency>        <groupId>org.springframework.bootgroupId>        <artifactId>spring-boot-devtoolsartifactId>    dependency>dependencies>
    

    2、编写配置

    新建一个application.yml文件,内容如下:

    server:  port: 8001spring:  application:    name: springcloud-provider-account  datasource:    driverClassName: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://localhost:3306/lianxi?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8    username: root    password:     type: com.alibaba.druid.pool.DruidDataSource  #使用阿里的数据源# mybatis-plus配置日志mybatis-plus:  configuration:    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  type-aliases-package: com.xuexi.pojo  mapper-locations: classpath:mapper/*.xml  global-config:    db-config:      table-underline: true  #实体类驼峰转下划线,默认就是
    

    3、编写代码,服务提供者我们只需要编写dao层和service层,这里使用了mybaits-plus所以比较简单,直接给大家截图

    dao层

    service层

    这里我们可以编写一个controller进行下测试

    @RestControllerpublic class AccountController {    @Autowired    AccountService accountService;    @PostMapping("/account/add")    public boolean addAccount(Account account){        return accountService.save(account);    }    @GetMapping("/account/get/{id}")    public Account get(@PathVariable("id") long id){        return accountService.getById(id);    }    @GetMapping("/account/list")    public List getAll(){        return accountService.list(null);    }}
    

    测试成功

    consumer-消费者

    同样的我们再建一个普通的maven子工程项目,我们进行服务的消费

    1、导入依赖

    <dependencies>    <dependency>        <groupId>com.xuexigroupId>        <artifactId>springcloud-apiartifactId>        <version>1.0-SNAPSHOTversion>    dependency>    <dependency>        <groupId>org.springframework.bootgroupId>        <artifactId>spring-boot-starter-webartifactId>    dependency>    <dependency>        <groupId>org.springframework.bootgroupId>        <artifactId>spring-boot-devtoolsartifactId>    dependency>dependencies>
    

    2、编写配置

    新建一个application.yml

    server:  port: 80
    

    3、编写代码

    代码编写前,我们认识一个东西,就是我们的标题,REST这个东西,这里我觉得你学到这里应该很容易理解,所以我觉得还是先上代码吧

    首先编写一个config配置类,我们把RestTemplate这个对象接管到spring容器中

    @Configurationpublic class BeanConfig {    @Bean    public RestTemplate getRestTemplate(){        return new RestTemplate();    }}
    

    接着编写我们的消费代码,ConsumerController

    @RestControllerpublic class ConsumerController {    private static final String REST_URL_PREFIX = "http://localhost:8001";    @Autowired    RestTemplate restTemplate;    @PostMapping("/cousumer/add")    public boolean addAccount(Account account) {        return restTemplate.postForObject(REST_URL_PREFIX+"/account/add",account,boolean.class);    }    @GetMapping("/cousumer/get/{id}")    public Account get(@PathVariable("id") long id) {        return restTemplate.getForObject(REST_URL_PREFIX+"/account/get/"+id,Account.class);    }    @GetMapping("/cousumer/list")    public List getAll() {        return restTemplate.getForObject(REST_URL_PREFIX+"/account/list",List.class);    }}
    

    上面我都没有给大家说编写springboot启动类,别到这里还没启动呀,每一个项目下面,编写一个这样的启动类

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

    我们启动下消费方,看下是否可以远程调用服务方服务,测试成功,远程调用了我们的服务消费掉

    其实我们都学过网络请求,RestTemplate其实就是封装好的一个请求对象,然后可以通过get|post|delete|put请求,里面也没有多少方法,点以下就都出来了,这么简单,很容易看懂并学会吧!

    其实就像前后段分离,发送异步请求,通过不断地请求服务,然后去实现功能,一种直连的方式,对地址和端口请求服务

    但是我们可以发现,这样是有缺点的,比如provider宕机了,consumer请求是请求不到了的,而且也不能做一些检测,负载均衡,轮询等方式;那我们接着学习再加一层

  • 相关阅读:
    C++赋值函数,为什么通常需要返回类的引用
    网络的下一次迭代:AVS 将为 Web2 带去 Web3 的信任机制
    如何封装Vue组件并上传到npm
    数据结构与算法(Java篇)笔记--选择排序
    JSP自定义标签(下)
    C++程序设计-练手题集合【期末复习|考研复习】
    一键免密登录云平台!ZStack Cloud 4.5.0等你来解锁……
    Kafka 优化问题
    微服务框架 SpringCloud微服务架构 22 DSL 查询语法 22.3 精确查询
    软件测试/测试开发丨利用ChatGPT 生成自动化测试脚本
  • 原文地址:https://blog.csdn.net/Java_ttcd/article/details/126279547