由于找不到任何解决方案,我们遵循了Spring批留档4.3.4 Repository中的非标准数据库类型一节中提供的指南(尽管有限)
https://docs.spring.io/spring-batch/docs/current/reference/html/index-single.html
>
JobRepositoryFactoryBean
扩展JobRepositoryFactoryBeanForHive
实现了SimpleJobRepository
所依赖的各种DAO接口。这样做是为了控制这些DAO实现,因为它们负责将批处理元数据持久化到数据库中。
HiveJdbcJobInstance道
)HiveJdbcJobExecution道
)HiveJdbcStepExecution道
)JdbcHiveExecutionContext道
)Hive不支持序列。作为一种解决方法,创建一个表来添加/增加Id并继续检索每次命中表的最大值
实现了Hive增量工厂
(用于创建Hive增量中心
实现的工厂)和相关的Hive增量中心
(从为序列创建的表中检索下一个值)
修改了JobRepositoryFactoryBeanForHive
中方法的实现,将Types设置为
VARCHAR
。在数据库中,字段SERIALIZED_CONTEXT
已用datatype声明为VARCHAR
,因为Hive不支持CLOB
。最大时,可以存储2 GB。(由于Oracle中的CLOB可以是8 GB,如果每个字段超过2 GB,是否应该创建3个字段来通过拆分来存储上下文)
<bean id="jobRepository" class="com.batch.springutil.JobRepositoryFactoryBeanForHive">
<property name="dataSource" ref="DataSource" />
<property name="databaseType" value="oracle" />
<property name="incrementerFactory" ref="hiveIncrementerFactory" />
<property name="transactionManager" ref="transactionManager" />
<property name="isolationLevelForCreate" value="ISOLATION_DEFAULT" />
</bean>
<bean id="hiveIncrementerFactory" class="com.batch.springutil.HiveIncrementerFactory">
<constructor-arg ref="DataSource" />
</bean>
实现自定义类JsrJobParametersConverterHive
扩展JsrJobParametersConverter
<bean id="jobParametersConverter" class="com.batch.springutil.JsrJobParametersConverterHive">
<constructor-arg ref="BatchDataSource" />
</bean>
根据文档第4.3.4节存储库中的非标准数据库类型:
如果这也不起作用,或者你没有使用RDBMS,那么唯一的选择可能是实现SimpleJobRepository依赖的各种道接口,并以正常的Spring方式手动连接一个。
由于您已经实现了作业存储库所依赖的4个DAO,因此您可以创建一个类型为SimpleJobRepository
的bean并将您的DAO连接到其中。换句话说,不要使用JobRepositoryFactoryBean
并自己创建bean:
@Bean
public SimpleJobRepository hiveJobRepository(
HiveJdbcJobInstanceDao hiveJdbcJobInstanceDao,
HiveJdbcJobExecutionDao hiveJdbcJobExecutionDao,
HiveJdbcStepExecutionDao hiveJdbcStepExecutionDao,
JdbcHiveExecutionContextDao jdbcHiveExecutionContextDao) {
return new SimpleJobRepository(hiveJdbcJobInstanceDao, hiveJdbcJobExecutionDao,
hiveJdbcStepExecutionDao, jdbcHiveExecutionContextDao);
}