【springcloud】环境搭建与Rest使快速上手

打印 上一主题 下一主题

主题 930|帖子 930|积分 2790

SpringCloud环境搭建 --- Rest使用

个人主页:https://www.cnblogs.com/xbudian/
今天来到SpringCloud的学习,我们从spring boot微服务阶段,学习到了用springboot去创建很多的微服务,但是这么多微服务我们如果去管理,以及相互之间的联系呢?
而到了我们学习springcloud阶段,其实相对而言是变简单的,不需要写很多代码以及什么操作,主要就是接收思想,了解其中的机制,而springCloud项目基于springboot项目,只需要几行简单的配置即可开始使用;
那来到了我们最熟悉的官网:https://spring.io/

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

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

Rest环境搭建

环境说明:jdk1.8,idea2019,maven3.6.X,springcloud最新版2021.0.3,mybatis-plus
我们首先搭建一个父工程项目,创建一个空的普通的maven项目,我们直接把src目录删除掉,pom文件写下面的使用父工程管理依赖,这里都是与文章日期最新依赖。
  1. <properties>
  2.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  3.     <maven.compiler.source>1.8</maven.compiler.source>
  4.     <maven.compiler.target>1.8</maven.compiler.target>
  5.     <junit.version>4.12</junit.version>
  6.     <log4j.version>1.2.17</log4j.version>
  7.     <lombok.version>1.18.24</lombok.version>
  8.     <springcloud-version>2021.0.3</springcloud-version>
  9. </properties>
  10. <dependencyManagement>
  11.     <dependencies>
  12.         <dependency>
  13.             
  14.             <groupId>org.springframework.cloud</groupId>
  15.             <artifactId>spring-cloud-dependencies</artifactId>
  16.             <version>${springcloud-version}</version>
  17.             <type>pom</type>
  18.             <scope>import</scope>
  19.         </dependency>
  20.         
  21.         <dependency>
  22.             <groupId>org.springframework.boot</groupId>
  23.             <artifactId>spring-boot-dependencies</artifactId>
  24.             <version>2.7.0</version>
  25.             <type>pom</type>
  26.             <scope>import</scope>
  27.         </dependency>
  28.         
  29.         <dependency>
  30.             <groupId>mysql</groupId>
  31.             <artifactId>mysql-connector-java</artifactId>
  32.             <version>8.0.28</version>
  33.         </dependency>
  34.         
  35.         <dependency>
  36.             <groupId>com.alibaba</groupId>
  37.             <artifactId>druid</artifactId>
  38.             <version>1.2.11</version>
  39.         </dependency>
  40.         <dependency>
  41.             <groupId>com.baomidou</groupId>
  42.             <artifactId>mybatis-plus-boot-starter</artifactId>
  43.             <version>3.0.5</version>
  44.         </dependency>
  45.         
  46.         <dependency>
  47.             <groupId>ch.qos.logback</groupId>
  48.             <artifactId>logback-core</artifactId>
  49.             <version>1.2.3</version>
  50.         </dependency>
  51.         <dependency>
  52.             <groupId>junit</groupId>
  53.             <artifactId>junit</artifactId>
  54.             <version>${junit.version}</version>
  55.             <scope>test</scope>
  56.         </dependency>
  57.         <dependency>
  58.             <groupId>log4j</groupId>
  59.             <artifactId>log4j</artifactId>
  60.             <version>${log4j.version}</version>
  61.         </dependency>
  62.         <dependency>
  63.             <groupId>org.projectlombok</groupId>
  64.             <artifactId>lombok</artifactId>
  65.             <version>${lombok.version}</version>
  66.         </dependency>
  67.     </dependencies>
  68. </dependencyManagement>
  69. <build>
  70.    
  71.     <finalName>springcloud</finalName>
  72.     <resources>
  73.         <resource>
  74.             <directory>src/main/resources</directory>
  75.             <filtering>true</filtering>
  76.         </resource>
  77.     </resources>
  78.     <plugins>
  79.         <plugin>
  80.             <groupId>org.apache.maven.plugins</groupId>
  81.             <artifactId>maven-resources-plugin</artifactId>
  82.             <configuration>
  83.                
  84.                 <delimiters>
  85.                     <delimit>$</delimit>
  86.                 </delimiters>
  87.             </configuration>
  88.         </plugin>
  89.     </plugins>
  90. </build>
复制代码
有了父工程项目,我们再准备一个数据库环境,写一个api类,这里我们新建一个简单的账户表,往里面插入几条简单的数据
  1. DROP TABLE IF EXISTS `account`;
  2. CREATE TABLE `account` (
  3.   `account_id` int(11) NOT NULL,
  4.   `account_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  5.   `account_pwd` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  6.   PRIMARY KEY (`account_id`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
  8. -- ----------------------------
  9. -- Records of account
  10. -- ----------------------------
  11. INSERT INTO `account` VALUES ('1', 'zhangsan', '333');
  12. INSERT INTO `account` VALUES ('2', 'lisi', '444');
  13. INSERT INTO `account` VALUES ('3', 'wangwu', '555');
  14. INSERT INTO `account` VALUES ('4', 'zhangliu', '666');
  15. INSERT INTO `account` VALUES ('5', 'qiqi', '777');
  16. INSERT INTO `account` VALUES ('6', 'baba', '888');
复制代码
新建一个maven普通项目起名叫springcloud-api,里面呢,放一个这样的实体类,与表的关系对应起来的一个简单对象,使用了lombok,这里大家可以自行去了解
1、导入依赖
  1. <dependency>
  2.     <groupId>org.projectlombok</groupId>
  3.     <artifactId>lombok</artifactId>
  4. </dependency>
复制代码
我们可以看到这里如果正确会有一个小圆圈,如果你这里没有,那就要检查下父工程依赖了

2、编写配置,这里没有什么配置,所以就是滤过
3、编写对应代码

provider-服务端提供者

再新建一个maven普通项目模块,我们做服务的提供者
1、导入依赖
  1. <dependencies>
  2.     <dependency>
  3.         <groupId>com.xuexi</groupId>
  4.         <artifactId>springcloud-api</artifactId>
  5.         <version>1.0-SNAPSHOT</version>
  6.     </dependency>
  7.     <dependency>
  8.         <groupId>mysql</groupId>
  9.         <artifactId>mysql-connector-java</artifactId>
  10.     </dependency>
  11.     <dependency>
  12.         <groupId>com.alibaba</groupId>
  13.         <artifactId>druid</artifactId>
  14.     </dependency>
  15.     <dependency>
  16.         <groupId>ch.qos.logback</groupId>
  17.         <artifactId>logback-core</artifactId>
  18.     </dependency>
  19.     <dependency>
  20.         <groupId>com.baomidou</groupId>
  21.         <artifactId>mybatis-plus-boot-starter</artifactId>
  22.     </dependency>
  23.     <dependency>
  24.         <groupId>org.springframework.boot</groupId>
  25.         <artifactId>spring-boot-test</artifactId>
  26.     </dependency>
  27.     <dependency>
  28.         <groupId>org.springframework.boot</groupId>
  29.         <artifactId>spring-boot-starter-web</artifactId>
  30.     </dependency>
  31.     <dependency>
  32.         <groupId>org.springframework.boot</groupId>
  33.         <artifactId>spring-boot-devtools</artifactId>
  34.     </dependency>
  35. </dependencies>
复制代码
2、编写配置
新建一个application.yml文件,内容如下:
  1. server:
  2.   port: 8001
  3. spring:
  4.   application:
  5.     name: springcloud-provider-account
  6.   datasource:
  7.     driverClassName: com.mysql.cj.jdbc.Driver
  8.     url: jdbc:mysql://localhost:3306/lianxi?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
  9.     username: root
  10.     password:
  11.     type: com.alibaba.druid.pool.DruidDataSource  #使用阿里的数据源
  12. # mybatis-plus配置日志
  13. mybatis-plus:
  14.   configuration:
  15.     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  16.   type-aliases-package: com.xuexi.pojo
  17.   mapper-locations: classpath:mapper/*.xml
  18.   global-config:
  19.     db-config:
  20.       table-underline: true  #实体类驼峰转下划线,默认就是
复制代码
3、编写代码,服务提供者我们只需要编写dao层和service层,这里使用了mybaits-plus所以比较简单,直接给大家截图
dao层

service层


这里我们可以编写一个controller进行下测试
  1. @RestController
  2. public class AccountController {
  3.     @Autowired
  4.     AccountService accountService;
  5.     @PostMapping("/account/add")
  6.     public boolean addAccount(Account account){
  7.         return accountService.save(account);
  8.     }
  9.     @GetMapping("/account/get/{id}")
  10.     public Account get(@PathVariable("id") long id){
  11.         return accountService.getById(id);
  12.     }
  13.     @GetMapping("/account/list")
  14.     public List<Account> getAll(){
  15.         return accountService.list(null);
  16.     }
  17. }
复制代码
测试成功

consumer-消费者

同样的我们再建一个普通的maven子工程项目,我们进行服务的消费
1、导入依赖
  1. <dependencies>
  2.     <dependency>
  3.         <groupId>com.xuexi</groupId>
  4.         <artifactId>springcloud-api</artifactId>
  5.         <version>1.0-SNAPSHOT</version>
  6.     </dependency>
  7.     <dependency>
  8.         <groupId>org.springframework.boot</groupId>
  9.         <artifactId>spring-boot-starter-web</artifactId>
  10.     </dependency>
  11.     <dependency>
  12.         <groupId>org.springframework.boot</groupId>
  13.         <artifactId>spring-boot-devtools</artifactId>
  14.     </dependency>
  15. </dependencies>
复制代码
2、编写配置
新建一个application.yml
  1. server:
  2.   port: 80
复制代码
3、编写代码
代码编写前,我们认识一个东西,就是我们的标题,REST这个东西,这里我觉得你学到这里应该很容易理解,所以我觉得还是先上代码吧
首先编写一个config配置类,我们把RestTemplate这个对象接管到spring容器中
  1. @Configuration
  2. public class BeanConfig {
  3.     @Bean
  4.     public RestTemplate getRestTemplate(){
  5.         return new RestTemplate();
  6.     }
  7. }
复制代码
接着编写我们的消费代码,ConsumerController
  1. @RestController
  2. public class ConsumerController {
  3.     private static final String REST_URL_PREFIX = "http://localhost:8001";
  4.     @Autowired
  5.     RestTemplate restTemplate;
  6.     @PostMapping("/cousumer/add")
  7.     public boolean addAccount(Account account) {
  8.         return restTemplate.postForObject(REST_URL_PREFIX+"/account/add",account,boolean.class);
  9.     }
  10.     @GetMapping("/cousumer/get/{id}")
  11.     public Account get(@PathVariable("id") long id) {
  12.         return restTemplate.getForObject(REST_URL_PREFIX+"/account/get/"+id,Account.class);
  13.     }
  14.     @GetMapping("/cousumer/list")
  15.     public List<Account> getAll() {
  16.         return restTemplate.getForObject(REST_URL_PREFIX+"/account/list",List.class);
  17.     }
  18. }
复制代码
上面我都没有给大家说编写springboot启动类,别到这里还没启动呀,每一个项目下面,编写一个这样的启动类
  1. @SpringBootApplication
  2. public class Consumer_80 {
  3.     public static void main(String[] args) {
  4.         SpringApplication.run(Consumer_80.class,args);
  5.     }
  6. }
复制代码
我们启动下消费方,看下是否可以远程调用服务方服务,测试成功,远程调用了我们的服务消费掉

其实我们都学过网络请求,RestTemplate其实就是封装好的一个请求对象,然后可以通过get|post|delete|put请求,里面也没有多少方法,点以下就都出来了,这么简单,很容易看懂并学会吧!
其实就像前后段分离,发送异步请求,通过不断地请求服务,然后去实现功能,一种直连的方式,对地址和端口请求服务

但是我们可以发现,这样是有缺点的,比如provider宕机了,consumer请求是请求不到了的,而且也不能做一些检测,负载均衡,轮询等方式;那我们接着学习再加一层
下一篇我们尝试下使用Eureka注册中心,持续更新中·····
赶紧点个关注吧,之后还会更新整个springcloud系列,关注不迷路,点个赞也行啊,bye~

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表