2

これは、サーバー上に名前付きセマフォを 1 つだけ作成できるようにするにはどうすればよいですか? に似ています。しかし、私はここで Java を求めています。

アプリの別のインスタンスが実行されていて、既にセマフォを作成している場合、Java アプリでセマフォを作成したいと思います。したがって、サーバーごとに 1 つだけです。

JVMだけでなく、サーバー全体で1つだけの制限を保持したいと思います。しかし、それを複数のサーバー (または VM) にまたがって維持したくありません。つまり、アプリを 2 つの異なるサーバーで実行できるようにしたいのです。

これは可能ですか?もしそうなら、どのように?

4

1 に答える 1

0

mywebapp.lockディレクトリにファイルを書き込み、/tmpこのファイルが存在するかどうかを確認できます。

使用できるコードの王様を次に示します(テストされていません):

アプリケーションの実行中にロックを保持するとしますapplicationFileLockFileLockアプリケーションの起動時に次のコードを実行できます。

FileOutputStream fos = new FileOutputStream(new File(System.getProperty("java.io.tmpdir"),"mywebapp.lock"));
try {
   applicationFileLock = fos.getChannel().tryLock();
   if (fileLock == null) {
     throw new AlreadyStartedApplicationException("Cannot ...");
   }
} catch (IOException e) {
   // handle or rethrow.
}

applicationFileLock.release()アプリケーションの最後にを使用して、必ずロックを解除してください。

于 2013-06-07T18:05:25.980 に答える