J'essaie de faire en sorte que mon application Java prenne des mesures raisonnables pour être robuste, et cela implique notamment une fermeture gracieuse. Je suis en train de lire crochets d'arrêt et je ne comprends pas vraiment comment les utiliser dans la pratique.
Existe-t-il un exemple concret ?
Imaginons que j'aie une application très simple comme celle ci-dessous, qui écrit des nombres dans un fichier, 10 par ligne, par lots de 100, et que je veuille m'assurer qu'un lot donné se termine si le programme est interrompu. Je sais comment enregistrer un crochet d'arrêt, mais je n'ai aucune idée de la manière dont je peux l'intégrer à mon application. Avez-vous des suggestions ?
package com.example.test.concurrency;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
public class GracefulShutdownTest1 {
final private int N;
final private File f;
public GracefulShutdownTest1(File f, int N) { this.f=f; this.N = N; }
public void run()
{
PrintWriter pw = null;
try {
FileOutputStream fos = new FileOutputStream(this.f);
pw = new PrintWriter(fos);
for (int i = 0; i < N; ++i)
writeBatch(pw, i);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
finally
{
pw.close();
}
}
private void writeBatch(PrintWriter pw, int i) {
for (int j = 0; j < 100; ++j)
{
int k = i*100+j;
pw.write(Integer.toString(k));
if ((j+1)%10 == 0)
pw.write('\n');
else
pw.write(' ');
}
}
static public void main(String[] args)
{
if (args.length < 2)
{
System.out.println("args = [file] [N] "
+"where file = output filename, N=batch count");
}
else
{
new GracefulShutdownTest1(
new File(args[0]),
Integer.parseInt(args[1])
).run();
}
}
}