簡體   English   中英

遷移Spring Boot時找不到Bean參數

[英]Bean parameter could not be found when migrating spring boot

我正在將服務從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 boot版本(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.

我不知道發生了什么,也許由於彈簧啟動中的更改或更改了application.properties文件,我需要添加另一個依賴項。 問題是為什么會這樣? 我應該改變些什么才能使它正常工作?

謝謝!

您沒有定義PlatformTransactionManager bean。 我想你不想自己做。 您必須將spring.kafka.producer.transaction-id-prefix屬性添加到屬性文件,才能將KafkaAutoConfiguration用於PlatformTransactionManager。

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

順便說一下,只要沒有參數,您的CompanyTransactionConfiguration構造函數就是多余的。 如果類中沒有構造函數,編譯器將創建不帶參數的默認構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM