未来币nxt 启动分析(1)

来源:互联网 发布:化学反应软件 编辑:程序博客网 时间:2024/04/30 03:18

window安装后桌面图标'Nxt Server' 执行nxt.exe。或者直接运行nxt.bat也可以,启动类nxt.Nxt.java
1,静态属性初始化
private static volatile Time time = new Time.EpochTime();
将当前时间转化为以未来币纪元开始时间计时(Constants.EPOCH_BEGINNING=2013.11.24 12:00:00)
(int)((System.currentTimeMillis() - Constants.EPOCH_BEGINNING + 500) / 1000);

单位秒


2, 静态快初始化


static {
        redirectSystemStreams("out");
        redirectSystemStreams("err");
        System.out.println("Initializing Nxt server version " + Nxt.VERSION);
        printCommandLineArguments();
        runtimeMode = RuntimeEnvironment.getRuntimeMode();
        System.out.printf("Runtime mode %s\n", runtimeMode.getClass().getName());
        dirProvider = RuntimeEnvironment.getDirProvider();
        System.out.println("User home folder " + dirProvider.getUserHomeDir());
        loadProperties(defaultProperties, NXT_DEFAULT_PROPERTIES, true);
        if (!VERSION.equals(Nxt.defaultProperties.getProperty("nxt.version"))) {
            throw new RuntimeException("Using an nxt-default.properties file from a version other than " + VERSION + " is not supported!!!");
        }
}
2.1读取系统日志输出配置属性。将System.out.out/error写入到文件
PersonalOptions=-server -Dnxt.runtime.mode=desktop -Dnxt.redirect.system.out=true -Dnxt.redirect.system.err=true


private static void redirectSystemStreams(String streamName) {
//安装时会写入到系统
        String isStandardRedirect = System.getProperty("nxt.redirect.system." + streamName);
。。。
System.setOut(new PrintStream(new PrintStream(Files.newOutputStream(Files.createTempFile("nxt.system.out.", ".log")))));
}
2.2打印命令行参数
printCommandLineArguments
就是打印-Dnxt.runtime.mode=desktop -Dnxt.redirect.system.out=true -Dnxt.redirect.system.err=true
2.3 获取运行模式
runtimeMode = RuntimeEnvironment.getRuntimeMode()
window运行模式为desktop(nxt.runtime.mode=desktop) nxt.env.DesktopMode
2.4 获取工作目录
dirProvider = RuntimeEnvironment.getDirProvider()
如果系统没有指定工作目录,桌面模式下windows系统是用WindowsUserDirProvider
Paths.get(System.getProperty("user.home"), "AppData", "Roaming", "NXT").toString();
创建工作目录
C:\Users\zzy\AppData\Roaming\Nxt\
相关的数据都放在这,包括:启动配置、日志、区块链数据
2.5 载入配置属性
loadProperties(defaultProperties, nxt-default.properties, true);
将conf目录下的nxt-default.properties读取到Properties.(run.bat会将conf/下的此文件加入classpath)
2.6 代码版本与配置版本判断
if (!VERSION.equals(Nxt.defaultProperties.getProperty("nxt.version"))) {


2.7 第二个静态块初始化
private static final Properties properties = new Properties(defaultProperties);
使用nxt-default.properties的值作为初始化值,nxt.properties的值覆盖nxt-default.properties
static {
        loadProperties(properties, NXT_PROPERTIES, false);
}
从工作目录(windows C:\Users\zzy\AppData\Roaming\Nxt\conf\)读取nxt.properties
如果没有此文件 则创建个空的。


3,执行main方法
public static void main(String[] args) {
        try {
            Runtime.getRuntime().addShutdownHook(new Thread(Nxt::shutdown));
            init();
        } catch (Throwable t) {
            System.out.println("Fatal error: " + t.toString());
            t.printStackTrace();
        }
}
public static void init() {
        Init.init();
}
指向内部Init的静态块初始化。

原创粉丝点击