开发过程中,在改变了代码后,一般需要停止项目,然后重新运行以应用我们的项目,但是频繁的修改和重启项目比较麻烦,这里,我们就增加一个插件,当我们修改了代码后,项目会自动重新启动,对于效率的提升有所帮助。
找到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;
@Configuration
public 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-mbg
的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-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
端口访问订单服务的相关接口
尝试一下插入数据
评论