2017-04-24 65 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(); 
    } 
}