• SpringBatch适配不同数据库的两种方法


    一、配置JobRepository

    @Configuration
    @EnableBatchProcessing
    public class TaskArrangeConfig extends DefaultBatchConfigurer {
    
        @Autowired
        private DataSource dataSource;
    
        @Autowired
        private JobLauncher jobLauncher;
    
        @Autowired
        private JobExplorer jobExplorer;
    
        @Autowired
        private JobRegistry jobRegistry;
    
        @Autowired
        private JobRepository jobRepository;
    
        @Autowired
        MapperConfig MapperConfig;
    
    
        @Bean
        public DataSourceTransactionManager transactionManager() {
            return new DataSourceTransactionManager(dataSource);
        }
    
    
        @Override
        protected JobRepository createJobRepository() throws Exception {
            JobRepositoryFactoryBean factoryBean = new JobRepositoryFactoryBean();
            if(MapperConfig.getDbType().equals(JDialectConsts.ORACLE) || MapperConfig.getDbType().equals(JDialectConsts.DAMENG)){
                factoryBean.setDatabaseType(DatabaseType.ORACLE.name());
            }else if(MapperConfig.getDbType().equals(JDialectConsts.MYSQL)){
                factoryBean.setDatabaseType(DatabaseType.MYSQL.name());
            }else {
                factoryBean.setDatabaseType(DatabaseType.H2.name());
            }
            factoryBean.setDataSource(dataSource);
            factoryBean.setTransactionManager(transactionManager());
            return factoryBean.getObject();
        }
    
        @Bean
        public JobOperator jobOperator(){
            SimpleJobOperator simpleJobOperator=new SimpleJobOperator();
            simpleJobOperator.setJobLauncher(jobLauncher);
            simpleJobOperator.setJobParametersConverter(new DefaultJobParametersConverter());
            simpleJobOperator.setJobRegistry(jobRegistry);
            simpleJobOperator.setJobExplorer(jobExplorer);
            simpleJobOperator.setJobRepository(jobRepository);
            return simpleJobOperator;
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    二、覆盖batch下support包中的类 (以达梦数据库为例)

    修改 DefaultDataFieldMaxValueIncrementerFactory

    getIncrementer 中添加DbType 在这里插入图片描述
    DatabaseType 类添加数据库

    public enum DatabaseType {
    
        DERBY("Apache Derby"),
        DB2("DB2"),
        DB2VSE("DB2VSE"),
        DB2ZOS("DB2ZOS"),
        DB2AS400("DB2AS400"),
        HSQL("HSQL Database Engine"),
        SQLSERVER("Microsoft SQL Server"),
        MYSQL("MySQL"),
        ORACLE("Oracle"),
        POSTGRES("PostgreSQL"),
        SYBASE("Sybase"),
        H2("H2"),
        SQLITE("SQLite"),
        DM("DM DBMS");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    DatabaseDriver 添加达梦驱动信息

      DM("DM DBMS","dm.jdbc.driver.DmDriver","dm.jdbc.driver.DmdbXADataSource","SELECT 'Hello' from DUAL"){
            @Override
            public String getId() {
                return "oracle";
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意: 方法二需要创建同名类且包名相同放在SpringBoot启动类所在的同级目录

  • 相关阅读:
    2023.8.13百度之星(第二场)第一题官方题解注释说明
    基于PHP+MySQL保险理赔系统的设计与实现
    ChatGPT作者John Schulman:通往TruthGPT之路
    springcloud小说阅读网站源码
    【经验】通过跳板机远程连接内网服务器的相关配置
    oracle学习64-oracle之数据处理之其他数据库对象
    Codeforces Round #811 (Div. 3)
    deepfm内容理解
    比 Nginx 性能更强的下一代 Web 服务器
    一个使用typescript实现的excel转json的工具
  • 原文地址:https://blog.csdn.net/luomo0203/article/details/133649874