Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2.6.0使用demo样例代码无法启动,报各种错 #4

Open
qinxingnet opened this issue Sep 7, 2022 · 3 comments
Open

2.6.0使用demo样例代码无法启动,报各种错 #4

qinxingnet opened this issue Sep 7, 2022 · 3 comments

Comments

@qinxingnet
Copy link

qinxingnet commented Sep 7, 2022

spring boot 2.6.0 按你给到的版本运行sample时:

Description:

Parameter 2 of method disruptor in com.lmax.disruptor.spring.boot.DisruptorAutoConfiguration required a single bean, but 2 were found:
	- applicationTaskExecutor: defined by method 'applicationTaskExecutor' in class path resource [org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.class]
	- taskScheduler: defined by method 'taskScheduler' in class path resource [org/springframework/boot/autoconfigure/task/TaskSchedulingAutoConfiguration.class]

按程序提示手动加入:

 @Primary
    @Bean(
            name = {"applicationTaskExecutor", "taskExecutor"}
    )
    @ConditionalOnMissingBean({Executor.class})
    public ThreadPoolTaskExecutor applicationTaskExecutor(TaskExecutorBuilder builder) {
        return builder.build();
    }

又报错:

***************************
APPLICATION FAILED TO START
***************************

Description:

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

┌─────┐
|  disruptorConfig (field protected com.lmax.disruptor.dsl.Disruptor com.lmax.disruptor.spring.boot.config.DisruptorConfig.disruptor)
↑     ↓
|  disruptor defined in class path resource [com/lmax/disruptor/spring/boot/DisruptorAutoConfiguration.class]
└─────┘

于是关掉循环依赖:

  main:
    allow-circular-references: true
    allow-bean-definition-overriding: true

还是报错:

org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'disruptorConfig': Bean with name 'disruptorConfig' has been injected into other beans [applicationTaskExecutor] 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 'getBeanNamesForType' with the 'allowEagerInit' flag turned off, for example.

请问哥们是怎么跑起来的?我试了半天都不行?

@hiwepy
Copy link
Owner

hiwepy commented Sep 7, 2022 via email

@dyrnq
Copy link

dyrnq commented Jan 4, 2024

@qinxingnet
改两个地方可以,

	@Bean()
	@ConditionalOnMissingBean(name="disruptorThreadFactory")
	public ThreadFactory disruptorThreadFactory() {
		return new DisruptorEventThreadFactory();
	}


	@Bean
	@ConditionalOnClass({ Disruptor.class })
	@ConditionalOnProperty(prefix = DisruptorProperties.PREFIX, value = "enabled", havingValue = "true")
	public Disruptor<DisruptorEvent> disruptor(
			DisruptorProperties properties, 
			WaitStrategy waitStrategy,
			@Qualifier("disruptorThreadFactory")
			ThreadFactory threadFactory, 
			EventFactory<DisruptorEvent> eventFactory,
			@Qualifier("disruptorEventHandlers") 
			List<DisruptorEventDispatcher> disruptorEventHandlers) {


由于 @ConditionalOnMissingBean 啥也不写,默认是按照接口来判断的,所以这边没有创建,但是那边会有俩提供者 "applicationTaskExecutor", "taskExecutor"
参考 https://blog.csdn.net/killerofjava/article/details/104515684

@dyrnq
Copy link

dyrnq commented Jan 4, 2024

@hiwepy 多谢回复,我看和这个issues重复了,在这里写了下我的修改之处,不知道对不对,请大佬指正。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants