2016-11-19 17 views
1

當我在我的彈簧雲任務應用程序中定義多個數據源時,它會引發異常。這就是我定義我見過的建議把@Primary的數據源獲取異常'java.lang.IllegalStateException:當一個以上的數據源定義時期望一個數據源並找到2'

@Primary 
@Bean(name="datasource1") 
@ConfigurationProperties(prefix="spring.datasource") 
public javax.sql.DataSource primaryDataSource() { 
    return DataSourceBuilder.create().build(); 
} 

@Bean(name="datasource2") 
@ConfigurationProperties(prefix="spring.datasource1") 
public javax.sql.DataSource primaryDataSource1() { 
    return DataSourceBuilder.create().build(); 
} 

@Bean 
public TaskConfigurer taskConfigurer() { 
    return new DefaultTaskConfigurer(primaryDataSource()); 
} 

,定義TaskConfigurer上面一樣,但他們都不是working.Has任何一個面臨這樣的問題?

感謝, 尼爾

+0

如何使用配置文件? – emotionlessbananas

+0

嗨飛殭屍,感謝您的迴應。即使我使用配置文件,我需要在所有配置文件中都有數據源。所以,我猜想問題仍然會出現。不知道雖然 – Neel

+0

你能顯示拋出的異常嗎? –

回答

2

你將需要重寫監聽器。就像任務周圍的其他autoconfig一樣,當你定義了多個數據源時,它不知道使用哪個數據源。我在未來版本中創建了一個問題來解決此問題:https://github.com/spring-cloud/spring-cloud-task/issues/252

+0

感謝Michael的迴應。我是否需要重寫偵聽器TaskBatchExecutionListener和TaskBeanExecutionListener。如果是這種情況,您能否提供關於如何創建這些配置的說明或指導文檔? – Neel

+0

我不熟悉'TaskBeanExecutionListener'。如果你的意思是'TaskLifecycleListener',否。您可以使用「TaskConfigurer」來解決該問題的配置。上述問題的解決方案實際上是使用'TaskConfigurer'來配置'TaskBatchExecutionListener'。 –

+0

您可以讓我知道我如何使用DefaultTaskConfigurer配置TaskBatchExecutionListener的步驟。內部TaskBatchExecutionListener使用TaskBatchDao,JdbcTaskBatchDao,我需要手動提供數據源來創建這些bean。謝謝 – Neel

相關問題