快捷搜索:  汽车  科技

springcloud使用感受(一个简单的SpringClouddemo踩中的四处坑)

springcloud使用感受(一个简单的SpringClouddemo踩中的四处坑)居然变成了蓝色的了?一运行居然通过了。我的内心是崩溃的,MySQL写双引号或者单引号都是没问题的,所以我潜意识认为这个H2也是可以的....哎,差点让我怀疑人生。这哪里有错?嗯?反反复复看了好几遍,我擦,书里是单引号。不会是这个问题吧?(注意看这里的varchar类型数据用双引号包裹是绿色的),于是我又换成了单引号原因就是这样,前面一开始就错了,但在hibernate节点那儿才报错,让我误以为是那块儿出错了。 当我解决了配置问题,满心欢喜的运行起项目时,啊哦,这系统又给我抛出了个异常。这特么又是什么错误?说找不到列?难道是我插入数据时写错了?

案例很简单,使用Maven搭建Spring boot项目,编写一个用户服务提供者。

首先第一个坑就是,application.yml配置文件的问题。

由于我是看着书敲的,自己创建的yml文件,在eclipse中就像编辑最普通的txt文本文档一样艰难,没有任何提示,但我没想到格式会这么严格,不论怎么敲就是报错。

我是怎么解决的?后来我去Spring官网下载了一个Spring Tool Suite插件,http://spring.io/tools/sts/all,安装后再次打开application.yml文件就变为了下面这个样子

springcloud使用感受(一个简单的SpringClouddemo踩中的四处坑)(1)

有着很明显的颜色区分。但我还是报错,出错的地方在hibernate: ddl-auto: none 那块儿,总是提示写在这里不被允许。我是真的很郁闷,后来才仔细对比下,竟然是空格的问题。

springcloud使用感受(一个简单的SpringClouddemo踩中的四处坑)(2)

原因就是这样,前面一开始就错了,但在hibernate节点那儿才报错,让我误以为是那块儿出错了。

第二坑,H2数据库插入数据时显示未找到列

当我解决了配置问题,满心欢喜的运行起项目时,啊哦,这系统又给我抛出了个异常。

springcloud使用感受(一个简单的SpringClouddemo踩中的四处坑)(3)

这特么又是什么错误?说找不到列?难道是我插入数据时写错了?

springcloud使用感受(一个简单的SpringClouddemo踩中的四处坑)(4)

这哪里有错?嗯?反反复复看了好几遍,我擦,书里是单引号。不会是这个问题吧?(注意看这里的varchar类型数据用双引号包裹是绿色的),于是我又换成了单引号

springcloud使用感受(一个简单的SpringClouddemo踩中的四处坑)(5)

居然变成了蓝色的了?一运行居然通过了。我的内心是崩溃的,MySQL写双引号或者单引号都是没问题的,所以我潜意识认为这个H2也是可以的....哎,差点让我怀疑人生。

再次提醒,H2数据库varchar类型插入时得用单引号,亲测。。。

第三坑,方法路径没问题,项目启动就是顽强的404

解决了配置文件、解决了数据库的语句问题,我想这个可以愉快的运行项目显示我想要的结果了吧。但是又给了我一个霹雳,无限404。

我的Controller方法里肯定是没啥问题的,就是get方式传个参数,应该就能返回User的JSON字符串信息了。

springcloud使用感受(一个简单的SpringClouddemo踩中的四处坑)(6)


  1. @RestController
  2. public class UserController {
  3. @Autowired
  4. private UserRepository userRepository;
  5. @GetMapping("/{id}")
  6. public User getUserByID(@PathVariable Long id){
  7. User user = userRepository.findOne(id);
  8. return user;
  9. }
  10. }

所以肯定不是路径的问题,于是我就去百度了一下,发现这个启动类和Controller的位置貌似有点要求。注意

,一开始我的启动类是写在com.microservice.main包里的,而Controller是写在com.microservice.controller包里的,这两个包是同级的,但是启动类和这个controller包就不是同级的了。

springcloud使用感受(一个简单的SpringClouddemo踩中的四处坑)(7)

于是最终我将启动类所在的包调整为com.microservice,让controller包变为和启动类同级。

springcloud使用感受(一个简单的SpringClouddemo踩中的四处坑)(8)

于是问题终于解决了。所以这里提醒下,最好将这个启动类放到更顶级的目录下,Controller类要至少和启动类同级,或者在其子包下。

第四坑,注解问题导致org.Hibernate.AnnotationException

springcloud使用感受(一个简单的SpringClouddemo踩中的四处坑)(9)

意思是在实体类User中没有定义主键。可是我打开User类一看,明明就使用了@Id注解了啊


  1. @Entity
  2. public class User {
  3. @Id
  4. @GeneratedValue(strategy = GenerationType.AUTO)
  5. private Long id;
  6. @Column
  7. private String username;
  8. @Column
  9. private String name;
  10. @Column
  11. private Integer age;
  12. @Column
  13. private BigDecimal balance;
  14. ........//getter与setter
  15. }

于是纳闷了一会儿,看了看是不是包有问题,是不是有多个@Id注解但是我没导入正确呢?果不其然,原来我引用的竟然是spring data包里的@Id注解。

springcloud使用感受(一个简单的SpringClouddemo踩中的四处坑)(10)

由于这里使用的是JPA H2数据库进行快速搭建的例子,所以应当引用JPA中的注解。

springcloud使用感受(一个简单的SpringClouddemo踩中的四处坑)(11)

也就是最终应当引用persistence包中的注解@Id。

springcloud使用感受(一个简单的SpringClouddemo踩中的四处坑)(12)

至此,再次运行项目,终于能够成功访问了。

springcloud使用感受(一个简单的SpringClouddemo踩中的四处坑)(13)

可以看到,即便一个小例子,如果不够认真细心,还是会出一些错误让你抓狂。当然我这是直接照着书敲,并且没有前置基础,出错也是难免的。不过我还是期待接下来的例子继续出错,暴露出问题来,然后我再解决

猜您喜欢: