记一次spring boot项目启动时的依赖循环

奇怪的是在我Ubuntu的机器上打包到测试服务器上报错,而从另外一台windows机器打包时就没问题,刚开始还以为是maven和jdk的问题。报错的启动时日志如下:

2019-06-14 14:03:45,644 org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter [main] (LoggingFailureAnalysisReporter.java:38) DEBUG --> Application failed to start due to an exception
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ‘heliPayChannelAsynService‘: Bean with name ‘heliPayChannelAsynService‘ has been injected into other beans [heliPayChannelService] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using ‘getBeanNamesOfType‘ with the ‘allowEagerInit‘ flag turned off, for example.

Description:

The dependencies of some of the beans in the application context form a cycle:

|  operManagerServiceImpl (field private com.ps.ydxjd.core.api.service.order.impl.OrderServiceImpl com.ps.ydxjd.core.api.service.manager.impl.OperManagerServiceImpl.orderServiceImpl)
↑     ↓
|  orderServiceImpl (field private com.ps.ydxjd.core.api.service.pay.IPayService com.ps.ydxjd.core.api.service.order.impl.OrderServiceImpl.payService)
↑     ↓
|  payService (field private com.ps.ydxjd.core.api.service.pay.HeliPayChannelAsynService com.ps.ydxjd.core.api.service.pay.impl.PayServiceImpl.heliPayChannelAsynService)
↑     ↓
|  heliPayChannelAsynService

查到文章也有类似的经历,

heliPayChannelAsynService加上了@EnableAsync(proxyTargetClass = true),方法上用了@Async

https://stackoverflow.com/questions/27400759/spring-3-2-project-fails-to-load-when-enableasync-is-added-to-configuration

https://stackoverflow.com/questions/28985144/spring-autowired-aop-circular-dependency

大概的意思是注入方法用了@Async的对象早于AOP创建proxy类,当spring初始化applicationContext后,发现注入的对象并不是proxy类。于是报错

解决方法是在注入heliPayChannelAsynService的地方加上   @Lazy(value = true)

原文地址:https://www.cnblogs.com/zjhgx/p/11047811.html

时间: 2024-09-28 06:50:19

记一次spring boot项目启动时的依赖循环的相关文章

spring boot 项目启动无任何反应

遇到的问题 spring boot项目启动后无任何报错,ps有进程,nohub无日志 定位 更换jar包,问题依然存在,将jar包放到其他服务器,运行正常,排除打包问题 同服务器其他系统运行正常,但停止后不能再次启动,出现相同问题 怀疑日志级别设置有问题,或编码问题,修改log配置问题依然存在 重启系统,问题仍然存在 重装jdk,问题解决 原文地址:https://www.cnblogs.com/bincoding/p/10199782.html

Spring Boot 2 启动时加载properties文件

每个项目从开发到测试再到上线所需要的各种环境是不同的,这就需要维护相应的配置文件,比如properties或yml文件.有了配置文件后就要考虑如何与应用进行集成. 对于云环境来讲,项目发布需要打成镜像,再进行部署.如果把spring boot项目连同配置文件(变量)一起打入JAR包并不是一个很好的选择,我们的做法是JAR不包含配置文件,待启动镜像和JAR时将配置文件动态赋值给JAR包. 对于Spring Boot项目,有两种做法可以实现该目的: 1. --spring.config.locati

关于spring boot项目启动报错问题

这次用了spring boot,项目在启动时报错,由于我用的是jdk 1.7 ,该项目默认的是jdk 1.8,所以要把下面这一系列配置改好才行.废话不多说,上图: 一看发现,项目环境没有配全,打开file->Project Structuer,找到Project ,把里面的jdk配置成你自己的. 还有Modules里面的的这几项: 然后找到file->setting-->Java Compiler 里面 这些都配置好才能起动main函数启动服务.

spring boot应用启动原理分析

spring boot quick start 在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web Server. 如果之前没有使用过spring boot可以通过下面的demo来感受下. 下面以这个工程为例,演示如何启动Spring boot项目: git clone [email protected]:hengyunabc/spring-boot-demo.git mvn spring-b

Spring boot 1: 使用IDEA创建Spring boot项目

项目用到的环境: Windows 10 JDK8 IntelliJ IDEA 2017.1.3 Apache Tomcat 8 Maven 3.3.3 使用IDEA新建spring boot项目 新建项目 选择类型为Spring Initializer. 填入相关的项目信息 选择denpendcy 接着下一步, 选择web. 选择路径 再下一步, 选择项目的路径, 点击完成 新建成的项目的文件目录结构如下图: 第一个Spring boot项目 pom.xml如下所示: <dependencies

Spring Boot项目使用maven-assembly-plugin根据不同环境打包成tar.gz或者zip

spring-boot-assembly 在spring boot项目中使用maven profiles和maven assembly插件根据不同环境打包成tar.gz或者zip 将spring boot项目中的配置文件提取到外部config目录中 将spring boot项目中的启动jar包移动到boot目录中 将spring boot项目中的第三方依赖jar包移动到外部lib目录中 bin目录中是启动,停止,重启服务命令 打包后的目录结构类似于tomcat/maven目录结构 GITHUB项

docker部署spring boot项目在服务器上

IDE:idea 工具:docker spring boot:2.0.1 ======================================== 简单记录一下流程,以供参考: 第一步:首先得有一个spring boot的项目[集成了jpa+mybatis的spring boot 例子:https://github.com/AngelSXD/swapping] 第二步:项目打包为jar包 install成功以后 找到项目根目录下的target目录,这里面的jar就是打包好可以部署的jar

idea下新建Spring Boot项目并配置启动

一.操作步骤 ①使用idea新建一个Spring Boot项目 ②修改pom.xml ③修改application.properties ④修改编写一个Hello Spring Boot的Controller ⑤启动项目访问 二.详细步骤 1.File-->New-->Project 2.选择Spring Initializr 然后Next 3.输入Artiface 然后Next 4.勾选Web .模版我们选择官方推荐的Thymeleaf模版引擎,其他框架.中间件.数据库根据需要选择即可,而且

【spring cloud】导入一个新的spring boot项目作为spring cloud的一个子模块微服务,怎么做/或者 每次导入一个新的spring boot项目,IDEA不识别子module,启动类无法启动/右下角没有蓝色图标

如题:导入一个新的spring boot项目作为spring cloud的一个子模块微服务,怎么做 或者说每次导入一个新的spring boot项目,IDEA不识别,启动类无法启动,怎么解决 下面一起来走一遍这个流程: 1.将一个spring boot服务导入spring cloud中作为一个子模块 如图:这里有一个现成的spring cloud微服务集群,[如何创建一个spring cloud微服务:https://www.cnblogs.com/sxdcgaq8080/p/9035724.h