使用自己的数据库配置 Spring 云数据流任务
Configuring a Spring Cloud Data Flow Task with its own Database
我有一个任务应用程序,它有自己的数据库,我想 运行 在 Spring 云数据流中。
我的问题是 SCDF 使用 SCDF 的数据源配置覆盖了任务中的数据源配置。 (两个数据库都是 Oracle 数据库。)
我的任务应该写入不同的数据库(但我也想知道它在 SCDF 数据库中的状态)。
如何配置我的任务以连接到它自己的数据库以及 SCDF 的数据库?
我找到了解决方案。
我在配置 class 中定义了两个数据源(一个用于 JPA,一个用于 SCDF),例如:https://www.baeldung.com/spring-data-jpa-multiple-databases
但这还不够,因为数据流服务器默认只接受一个数据源。为了克服这个问题,需要扩展 DefaultTaskConfigurer
并在构造函数中设置数据流服务器的数据源。
@Component
public class GeneratorTaskConfigurer extends DefaultTaskConfigurer {
public GeneratorTaskConfigurer(@Qualifier("dataflowDataSource") DataSource dataSource) {
super(dataSource);
}
}
您可以使用这样的 SCDF 数据源代码进行配置 class
@Configuration
@Profile("cloud")
public class MySqlConfiguration {
@Bean
public Cloud cloud() {
return new CloudFactory().getCloud();
}
@Bean
@Primary
public DataSource dataSource() {
return cloud().getSingletonServiceConnector(DataSource.class, null);
}
@Bean
@Primary
public PlatformTransactionManager getTransactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean
public JobRepository jobRepositoryFactoryBean() throws Exception{
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setDataSource(dataSource());
factory.setTransactionManager(getTransactionManager());
factory.afterPropertiesSet();
return factory.getObject();
}
@Bean
@Primary
public DefaultTaskConfigurer defaultTaskConfigurer() {
return new DefaultTaskConfigurer(dataSource());
}
}
然后将您的其他数据源配置放在单独的 class 中,用于您要写入的数据库。
确保将 SCDF 标记为 @Primary,否则会出现多数据源错误。
希望对您有所帮助。
我有一个任务应用程序,它有自己的数据库,我想 运行 在 Spring 云数据流中。
我的问题是 SCDF 使用 SCDF 的数据源配置覆盖了任务中的数据源配置。 (两个数据库都是 Oracle 数据库。)
我的任务应该写入不同的数据库(但我也想知道它在 SCDF 数据库中的状态)。
如何配置我的任务以连接到它自己的数据库以及 SCDF 的数据库?
我找到了解决方案。
我在配置 class 中定义了两个数据源(一个用于 JPA,一个用于 SCDF),例如:https://www.baeldung.com/spring-data-jpa-multiple-databases
但这还不够,因为数据流服务器默认只接受一个数据源。为了克服这个问题,需要扩展 DefaultTaskConfigurer
并在构造函数中设置数据流服务器的数据源。
@Component
public class GeneratorTaskConfigurer extends DefaultTaskConfigurer {
public GeneratorTaskConfigurer(@Qualifier("dataflowDataSource") DataSource dataSource) {
super(dataSource);
}
}
您可以使用这样的 SCDF 数据源代码进行配置 class
@Configuration
@Profile("cloud")
public class MySqlConfiguration {
@Bean
public Cloud cloud() {
return new CloudFactory().getCloud();
}
@Bean
@Primary
public DataSource dataSource() {
return cloud().getSingletonServiceConnector(DataSource.class, null);
}
@Bean
@Primary
public PlatformTransactionManager getTransactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean
public JobRepository jobRepositoryFactoryBean() throws Exception{
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setDataSource(dataSource());
factory.setTransactionManager(getTransactionManager());
factory.afterPropertiesSet();
return factory.getObject();
}
@Bean
@Primary
public DefaultTaskConfigurer defaultTaskConfigurer() {
return new DefaultTaskConfigurer(dataSource());
}
}
然后将您的其他数据源配置放在单独的 class 中,用于您要写入的数据库。 确保将 SCDF 标记为 @Primary,否则会出现多数据源错误。
希望对您有所帮助。