[英]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.