java - BeanCurrentlyInCreationException Spring Boot

标签 java spring spring-boot jetty

我该如何解决这个异常?

没有 Spring Boot 一切正常。

所以问题出在“应用”部分,对吗?

捕获异常

BeanCurrentlyInCreationException: Error creating bean with name 'pooledConnectionFactory': 
Requested bean is currently in creation: Is there an unresolvable circular reference?

应用

@ComponentScan
@EnableAutoConfiguration
@ImportResource("classpath:contexts/bean-locations.xml")
public class MyApp{
public static void main(String[] args) throws Exception {
    new SpringApplication(MyApp.class).run(args);
}
}

通过导入使用 Bean

<import resource="classpath*:contexts/database/datasource/base-data-source.xml"/>
<import resource="classpath*:contexts/database/datasource/pooled-data-source.xml"/>

导入的第一个文件:

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://www.springframework.org/schema/beans"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">
<bean id="baseDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${connection.driverClassName}"/>
    <property name="username" value="${connection.userName}"/>
    <property name="password" value="${connection.password}"/>
    <property name="url" value="${connection.url}"/>
</bean>

导入的第二个文件:

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://www.springframework.org/schema/beans"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">
<bean id="pool" class="org.apache.commons.pool.impl.GenericObjectPool">
    <property name="minEvictableIdleTimeMillis"><value>300000</value></property>
    <property name="timeBetweenEvictionRunsMillis"><value>60000</value></property>
</bean>

<bean id="dataSourceConnectionFactory" class="org.apache.commons.dbcp.DataSourceConnectionFactory">
    <constructor-arg><ref bean="baseDataSource"/></constructor-arg>
</bean>

<bean id="pooledConnectionFactory" class="org.apache.commons.dbcp.PoolableConnectionFactory">
    <constructor-arg index="0"><ref bean="dataSourceConnectionFactory"/></constructor-arg>
    <constructor-arg index="1"><ref bean="pool"/></constructor-arg>
    <constructor-arg index="2"><null/></constructor-arg>
    <constructor-arg index="3"><null/></constructor-arg>
    <constructor-arg index="4"><value>false</value></constructor-arg>
    <constructor-arg index="5"><value>true</value></constructor-arg>
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.PoolingDataSource"
      depends-on="pooledConnectionFactory">
    <constructor-arg><ref bean="pool"/></constructor-arg>
</bean>

最佳答案

Spring Boot 有 Database initialization与您的 DataSource 配置冲突的功能。请参见 DataSourceInitializer 类。它试图在创建之前获取数据源。

要修复您的应用,您可以

  1. 使用属性禁用初始化器

    spring.datasource.initialize=false
    
  2. 排除数据源自动配置,因为您有自己的配置

    @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
    

关于java - BeanCurrentlyInCreationException Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36341883/

相关文章:

java - Spring Fox Swagger - 有没有办法为不属于项目的 API 添加文档

java - 如何使用 split string() 在 GUI 中为科学计算器的等号按钮编写代码?

Spring 模型对象未渲染

spring - 如何在访问部署在 Tomcat 上的 restful spring-boot 应用程序时修复此 IlleagalstateException?

java - 使用 Spring Cloud Stream 将 RabbitMQ 消费者绑定(bind)到现有队列

java - Spring 1.5.9 升级到 2.0.1 后出现错误 : cannot find symbol Logger logger = Logger. getLogger(this.getClass().getName())

tomcat - 为什么 Logback-spring 在具有多个服务的 tc-server 上记录到错误的文件位置?

java - 在 JBoss 6 上使用 hibernate-validator 时出错

java - 从 super 类数组中作为子类传递

java - Spring 表单验证中不显示给定的错误消息