2016-10-27 2 views
0

私は、Springバッチ管理の例で、Spring Batch Talkを参考にして作業しました。この例は、私が望むように完全に走っていた。ウサギのサーバーを使って、私はマスターとスレーブの間のコミュニケーションを確立しました。しかし、どのパーティションがマスタで動作しているのか、そしてどのパーティションがスレーブで動作しているのかをどのように知ることができますSpring Batch Admin UIから表示する機会はありますか?マスタとスレーブのTomcatで実行中のSpringバッチジョブのパーティションのリストを取得する方法

+0

で、本当にどこ実行されているかを知るための方法はありません。 –

+0

議論のために、奇数パーティションをスレーブでもマスターでも動作させる方法はありますか?そう、私は参照リンクや何かそれらを行くことができます@MichaelMinella –

答えて

0

ColumnRangePartitionerでパーティショニングを行いながら、もう1つの値partitionIdをExecutionContextに追加しました。

value.putLong("minValue", start); 
value.putLong("maxValue", end); 
value.putLong("partitionId", number); 

私はポートがどのパーティションでスキャンされたような詳細を格納TARGETにpartitionInfoと呼ばれる新しい列が追加されました。ポートを読んでいる間、明示的に値を追加しました。

<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> 

partitionId情報を格納する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; 
関連する問題