开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

springboot 整合flinkcdc 怎么启动多个job

有很多需要同步的数据,数据源和具体表都不一样,所以写了很多同步job,但启动springboot的话似乎只起了第一个job1697360889383.jpg

展开
收起
游客xjjehcayqor4u 2023-10-15 17:09:13 415 0
2 条回答
写回答
取消 提交回答
  • 这个问题可能是由于Spring Boot的默认配置导致的。在Spring Boot中,只有一个线程来处理异步任务。如果你有多个同步任务需要执行,你需要为每个任务创建一个独立的线程或者使用线程池来处理这些任务。

    你可以尝试以下方法来解决这个问题:

    1 使用@Async注解:在你的同步任务方法上添加@Async注解,这样Spring Boot会自动为这个方法创建一个新线程来执行。但是请注意,这种方法可能会导致性能问题,因为每个任务都会创建一个新的线程。

    import org.springframework.scheduling.annotation.Async;
    
    @Service
    public class SyncService {
    
        @Async
        public void syncData() {
            // 你的同步任务代码
        }
    }
    

    2 使用ThreadPoolTaskExecutor:创建一个自定义的线程池,并将同步任务提交给这个线程池来执行。这样可以确保每个任务都在一个独立的线程中执行。

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    
    import java.util.concurrent.Executor;
    
    @Configuration
    public class SyncConfig {
    
        @Bean
        public Executor taskExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            executor.setCorePoolSize(5); // 设置核心线程数
            executor.setMaxPoolSize(10); // 设置最大线程数
            executor.setQueueCapacity(25); // 设置队列容量
            executor.setThreadNamePrefix("Sync-"); // 设置线程名前缀
            executor.initialize();
            return executor;
        }
    }
    

    然后在你的同步任务类中使用这个线程池来执行任务:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    
    @Service
    public class SyncService {
    
        @Autowired
        private ThreadPoolTaskExecutor taskExecutor;
    
        @Transactional(rollbackFor = Exception.class)
        public void syncData() {
            taskExecutor.execute(() -> {
                // 你的同步任务代码
            });
        }
    }
    

    通过以上方法,你应该可以解决Spring Boot只启动第一个同步任务的问题。

    2023-10-31 19:47:17
    赞同 展开评论 打赏
  • 在SpringBoot中整合Flink CDC并启动多个Job,你可以参考以下几个步骤:

    • 在你的SpringBoot项目中,引入Flink CDC的相关依赖,例如flink-connector-mysql-cdc,flink-clients等。
    • 在你的SpringBoot项目中,定义一个或多个实现了ApplicationRunner接口的类,用于创建和执行Flink CDC的任务。
    • 在每个类中,重写run方法,使用StreamExecutionEnvironment和TableEnvironment来构建Flink CDC的数据流和表。
    • 在每个类中,使用@ConditionalOnProperty注解来控制是否启动该类对应的任务,可以通过配置文件或者环境变量来设置。
    • 在每个类中,使用Thread类来异步执行execute方法,避免阻塞SpringBoot的启动过程。
    2023-10-16 16:43:40
    赞同 1 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多