当前位置: 首页 > 知识库问答 >
问题:

不同模式中的Spring批处理元数据表

蓬新
2023-03-14

我的应用程序中有一个连接到Oracle数据库的数据源。是否可以通过此数据源访问另一个包含Spring批处理元数据表的模式?此数据源的用户拥有访问其他架构的所有权限。

我已经尝试过JobRepository的“tablePrefix”属性,例如“Schema.batch\u0”。但它不起作用。简单地说,我搜索告诉Spring批处理访问元数据表的方法,如“select….from Schema.batch\u….”不是“从batch\uU4中选择…”。

共有2个答案

澹台啸
2023-03-14
匿名用户

因为Spring。一批表格前缀=

生成表的sql-Script是静态的(至少在4.2.2版和Postgresql中是这样)。因此,难怪spring.batch.table前缀不起作用。至少在我的情况下,因为数据库中还不存在表。

为了修复它,我复制了模式postgresql。sql,并根据我的需要修改它(创建架构并显式引用它)。

CREATE SCHEMA SPRING_BATCH;

CREATE TABLE SPRING_BATCH.BATCH_JOB_INSTANCE  (
    JOB_INSTANCE_ID BIGINT  NOT NULL PRIMARY KEY ,
    -- and so on 

在我的application.properties中我添加了:

spring.batch.initialize-schema=always
spring.batch.table-prefix=SPRING_BATCH.BATCH_
spring.batch.schema=classpath:db/create_spring_batch_tables.sql

夹谷山
2023-03-14

我也面临同样的问题,因为我想将应用程序表保存在一个模式中,而将批处理表保存在单独的模式中(使用postgres)。

tablePrefix对我也不起作用(我尝试了不同的案例,但都没有解决问题)。

所以最后我决定为Spring批处理配置一个单独的数据源,指向一个批处理模式。我是这样做的。

正在应用中。属性文件我有标准的道具,比如spring。数据源* 作为主要数据源用于应用程序。

还有像Spring这样的道具。一批数据源* 是非标准的,是仅在下面提供的代码中使用的辅助数据源。

以下是application.properties文件的示例:

spring.datasource.url=APP_DB_CONNECTION_URL
spring.datasource.username=APP_DB_USER
spring.datasource.password=APP_DB_PASS

spring.batch.datasource.url=BATCH_DB_CONNECTION_URL
spring.batch.datasource.username=BATCH_DB_USER
spring.batch.datasource.password=BATCH_DB_PASS

然后在BatchConfiguration.java这是应用程序源代码的一部分,我添加了getBatchDataSource方法,该方法读取spring.batch.datasource.*属性:

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {

  @Bean
  @ConfigurationProperties(prefix="spring.batch.datasource")
  public DataSource getBatchDataSource(){
    return DataSourceBuilder.create().build();
  }

  ...

}

这使得Spring批处理使用一个单独的数据源。

现在重要的是正确设置spring.batch.datasource.*

对于Postgres 9.4,您可以使用当前模式参数在连接URL中指定模式:jdbc: postgresql://host: port/db?当前模式=批处理

对于9.4之前的Postgres,可以使用参数jdbc:p在连接URL中指定模式ostgresql://host:port/db?searchpath=batch

或者,您可以为模式创建一个单独的postgres用户/角色,并为该用户设置搜索路径:ALTER user batch\u DB\u user SET search\u path to“batch”

在Oracle中,每个用户都有自己的模式(据我所知),无法像postgres那样在连接URL中设置模式(我可能错了):jdbc:Oracle:thin:@//host:port/sid

因此,您需要为Oracle中的批处理模式创建一个单独的用户。另一种方法是使用Spring。一批数据源。验证查询=ALTER SESSION SET CURRENT\u SCHEMA=批处理(我没有尝试此操作)

因此,通过这种方式,Spring批处理使用一个单独的数据源,配置为使用专用的批处理模式。批处理查询看起来仍然像选择。。。来自batch\uux

此解决方案使用Spring Boot v1.2.5进行了测试。发布和Postgres 9.4.1

希望这有帮助。

 类似资料:
  • 我想使用不同的模式来保存Spring批处理表。我可以在<code>JobRepositoryFactoryBean<code>中看到我的新数据源。但这些表仍然是在另一个shcema中创建的,在那里我有业务表。我在这里读到了可以使用<code>数据源的soemwhere。setValidationQuery来更改模式,但仍然不起作用。我能解决这个问题。下面是<code>JobRepositoryFa

  • 现在我的问题是 < li >如何更改相应的Job和JobInstance JAVA类以及所有相关的CRUD以反映上述更改。我假设我需要扩展Job和JobInstance的新类,比如AppJob和AppJobInstance。还要扩展JobInstanceDao,比如AppJobInstanceDao。然后将其挂接到JPA存储库等。,我需要扩展JobRepositoryFactoryBean,主要是

  • 在我的Spring Boot应用程序中,我喜欢使用带有特定模式的Spring Batch元表。留档建议使用表前缀。 我尝试将添加到属性文件中。我还尝试覆盖配置: 但我总是得到错误:由:org引起。h2。jdbc。JdbcSQLException:未找到表“批处理作业实例”;SQL语句:从批处理作业实例中选择作业实例ID、作业名称,其中作业名称=?而JOB_KEY=?[42102-182]

  • 我正在编写Spring批的Spring Boot应用程序,其中ItemReader从Oracle数据库读取数据并将数据写入postgres sql,但我得到了以下错误 我不想创建spring批处理元数据表,我的应用程序不需要监视作业,请就此向我提出建议。提前谢谢!!

  • 我正在使用以下技术编写批处理:Spring Boot来运行应用程序:V1.5.3。RELEASE Spring Batch with Spring Batch Config: spring-batch-架构体系V3.0.7。将我的通用DAO的Spring Data发布到业务数据库: 我想在另一个数据库中写入元数据(例如在内存HSQL或H2中),但我找不到方法,因为上下文正在同一个数据库中写入元数据

  • 我有一个场景,文件有不同的类型。文件分为页眉、正文和页脚三部分。标题可以是2类型dipend,根据标题大小,我需要使用标记器和范围来解析内容。 页脚也一样,这取决于正文大小和页脚长度,需要解析页脚内容。 我查看了PatternMatchingCompositeLineMapper和fixedlenghttokenizer,但没有找到为范围指定条件的方法,也没有找到在页脚中共享正文内容以检查长度的方