我已经通过以Spring Batch Talk作为参考来处理一个Spring Batch Admin示例。该示例以我想要的方式完美运行。使用兔子服务器,我已经在主服务器和从服务器之间建立了通信。但是我怎么能知道哪个分区在主服务器中运行,哪个在从服务器中运行。有没有机会从Spring Batch AdminUI查看它。
在ColumnRangePartitioner
中进行分区时,我又向ExecutionContext添加了一个值partitionId。
value.putLong("minValue", start);
value.putLong("maxValue", end);
value.putLong("partitionId", number);
我在TARGET中添加了一个名为分区信息的新列,它存储了详细信息,例如在哪个分区中扫描了哪个端口。在读取端口时,我显式添加了值。
<bean id="targetItemReader" class="org.springframework.batch.item.database.JdbcPagingItemReader" scope="step">
<property name="dataSource" ref="dataSource" />
<property name="queryProvider">
<bean
class="org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="selectClause" value="ID, IP, PORT, CONNECTED, BANNER, :partitionId as PARTITIONINFO" />
<property name="fromClause" value="FROM TARGET" />
<property name="whereClause" value="ID >= :minId AND ID <= :maxId AND CONNECTED IS NULL"/>
<property name="sortKey" value="ID" />
</bean>
</property>
<property name="pageSize" value="10" />
<property name="parameterValues">
<map>
<entry key="minId" value="#{stepExecutionContext[minValue]}"/>
<entry key="maxId" value="#{stepExecutionContext[maxValue]}"/>
<entry key="partitionId" value="#{stepExecutionContext[partitionId]}" />
</map>
</property>
<property name="rowMapper">
<bean class="com.michaelminella.springbatch.domain.TargetRowMapper"/>
</property>
</bean>
后来,我在最后运行了更新查询,并将详细信息保存在表中。
<bean id="targetWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
<property name="assertUpdates" value="true" />
<property name="itemSqlParameterSourceProvider">
<bean class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" />
</property>
<property name="sql" value="UPDATE TARGET SET CONNECTED = :connected, BANNER = :banner, PARTITIONINFO = :partitionId WHERE ID = :id" />
<property name="dataSource" ref="dataSource" />
</bean>
我已将新变量添加到存储分区ID信息的Target bean。
private int partitionId;
public int getPartitionId() {
return partitionId;
}
public void setPartitionId(int partitionId) {
this.partitionId = partitionId;
}
DB在business-schema-mysql.sql
中的更改
DROP TABLE IF EXISTS TARGET;
CREATE TABLE TARGET (
ID BIGINT NOT NULL PRIMARY KEY ,
IP VARCHAR(15) NOT NULL,
PORT INT NOT NULL,
CONNECTED BOOLEAN NULL,
BANNER VARCHAR(255),
PARTITIONINFO INT
) ENGINE=InnoDB;
问题内容: 运行main方法时,将执行作业。这样我无法弄清楚如何控制作业的执行。例如,您如何安排作业,访问作业执行或设置作业参数的方式。 我试图注册自己的JobLauncher 但是当我尝试在主要方法中使用它时: 当加载上下文时,该作业再次执行,而当我尝试手动运行它时,我得到了。有没有办法防止自动作业执行? 问题答案: 通过设置可以防止作业执行 在application.properties中。或
我按照这个示例使用Boot进行Spring批处理。 运行main方法时,作业将执行。这样我就不知道如何控制作业的执行了。例如如何排定作业、访问作业执行或设置作业参数。 我尝试注册自己的JobLauncher 但当我尝试在主法中使用时: 当加载上下文时,再次执行作业,并且尝试手动运行作业时得到。有没有办法防止自动执行作业?
我有一个作业流,我希望以以下方式运行它: 作业流将从Job1开始。在Job1成功完成后,Job1将同时启动Job2和Job4。 Job2和Job4将并行运行。 在Job2成功完成后,Job2将启动Job3。 在Job4成功完成后,Job4将启动Job5。 下面是job1.xml和job1的作业启动器类的代码片段: job1.xml uijobLauncher.java “job2,Job3”对和“
我不知道如何使用调用Spring批处理中定义的作业,文档细节对我来说是不够的。 我遵循了Spring Batch官方指南,使用Java注释(例如)在Spring Batch中编写作业,因为我希望避免使用XML配置文件来描述作业、步骤等。 到目前为止我已经: 配置类(见下文),我使用AnnotaIon将定义、、、和(带有的所有内容放入其中。 具有方法的类,该方法具有并具有注释,以导入处理作业中的数据
是否可以配置Spring批处理管理员来启动主作业和从作业。我们有一个进程作为主节点和3-4个从节点。 Spring batch admin在单独的JVM进程中运行,但所有Spring批处理作业都使用相同的批处理数据库模式。
我对此做了一些研究,但结果相互矛盾。为了处理这个错误,有人说我需要在我的一个控制器中实现。 以下是一些链接: 如何处理MaxUploadSizeExceededExc的异常 使用Spring MVC处理MaxUploadSizeExceededExc的异常 http://www.raistudies.com/spring/spring-mvc/file-upload-spring-mvc-anno