IDEA创建Spring注意事项

问题1:发现没有src目录

  自己在创建项目的时候,发现没有src目录。一开始时以为是因为maven配置问题,导致maven创建失败,从而没有创建src目录。
  但在maven配置文成后扔谈存在问题。

问题点:

  我在创建maven项目时,选择Maven Pom,导致的没有src目录
  Maven:生成整个完整的工程结构,包括pom文件
  Maven POM:只会在工程目录下生成pom.xml,而没有src等等结构
image

问题2:Pom文件显示报错

  通过IDEA创建springboot项目,但创建后迟迟无法通过maven下载spring-boot-starter-parent:3.2.4.RELEASE版本,同时镜像下载失败。以为是阿里镜像无法下载parent

问题点:

  本地JDK为8,但是springboot 3.* 以上版本不支持8,支持 11往上版本,从而项目报错。

问题3:在子模块使用

  在开始创建maven项目时,就存在标签,也就延续了,但在maven clean时报错了。看报错似乎删掉就可以了
image

问题点:

  <relativePath>标签表示包的路径。
  <relativePath/>则表示先本地查找,然后到远程查找,并不会向上查找Pom文件,而且我自定义的包并没有打包。所以必然报错。
  实际上我是想使用父项目的Pom文件,完成子模块Pom文件内容的抽离。所以删掉就行。

问题4:作为公共jar包,maven install 报错

  直接用maven install打包时,报错如下。项目创建初始jdk5,但我后面已经进行调整了。但不知道未声明还是报错tarfget目录下文件编译问题。
image

问题点:

  默认在maven打包时,默认是用jdk5进行打包的,导致代码中lambda表达式无法识别。我在Pom中定义jdk版本就行了
<plugin></plugin>

<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"> <modelVersion>4.0.0</modelVersion> <groupId>com.project.book</groupId> <artifactId>book-common</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> *** </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>

问题5:虚拟机10. 127.0.0.1的使用

  在虚拟机中使用127.0.0.1不一定会指向虚拟机,可能会指向本机,导致在虚拟机上使用127.0.0.1无法执行虚拟机的服务

问题5:网关配置跨域后,请求报错503

image

问题点:

  出现503错误的原因是Gateway网关服务中会根据loadbanlance负载均衡路由到renren-fast但是缺少了对应的依赖,在Gateway服务中添加即可

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency>

问题6:启动RenRen_generator时报:循环调用

  为了版本一致,将spring-boot-starter-parent版本从2.2.6.RELEASE到2.6.5,结果启动报错。
image

问题点:

  版本不兼容,导致jar与jar之间的调用出现循环调用问题。将pagehelper-spring-boot-starter版本,从1.2.5升级到1.4.1

<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.1</version> </dependency>

问题7: springcloud官网集成oss操作,jar下载失败

image

问题点:

替换jar包为

jar包 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alicloud-oss</artifactId> <version>2.2.0.RELEASE</version> </dependency> 配置yml apring: cloud: alicloud: oss: endpoint: oss-cn-beijing.aliyuncs.com access-key: LTAI5tRAeDckd7cWWyt8KqVK secret-key: jOQt4VaUSHFamoYgxCYrGrkxtZrhLN

问题8: 项目启动时发现存在循环调用问题

image

问题点:

   springboot2.6.0版本开始,不鼓励使用循环调用。而我的版本为 2.6.5刚好过线。

  1. 处理方式:从seviceA调用serviceB改为调用daoB,或者从serviceB调用serviceA(统一业务的处理方向)
  2. 配置一下,spring.main.allow-circular-references = true

问题9:系统中vo、dto文件过多创建麻烦

问题点:

  vo用于后端与前端对接,dto用于后端与后端对接。很多时候会定义接口文档,或者json串。我们可以通过 json串java的方式完成生成。
  百度查询,json在线格式化,可以查到很多网站
image

问题10:后台返回数据list.size为0,json显示list

  当集合、对象为null或者空时,在前台显示为空,或者数组为0。导致前端的级联选择器显示异常。

问题点:

  针对空、null的属性,在转为json时不应该显示。对此使用@JsonInclude(JsonInclude.Include.NON_EMPTY)完善功能。
image

// 默认策略,任何情况都执行序列化 ALWAYS // 非空 属性为NULL 不序列化 NON_NULL // null的不会序列化,但如果类型是AtomicReference,依然会被序列化 NON_ABSENT // null、集合数组等没有内容、空字符串等,都不会被序列化 NON_EMPTY // 如果字段是默认值,就不会被序列化 NON_DEFAULT // 此时要指定valueFilter属性,该属性对应一个类,用来自定义判断被JsonInclude修饰的字段是否序列化 CUSTOM // 当JsonInclude在类和属性上都有时,优先使用属性上的注解,此时如果在序列化的get方法上使用了JsonInclude,并设置为USE_DEFAULTS,就会使用类注解的设置 USE_DEFAULTS

问题11:Jackson格式化时间差8小时

  为了时间格式化,我使用了spring.jackson.data-format进行时间格式化。但单穿前端后时间上相差8小时

问题点:

  spring boot在进行数据传输时,默认为json格式传输。Jackson框架默认的时区GMT,相对于中国是少了8小时
我们需要调整时区,来调整时间

spring jackson: # 格式化 时间格式 time-zone: GMT+8 #修改时区,保证时间正确 date-format: yyyy-MM-dd HH:mm:ss

问题12: @Value获取不到配置文件内容

  自己写代码时想灵活配置,使用@Value获取配置文件内容,但发现赋值List直接报错。配置和key都是对的,不知道为啥报错。
Could not resolve placeholder ‘elastic.search.http‘ in value “${elastic.search.http}“

问题点: @Value的无法传list

  查阅后发现,使用@Value只能用于传字符串或者数组。无法传map或者list。
注:
 EL表达式是可以写java语句的

1. 传字符串 ==> elastic.search.http=127.0.0.1:9200 ==> @Value("${elastic.search.http}") String httpUri; 2. 传数组 ==> elastic.search.http=127.0.0.1:9200,127.0.0.1:9201 ==> @Value("${elastic.search.http}") ==> String[] httpArray; 3. 传list ==> elastic.search.http=127.0.0.1:9200,127.0.0.1:9201 ==> @Value("#{'${elastic.search.http}'.split(',')}") ==> 或者 @Value("#{'${elastic.search.http:}'.empty ? null : '${elastic.search.http:}'.split(',')}") ==> List<String> httpList;

__EOF__

本文作者之士咖啡
本文链接https://www.cnblogs.com/zz-1q/p/18110041.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   之士咖啡  阅读(95)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示