# 学习spring cloud过程中的问题记录

这里记录了我学习spring cloud的过程中,遇到的一些错误,以及一些已经忘记的知识点

# mybatis

# useGeneratedKeys

根据官方的解释

允许JDBC支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)

我们可以在三个地方设置该参数

  • settings 元素中设置 useGeneratedKeys 参数
  • xml 映射器中设置 useGeneratedKeys 参数
  • 接口 映射器中设置 useGeneratedKeys 参数

详细可以看此篇博客 (opens new window)

这个参数的作用就是,比如我们执行insert操作,那么我们能够拿到数据库自动生成的主键id

keyProperty参数是和useGeneratedKeys一起使用的,除了这个,还有keyColumn,他们的区别是

  • keyColumn 数据库 列名(or 别名)
  • keyProperty java 中要封装的 类的参数名

# resultMap标签

详细请看mybatis的笔记

# spring

# service

当我们在service的实现类上,注入dao的对象的时候,可以使用spring的Autowired,我们也可以使用java自带的Resource进行依赖注入

@Resource
private PaymentDao paymentDao;
1
2

# 使用restTemplate传递数据,收不到

public CommonResult create(Payment payment) {}
1

最初是这样的,我们从另一个服务中,使用restTemplate的方法请求该controller的时候,会发现payment中的数据,没有

restTemplate.postForObject(serviceUrl.getPaymentUrl() + "/payment/create",payment,CommonResult.class);
1

出现这个原因,是需要我们使用@RequestBody这个注解

public CommonResult create(@RequestBody Payment payment) {}
1

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);

这里应该是postForObject方法传递过去的是一个json字符串,所以就导致收不到数据

# @Value注解

SpringBoot之Spring@Value属性注入使用详解 - 知乎 (zhihu.com) (opens new window)

该注解,可以通过key获取到application.yml中的配置项值

使用

server:
	port: 8001
1
2
@Value("${server.port}")
String serverPort;
1
2

使用的时候,一定要通过${}去获取

# maven

# 解决jdk版本一直改变

增加下面这个插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>
1
2
3
4
5
6
7
8
9

# cloud

# No instances available for CLOUD-PAYMENT-SERVICE

如果搭建集群的时候,请求报这个错误,那么大概率是spring.application.nameCLOUD-PAYMENT-SERVICE的服务提供者,没有被注册到注册中心

一定要保证,此CLOUD-PAYMENT-SERVICE在上图箭头处