2017-04-24 44 views
0

我有一個java spring應用程序使用它的postgres數據庫,這是沒有問題的。但我也有一個每小時運行一次的石英工作,並將其他MySQL DS中的數據與postgres同步。問題是JDBC連接字符串是動態的並且正在更改,我不能只在systemstartup中指定它等。如何優雅地執行該操作?我的意思是採取jdbc連接字符串,連接到數據庫並從那裏檢索數據?我也在那裏使用spring-data。java spring連接到mysql數據庫(不是JNDI池或系統數據源!)

回答

1

一個可能的解決方案是使用spring batch @JobScope beans並讓你的石英工作啓動spring批處理作業。

您可以將數據源配置爲擁有@JobScope,然後每次執行作業時都會讓spring創建該數據源。然後,您可以使用作業參數或其他變量來創建所需的特定數據源。創建如下數據源的配置類的示例如下所示...

@Configuration 
public class JobDatabaseConfiguration { 

    @Bean 
    @JobScope 
    public DataSource jobDataSource() throws IOException { 

     // set these from job parameters... 
     String jdbcUrl = "<your jdbc url>"; 
     String driver = "<your driver>"; 
     String user = "user"; 
     String password = "password"; 

     return DataSourceBuilder.create() 
      .driverClassName(driver) 
      .url(jdbcUrl) 
      .username(user) 
      .password(password) 
      build(); 
    } 
}