踩坑记录

IDEA 编译OOM

现象

fms 工程在编译时,抛出 OOM 异常,使用 Maven 编译是正常的。在编译过程中发现两个问题。

  • 除了 javac 编译外,还在使用 kotlin 编译
  • 系统剩余内存足够,使用 Maven 编译的 war 包可以在 tomcat 中正常启动。

原因

IDEA 可以设置编译时的堆(HEAP)大小,默认值是 700(MBytes) ,一般的工程也足够但是 fms 不够,超过了 700(MBytes) 就报 OOM。

解决办法

  • 在 IDEA 中设置编译时的堆大小。

IDEA设置编译时堆内存

泛型擦除

现象

doraemon-fs 中写了 spring 的 bean,然后增加了一个配置类,在配置类中使用 @ComponentScan 注解配置对扫描的包名,在写了一个 @EnableFsQuery 注解,在 mdm 启动类上打注解 @EnableFsQuery,mdm 启动时无法注入指定的 bean。

1
2
3
@Import(FsMongoConfig.class)
public @interface EnableFsQuery {
}

原因

@EnableFsQuery 注解上没有打生命周期对应的注解。泛型的默认 RetentionPolicy.CLASS ,在运行期间不保留注解。

解决办法

1
2
3
4
5
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(FsMongoConfig.class)
public @interface EnableFsQuery {
}

自定义切面启动异常

现象

Spring 启动报异常:

1
:0 can't find referenced pointcut

原因

AspectJ 依赖包 aspectjweaver 版本过低导致。

解决办法

升级依赖包

1
2
3
4
5
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.8</version>
</dependency>