SpringCloud Rest使用
_学习 人气:0今天来到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文件写下面的使用父工程管理依赖,这里都是与文章日期最新依赖。
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <junit.version>4.12</junit.version> <log4j.version>1.2.17</log4j.version> <lombok.version>1.18.24</lombok.version> <springcloud-version>2021.0.3</springcloud-version> </properties> <dependencyManagement> <dependencies> <dependency> <!--springcloud依赖--> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${springcloud-version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- springboot依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.7.0</version> <type>pom</type> <scope>import</scope> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.11</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency> <!--日志测试--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> </dependencies> </dependencyManagement> <build> <!--父工程的项目名称--> <finalName>springcloud</finalName> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <!--以$开头结尾 符合在src/main/resources路径下面访问到 主要是yml文件或者properties文件--> <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.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
我们可以看到这里如果正确会有一个小圆圈,如果你这里没有,那就要检查下父工程依赖了
2、编写配置,这里没有什么配置,所以就是滤过
3、编写对应代码
provider-服务端提供者
再新建一个maven普通项目模块,我们做服务的提供者
1、导入依赖
<dependencies> <dependency> <groupId>com.xuexi</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>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies>
2、编写配置
新建一个application.yml文件,内容如下:
server: port: 8001 spring: 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进行下测试
@RestController public 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<Account> getAll(){ return accountService.list(null); } }
测试成功
consumer-消费者
同样的我们再建一个普通的maven子工程项目,我们进行服务的消费
1、导入依赖
<dependencies> <dependency> <groupId>com.xuexi</groupId> <artifactId>springcloud-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies>
2、编写配置
新建一个application.yml
server: port: 80
3、编写代码
代码编写前,我们认识一个东西,就是我们的标题,REST这个东西,这里我觉得你学到这里应该很容易理解,所以我觉得还是先上代码吧
首先编写一个config配置类,我们把RestTemplate这个对象接管到spring容器中
@Configuration public class BeanConfig { @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
接着编写我们的消费代码,ConsumerController
@RestController public 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<Account> getAll() { return restTemplate.getForObject(REST_URL_PREFIX+"/account/list",List.class); } }
上面我都没有给大家说编写springboot启动类,别到这里还没启动呀,每一个项目下面,编写一个这样的启动类
@SpringBootApplication public class Consumer_80 { public static void main(String[] args) { SpringApplication.run(Consumer_80.class,args); } }
我们启动下消费方,看下是否可以远程调用服务方服务,测试成功,远程调用了我们的服务消费掉
其实我们都学过网络请求,RestTemplate其实就是封装好的一个请求对象,然后可以通过get|post|delete|put请求,里面也没有多少方法,点以下就都出来了,这么简单,很容易看懂并学会吧!
其实就像前后段分离,发送异步请求,通过不断地请求服务,然后去实现功能,一种直连的方式,对地址和端口请求服务
但是我们可以发现,这样是有缺点的,比如provider宕机了,consumer请求是请求不到了的,而且也不能做一些检测,负载均衡,轮询等方式;那我们接着学习再加一层
下一篇我们尝试下使用Eureka注册中心,持续更新中·····
加载全部内容