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;
posted @ 2024-04-02 10:45  之士咖啡  阅读(58)  评论(0编辑  收藏  举报