迁移spring引导时找不到Bean参数

问题描述 投票:0回答:1

我正在将服务从spring boot 1.5迁移到spring boot 2.1,我在这个过程中遇到了错误。我有以下类来配置我的spring bean:

@Configuration
public class CompanyTransactionConfiguration {
    public CompanyTransactionConfiguration() {
    }

    @Bean
    public TransactionTaskRunner transactionTaskRunner(PlatformTransactionManager transactionManager) {
        return new TransactionTaskRunnerImpl(this.readWriteTransactionTemplate(transactionManager), this.readOnlyTransactionTemplate(transactionManager), this.newReadWriteTransactionTemplate(transactionManager));
    }
}

当然还有一个测试类来检查一切是否按预期工作:

@RunWith(SpringRunner.class)
public class ReferrerActivityRepositoryIT extends AbstractDomainIT {

    @Autowired
    private ReferrerActivityRepository referrerActivityRepository;

    @Autowired
    private TransactionTaskRunner transactionTaskRunner;

    ...
}

问题是,在我将依赖项更改为较新的spring引导版本(2.1)后,此测试工作正常,但现在我收到以下错误:

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

Description:

Parameter 0 of method transactionTaskRunner in com.company.core.server.config.CompanyTransactionConfiguration required a bean of type 'org.springframework.transaction.PlatformTransactionManager' that could not be found.

The following candidates were found but could not be injected:
    - Bean method 'transactionManager' in 'DataSourceTransactionManagerAutoConfiguration.DataSourceTransactionManagerConfiguration' not loaded because @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) did not find any beans
    - Bean method 'kafkaTransactionManager' in 'KafkaAutoConfiguration' not loaded because @ConditionalOnProperty (spring.kafka.producer.transaction-id-prefix) did not find property 'spring.kafka.producer.transaction-id-prefix' 

...


Action:

Consider revisiting the entries above or defining a bean of type 'org.springframework.transaction.PlatformTransactionManager' in your configuration.

我不知道发生了什么,也许我需要添加另一个依赖,因为spring boot的更改或更改我的application.properties文件。问题是为什么会发生这种情况?为了让这个工作,我应该改变什么?

谢谢!

java spring spring-boot
1个回答
1
投票

你没有定义PlatformTransactionManager bean。我假设你不想自己做。您必须将spring.kafka.producer.transaction-id-prefix属性添加到属性文件才能使用PlatformTransactionManager的KafkaAutoConfiguration。

  • 未加载'KafkaAutoConfiguration'中的Bean方法'kafkaTransactionManager',因为@ConditionalOnProperty(spring.kafka.producer.transaction-id-prefix)找不到属性spring.kafka.producer.transaction-id-prefix

顺便说一下,只要没有参数,你的CompanyTransactionConfiguration构造函数就是多余的。如果类中没有构造函数,编译器将创建没有参数的默认构造函数。

© www.soinside.com 2019 - 2024. All rights reserved.