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

如何获取在主tomcat和从tomcat中运行的spring批处理作业的分区列表

微生永春
2023-03-14

我已经通过以Spring Batch Talk作为参考来处理一个Spring Batch Admin示例。该示例以我想要的方式完美运行。使用兔子服务器,我已经在主服务器和从服务器之间建立了通信。但是我怎么能知道哪个分区在主服务器中运行,哪个在从服务器中运行。有没有机会从Spring Batch AdminUI查看它。

共有1个答案

费承载
2023-03-14

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 &lt;= :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