写点什么

SpringCloud 从入门到精通 05--- 订单模块

用户头像
Felix
关注
发布于: 2021 年 01 月 11 日

开发过程中,在改变了代码后,一般需要停止项目,然后重新运行以应用我们的项目,但是频繁的修改和重启项目比较麻烦,这里,我们就增加一个插件,当我们修改了代码后,项目会自动重新启动,对于效率的提升有所帮助。

找到IDEA的配置文件,找到Compiler然后,依次勾选右侧的几个选项,如图所示

然后打开Registry勾选此项

此时,修改代码后就可以自动重启服务了。配置好以后,在现有的项目中新建一个`cloud-order-8000`模块,现在我们的项目就是这个样子

此项目的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>cloudservice</artifactId>        <groupId>com.felix</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>
<artifactId>cloud-order-8000</artifactId>
<properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties>
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <dependency> <groupId>com.felix</groupId> <artifactId>cloud-mbg</artifactId> </dependency> </dependencies></project>
复制代码

写入简单的逻辑,这个模块中,订单对外的接口只负责调用cloud-payment-8001的接口,不进行实际的逻辑操作,所以这个模块,我们只写controller的逻辑即可,按照下图,创建对应的包和java文件

这里的CommonResult是拷贝的`cloud-payment-8001`的文件,所以不再粘贴代码

ApplicationContextConfig

package com.felix.order.config;
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.client.RestTemplate;
@Configurationpublic class ApplicationContextConfig { @Bean public RestTemplate restTemplate(){ return new RestTemplate(); };}
复制代码

OrderController内容如下

package com.felix.order.controller;
import com.felix.order.result.CommonResult;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Controller;import org.springframework.util.LinkedMultiValueMap;import org.springframework.util.MultiValueMap;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;import java.util.HashMap;import java.util.Map;
@Controller@RequestMapping("/order")public class OrderController { private static final String URL_PAYMENT = "http://localhost:8001";
@Resource private RestTemplate restTemplate;
@PostMapping(value = "/payment/create") @ResponseBody public CommonResult createPayment(String serialNo){ System.out.println("serialNo" + serialNo); MultiValueMap<String,String> map = new LinkedMultiValueMap<>(); map.add("serialNo",serialNo); return restTemplate.postForObject(URL_PAYMENT + "/payment/create",map,CommonResult.class); }
@PostMapping(value = "/payment/{id}") @ResponseBody public CommonResult getPayment(@PathVariable("id") Long id){ return restTemplate.getForObject(URL_PAYMENT + "/payment/" + id,CommonResult.class); }}
复制代码

运行项目,不出意外的话会出现如下报错

***************************APPLICATION FAILED TO START***************************
Description:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class
复制代码

这里有个问题,我们并没有在pom.xml文件中引入任何数据库相关的jar包,但是为什么为提示我们缺少数据库的配置`url`呢?

这是因为当前项目依赖于cloud-mbg,而cloud-mbg中引入了mybatis相关的jar包,造成订单模块也引入了mybatis相关的jar包,所以修改cloud-mbgpom.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>cloudservice</artifactId>        <groupId>com.felix</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>
<artifactId>cloud-mbg</artifactId>
<dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <optional>true</optional> </dependency> </dependencies>
</project>
复制代码

由于cloud-mbg仅为其他模块提供数据模型,所以依赖于cloud-mbg的模块并不需要它的依赖向下传递,所以加入optional节点来阻止依赖传递

现在,再次运行订单模块,即可正常启动,现在不再访问8001端口的相关接口了,直接通过订单服务的8000端口访问订单服务的相关接口

尝试一下插入数据


发布于: 2021 年 01 月 11 日阅读数: 33
用户头像

Felix

关注

还未添加个人签名 2020.12.24 加入

还未添加个人简介

评论

发布
暂无评论
SpringCloud 从入门到精通 05--- 订单模块