Исключение: org.springframework.beans.factory.BeanCurrentlyInCreationException - PullRequest
0 голосов
/ 12 января 2020

Я хочу иметь аннотацию по расписанию для абстрактного класса, чтобы у дочерних классов не было аннотаций. Нечто похожее на это в абстрактном классе

@EnableScheduling
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

public abstract class AbstractTestClass {

    @Bean
    public String getDelay() {
        return "1000";
    }

    @Scheduled(fixedRateString = "#{@getDelay}")
    public void callScheduledMethod() {
        getZeroBytesFile();
    }

    public abstract void getZeroBytesFile();
}

@Component
public class ChildClass extends AbstractTestClass {

    @Override
    public String getDelay() {
        return "5000";
    }

    @Override
    public void getZeroBytesFile() {
        System.out.println("called");
    }

}

@Component
public class OtherClass {

    // This bean initialisation throws error
    @AutoWired ChildClass childClass;

}

Но это не работает и выдает это исключение


org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'getDelay': Requested bean is currently in creation: Is there an unresolvable circular reference?

Любой указатель будет полезен. Заранее спасибо

1 Ответ

2 голосов
/ 12 января 2020

это трюк для достижения этой цели:

@EnableScheduling
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

public abstract class AbstractTestClass {

    @Bean
    public String getDelay() {
        return "1000";
    }

    @Scheduled(fixedRateString = "#{@getDelay}")
    public void callScheduledMethod() {
        getZeroBytesFile();
    }

    public abstract void getZeroBytesFile();
}

@Component
public class ChildClass extends AbstractTestClass {

    @Override
    public String getDelay() {
        return "5000";
    }

    @Override
    public void getZeroBytesFile() {
        System.out.println("called");
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...