首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring + Spring + HSQLDB ->为JobRepository配置HSQLDB

Spring + Spring + HSQLDB ->为JobRepository配置HSQLDB
EN

Stack Overflow用户
提问于 2021-06-25 00:39:03
回答 1查看 743关注 0票数 0

我对春靴很陌生。我试图编写一个应用程序,利用Spring批处理将数据从一个数据库写入另一个数据库。我正在读Mongo的文章,并写到SQL Server。我在内存中托管了我的JobRepository,并已将其编码为使用HSQLDB。

我在将Spring.Batch指向适当的数据源时遇到了一些问题,所以我现在的重点是确保将我的工作写到HSQLDB。为了做到这一点,我现在基本上已经将SQL注释掉了。

我有以下BatchConfiguration类:

代码语言:javascript
复制
@Configuration
@EnableBatchProcessing
public class BatchConfigurer extends DefaultBatchConfigurer {

    @Autowired
    @Qualifier("batchDataSource")
    public DataSource batchDataSource;

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }


    @Bean
    public JdbcTransactionManager batchTransactionManager() {
        final JdbcTransactionManager transactionManager = new JdbcTransactionManager();
        transactionManager.setDataSource(batchDataSource);
        return transactionManager;
    }


    @Bean
    public JobRepository jobRepositoryBean() throws Exception {
        JobRepositoryFactoryBean fb = new JobRepositoryFactoryBean();
        fb.setDatabaseType("HSQL");
        fb.setDataSource(batchDataSource);
        fb.setTransactionManager(batchTransactionManager());
        return fb.getObject();
    }


    @Override
    @Bean
    protected JobLauncher createJobLauncher() throws Exception {
        SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
        jobLauncher.setJobRepository(this.jobRepositoryBean());
        jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
        jobLauncher.afterPropertiesSet();
        return jobLauncher;
    }

}

当我加载这个类时,我在日志中看到以下输出:

2021-06-24 17:18:42.412警告31940 -主o.s.b.c.c.a.DefaultBatchConfigurer :没有提供事务管理器,使用DataSourceTransactionManager 2021-06-24 17:18:42.419 INFO 31940 -主o.s.b.c.r.s.JobRepositoryFactoryBean :没有数据库类型集,使用元数据指示: HSQL 2021-06-24 17:18:43.154警告31940 --主JpaBaseConfiguration$JpaWebConfiguration :Spring.jpa.open-in默认启用。因此,可以在视图呈现期间执行数据库查询。显式配置spring.jpa.open-in-view以禁用此警告

我试图理解为什么要推断数据库类型。看来我已经把它设置好了。此外,当我取消对其他数据源的注释时,推断的类型是SQLSERVER,这是错误的。我是否不正确地初始化和设置此数据类型的配置?

我想,在再次处理多个数据源的情况之前,我应该努力让它正常工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-25 12:22:29

仅仅将TransactionManagerJobRepository声明为bean是不够的,Spring批处理也不会考虑到这一点。您需要为此提供一个BatchConfigurer。由于使配置类扩展了DefaultBatchConfigurer,所以可以重写getTransactionManagergetJobRepository,如下所示:

代码语言:javascript
复制
@Configuration
@EnableBatchProcessing
public class BatchConfigurer extends DefaultBatchConfigurer {

    @Autowired
    @Qualifier("batchDataSource") // ensure this is the HSQLDB here
    public DataSource batchDataSource;


    @Override
    public JdbcTransactionManager getTransactionManager() {
        final JdbcTransactionManager transactionManager = new JdbcTransactionManager();
        transactionManager.setDataSource(batchDataSource);
        return transactionManager;
    }


    @Override
    public JobRepository getJobRepository() throws Exception {
        JobRepositoryFactoryBean fb = new JobRepositoryFactoryBean();
        fb.setDatabaseType("HSQL");
        fb.setDataSource(batchDataSource);
        fb.setTransactionManager(getTransactionManager());
        return fb.getObject();
    }


    @Override
    public JobLauncher getJobLauncher() throws Exception {
        SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
        jobLauncher.setJobRepository(this.jobRepositoryBean());
        jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
        jobLauncher.afterPropertiesSet();
        return jobLauncher;
    }

}

在这里的参考文档中解释了这一点:Java Config

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68124140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档