如何只启动一份java程序呢?

戚薇 Java经验 发布时间:2023-04-10 21:45:15 阅读数:10464 1
在一些特殊的场景中,我们需保证一个java程序只能运行一份,那么如何在程序上实现这个效果呢?
下文笔者将一一道来,如下所示
限制程序单份运行的思路:
    方式1:
      web程序使用端口冲突,避免启动两份Java程序
    
	方式2:
	  使用文件排他锁,当拿到锁,则可以启动程序   
	  使用此种方式需注意:关闭程序时,一定要释放排他锁
例:文件排他锁的方式,规避程序启动多份
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;

@Slf4j
public class ProcessLock {

    private static final String FILE_NAME = "process.lock";

    private static FileChannel fileChannel;

    public static boolean tryLock(String lockFileDir) {
        log.info("lockFileDir: {}", lockFileDir);
        try {
            String dir = lockFileDir;
            if (StringUtils.isBlank(dir)) {
                dir = "./";
            } else {
                if (dir.charAt(dir.length() - 1) != '/') {
                    dir = dir + "/";
                }
            }
            File file = new File(dir + FILE_NAME);
            if (!file.exists()) {
                if (!file.createNewFile()) {
                    log.error("Create file " + file.getAbsolutePath() + " fail");
                    return false;
                }
            }
            RandomAccessFile raf = new RandomAccessFile(file, "rw");
            fileChannel = raf.getChannel();
            FileLock fileLock = fileChannel.tryLock();
            if (fileLock == null) {
                log.info("fileLock is null");
                return false;
            }
            return fileLock.isValid();
        } catch (Exception ex) {
            log.error("tryLock fail", ex);
        }
        return false;
    }

    public static void unlock() {
        if (fileChannel != null) {
            try {
                fileChannel.close();
            } catch (IOException ex) {
                log.error("", ex);
            }
        }
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202304/16811350506212.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者