私は春バッチで作業しており、一部の行を挿入しなくてもデータベースに行を挿入できます。 1つのレコードが挿入されていなくてもジョブが失敗した場合に、バッチを更新/挿入する方法を理解できません。いくつかのレコードを挿入してもデータベースに行を挿入する方法
データベース内のデータをプッシュするための挿入/更新クエリを使用します。
私は春バッチで作業しており、一部の行を挿入しなくてもデータベースに行を挿入できます。 1つのレコードが挿入されていなくてもジョブが失敗した場合に、バッチを更新/挿入する方法を理解できません。いくつかのレコードを挿入してもデータベースに行を挿入する方法
データベース内のデータをプッシュするための挿入/更新クエリを使用します。
はdowngrade most errors to warningsに挿入および更新(insert ignore ...
)の両方でignore
キーワードを使用します。
のMySQLのいくつかの文は、オプションのIGNOREキーワードをサポートしています。このキーワードを使用すると、サーバーは特定の種類のエラーをダウングレードし、代わりに警告を生成します。複数行のステートメントの場合、IGNOREはステートメントを中止するのではなく次の行にスキップさせます。
このようにエラーが発生しても、挿入と更新が失敗することはなく、後でshow warnings
を呼び出して問題を取り出すことができます。
非ブロックジョブを設計することは非常に重要です。 バッチでは、永続的な命令をtry catchブロックで囲み、エラーをログに記録するか、何が間違っていたかをトレースすることが考えられます。 それはあなたに情報を提供し、ブロックされません。
あなたは春のバッチを使用しているので、おそらくSkipPolicy
public class InsertToDatabaseSkip implements SkipPolicy {
private static final Logger logger = LoggerFactory.getLogger("InsertToDatabaseSkipLogger");
@Override
public boolean shouldSkip(Throwable exception, int skipCount) throws SkipLimitExceededException {
if (exception instanceof SQLException) {
logger.error(exception.getMessage());
return true;
} else {
return false;
}
}
}
、その後は、ご使用の構成に追加する使用することができます
<batch:skip-policy>
<bean class="com.skip.package.InsertToDatabaseSkip" scope="step"/>
</batch:skip-policy>
あなたがしているエラーは何ですか失敗したものに乗っている?どうしてそれらをスキップしないのですか? –
@MichaelMinellaどのように私はそれらをスキップすることができます私が探しています..読み取りまたは適切に挿入されていない行をスキップし、最後にログファイルに入れます。 –