基于springcloud微服务框架 开源,springcloud就是微服务吗
目录
一、创建父项目1.选择弹簧初始值r2 .类型选择为Java的Maven POM版本选择为83.勾选一些基本的依赖,如龙目岛和spring-boot-starter-web4 .创建好了的父项目结构如下:二、创建二级项目1.选择新建模块2。选择Maven3 .填写名称4。修改openfeign pom.xml文件,并删除掉该项目下的科学研究委员会文件5.创建完成的项目结构如下三、创建子项目假装供应商、假装消费者、假装资本1。在假装供应商项目上新建模块2.选择父母为openfeign-stu3 .同上步骤创建假装消费者,假装api,创建完成后的整体项目结构如下:四、完善假装api,假装提供者、假装消费者项目springcloud-stu pom.xml中去掉弹簧靴-maven-plugin2 .openfeign-stu pom.xml中修改为如下:3.假装美国石油学会(American Petroleum Institute)完善4.假装供应商完善4.1 pom.xml添加假装美国石油学会(American Petroleum Institute)依赖,及增加弹簧-启动梅文插件插件4.2产品控制员。Java 4.3产品映射器。XML 4.4产品。Java 4.5产品服务impl。Java 4.6产品服务。Java 4.7提供者应用程序。Java 4.8产品映射器。XML 4.9应用程序。yml 4.10 SQL脚本5.假装消费者完善5.1 pom.xml添加假装美国石油学会(American Petroleum Institute)依赖,及增加弹簧-启动梅文插件插件5.2休息配置。Java 5.3 productconsumercontroller。Java 5.4消费者应用程序。Java 5.5应用程序。阳明海运股份有限公司五、测试项目六总结本文主要是创建两个跳羚服务,以在该系列后面的教程中增添春云相关组件
一、创建父项目
1. 选择Spring Initializr
2. Type选择为Maven POM,Java Version选择为8
3. 勾选一些基本的依赖,如lombok和spring-boot-starter-web
4. 创建好了的父项目结构如下:
二、创建二级项目
1. 选择新建Module
2. 选择Maven
3. 填写Name
4. 修改openfeign pom.xml文件,并删除掉该项目下的src文件
5. 创建完成的项目结构如下
三、创建子项目feign-provider、feign-consumer、feign-api
1. 在feign-provider项目上新建模块
2. 选择Parent为openfeign-stu
3. 同上步骤创建feign-cons
umer、feign-api,创建完成后的整体项目结构如下:
四、完善feign-api、feign-provider、feign-consumer项目
1. springcloud-stu pom.xml中去掉spring-boot-maven-plugin
修改为如下:
<?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> <packaging>pom</packaging> <modules> <module>openfeign-stu</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.6</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.wq</groupId> <artifactId>springcloud-stu</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springcloud-stu</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
2. openfeign-stu 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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springcloud-stu</artifactId> <groupId>com.wq</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>openfeign-stu</artifactId> <packaging>pom</packaging> <modules> <module>feign-provider</module> <module>feign-consumer</module> <module>feign-api</module> </modules> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependencies></project>
3. feign-api 完善
feign-api的项目清单如下:
Result的内容如下:
package com.wq.feign.api.domain;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@NoArgsConstructor@AllArgsConstructorpublic class Result { private int code; private String msg; private Object data;}
pom.xml内容就是创建时的内容,不做改动
4. feign-provider 完善
完善后的项目结构如下:
4.1 pom.xml添加feign-api依赖,及增加spring-boot-maven-plugin插件
修改为如下:
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>openfeign-stu</artifactId> <groupId>com.wq</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>feign-provider</artifactId> <dependencies> <dependency> <groupId>com.wq</groupId> <artifactId>feign-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build></project>
4.2 ProductController.java
package com.wq.feign.provider.controller;import com.wq.feign.api.domain.Result;import com.wq.feign.provider.domain.entity.Product;import com.wq.feign.provider.service.ProductService;import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;@RestController@Slf4j@RequestMapping("/")public class ProductController { @Resource private ProductService productService; /** * 查询 * @param id * @return */ @GetMapping("product/provider/get/{id}") public Result selectById(@PathVariable("id") Long id){ return new Result(200, "查询成功", productService.selectById(id)); } * 删除 @GetMapping("product/provider/delete/{id}") public Result deleteById(@PathVariable("id") Long id){ return new Result(200, "删除成功", productService.deleteById(id)); * 修改 * @param product @PostMapping("product/provider/update") public Result updateById(@RequestBody Product product){ return new Result(200, "修改成功", productService.updateById(product.getId(), product.getName())); * 新增 @PutMapping( "product/provider/add") public Result insertById(@RequestBody Product product){ return new Result(200, "修改成功", productService.insertOne(product));}
4.3 ProductMapper.xml
package com.wq.feign.provider.dao;import com.wq.feign.provider.domain.entity.Product;import org.apache.ibatis.annotations.Param;import org.springframework.stereotype.Repository;@Repositorypublic interface ProductMapper { /** * 查询 * @param id * @return */ public Product selectById(@Param("id") Long id); * 删除 public int deleteById(@Param("id") Long id); * 修改 * @param name public int updateById(@Param("id") Long id, @Param("name") String name); * 新增 * @param product public int insertOne(Product product);}
4.4 Product.java
package com.wq.feign.provider.domain.entity;import lombok.Data;@Datapublic class Product { private Long id; private String name; private int stock;}
4.5 ProductServiceImpl.java
package com.wq.feign.provider.service.impl;import com.wq.feign.provider.dao.ProductMapper;import com.wq.feign.provider.domain.entity.Product;import com.wq.feign.provider.service.ProductService;import org.springframework.stereotype.Service;import javax.annotation.Resource;@Servicepublic class ProductServiceImpl implements ProductService { @Resource private ProductMapper productMapper; public Product selectById(Long id) { return productMapper.selectById(id); } public int deleteById(Long id) { return productMapper.deleteById(id); public int updateById(Long id, String name) { return productMapper.updateById(id, name); public int insertOne(Product product) { return productMapper.insertOne(product);}
4.6 ProductService.java
package com.wq.feign.provider.service;import com.wq.feign.provider.domain.entity.Product;/** * 商品服务类 */public interface ProductService { /** * 查询 * @param id * @return */ public Product selectById(Long id); * 删除 public int deleteById(Long id); * 修改 * @param name public int updateById(Long id, String name); * 新增 * @param product public int insertOne(Product product);}
4.7 ProviderApplication.java
package com.wq.feign.provider;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication@MapperScan("com.wq.feign.provider.dao")public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); }}
4.8 ProductMapper.xml
<?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.wq.feign.provider.dao.ProductMapper"> <resultMap id="BaseResultMap" type="com.wq.feign.provider.domain.entity.Product"> <result column="id" jdbcType="BIGINT" property="id" /> <result column="name" jdbcType="VARCHAR" property="name" /> <result column="stock" jdbcType="INTEGER" property="stock" /> </resultMap> <!--查询--> <select id="selectById" resultType="com.wq.feign.provider.domain.entity.Product"> select * from product where id = #{id} </select> <!--删除--> <delete id="deleteById" parameterType="java.lang.Long"> delete from product where id = #{id} </delete> <!--修改--> <update id="updateById" parameterType="com.wq.feign.provider.domain.entity.Product"> update product set name = #{name} where id = #{id} </update> <!--新增--> <insert id="insertOne" parameterType="com.wq.feign.provider.domain.entity.Product"> insert into product(name, stock) values (#{name}, #{stock}) </insert></mapper>
4.9 application.yml
server: port: 8081spring: application: name: feign-provider-8081 datasource: url: jdbc:mysql://localhost:3306/springcloud-stu?useUnicode=true&characterEncoding=utf8&userSSL=false driverClassName: com.mysql.cj.jdbc.Driver username: root password: 123456mybatis: mapper-locations: classpath:mapper/*Mapper.xml # Mybatis 映射文件位置 type-aliases-package: com.wq.feign.provider.domain.entity # 表对应的实体类包
4.10 sql脚本
DROP TABLE IF EXISTS `product`;CREATE TABLE `product` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `stock` int(10) UNSIGNED NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of productINSERT INTO `product` VALUES (1, 华为 mate10, 10);INSERT INTO `product` VALUES (2, 华为 mate20, 20);INSERT INTO `product` VALUES (3, 华为 mate30, 30);
5. feign-consumer 完善
完善后的项目结构如下
5.1 pom.xml添加feign-api依赖,及增加spring-boot-maven-plugin插件
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>openfeign-stu</artifactId> <groupId>com.wq</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>feign-consumer</artifactId> <dependencies> <dependency> <groupId>com.wq</groupId> <artifactId>feign-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build></project>
5.2 RestConfig.java
package com.wq.feign.consumer.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.client.RestTemplate;@Configurationpublic class RestConfig { @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); }}
5.3 ProductConsumerController.java
package com.wq.feign.consumer.controller;import com.wq.feign.api.domain.Result;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;import javax.annotation.Resource;@RestControllerpublic class ProductConsumerController { @Resource RestTemplate restTemplate; public static String url = "http://localhost:8081/"; /** * 查询 * @param id * @return */ @GetMapping("product/consumer/get/{id}") public Result selectById(@PathVariable("id") Long id){ return restTemplate.getForObject(url+"product/provider/get/"+id, Result.class); }}
5.4 ConsumerApplication.java
package com.wq.feign.consumer;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); }}
5.5 application.yml
server: port: 8082spring: application: name: feign-consumer-8082
五、测试项目
启动ProviderApplication和ConsumerApplication
使用浏览器访问,得到结果如下:
六 总结
我们至此创建了一个多模块的项目,然后有一个商品服务提供者feign-provider-8081 和一个商品服务消费者feign-consumer-8082 。
然后这就是最简单的两个微服务了,实现了功能的解耦。
但是这个简单的微服务存在着很多问题:
比如都用公共的实体类Result,还有提供者地址在消费者里面写死了等等,这些问题,我们接下来会一一解决。
到此这篇关于教你创建springcloud微服务的基础子服务的文章就介绍到这了,更多相关springcloud微服务内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。