我的应用程序中有一个连接到Oracle数据库的数据源。是否可以通过此数据源访问另一个包含Spring批处理元数据表的模式?此数据源的用户拥有访问其他架构的所有权限。
我已经尝试过JobRepository的“tablePrefix”属性,例如“Schema.batch\u0”。但它不起作用。简单地说,我搜索告诉Spring批处理访问元数据表的方法,如“select….from Schema.batch\u….”不是“从batch\uU4中选择…”。
匿名用户
因为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
我也面临同样的问题,因为我想将应用程序表保存在一个模式中,而将批处理表保存在单独的模式中(使用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,但没有找到为范围指定条件的方法,也没有找到在页脚中共享正文内容以检查长度的方