700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java 配置文件参数_从Java的配置文件中读取配置参数的最佳方法是什么?

java 配置文件参数_从Java的配置文件中读取配置参数的最佳方法是什么?

时间:2022-11-14 10:32:27

相关推荐

java 配置文件参数_从Java的配置文件中读取配置参数的最佳方法是什么?

I am thinking it will impact performance.

我怀疑这是真的。

假设应用程序在启动时只读取配置文件一次,则读取文件所需的时间可能与应用程序的整体性能无关。实际上,应用程序运行的时间越长,启动时间越短。

只有在具体证据(即测量)来表示性能是重大问题时,才能优化应用程序性能,并且您正在寻求优化的代码是真正的瓶颈。

Can I use separate final class for configuration details

是的,可以做到这一点。没有人会阻止你。 (如果您的代码经过代码审查,有人可能会阻止您。)

不,这是一个坏主意。任何需要您重新编译代码以更改配置参数的事情都是一个坏主意。 IMO。

To read all configuration details at once from the configuration file and storing them as global constants for later use in application.

啊,所以想要读取“常数”的值,而不是硬接线。

是的,那是可能的。而且,将代码中的配线参数配置成比配线更有意义。但这还不是一个好主意(IMO)。

为什么?好吧,看看代码如何:

public final class Config {

public static final int CONST_1;

public static final String CONST_2;

static {

int c1;

String c2;

try (Scanner s = new Scanner(new File("config.txt"))) {

c1 = s.nextInt();

c2 = s.next();

} catch (IOException ex) {

throw RuntimeException("Cannot load config properties", ex);

}

CONST_1 = c1;

CONST_2 = c2;

}

}

第一个观察是,班级是最终的没有区别。它将这些字段声明为final,使它们保持不变。 (将类声明为final可防止子类化,但对静态字段没有影响。静态字段不受继承影响。)

接下来的观察是,这个代码在许多方面是脆弱的:

>如果静态初始化程序块出现问题。由块抛出的未经检查的异常将被包装为ExceptionInInitializerError(是…它是一个错误!!),并且Config类将被标记为错误。

>如果发生这种情况,没有现实的希望恢复,甚至可能是一个坏主意来尝试和诊断错误。

>上面的代码在Config类被初始化时被执行,但确定何时发生这样的事情可能很棘手。

>如果配置文件名是一个参数,那么在触发静态初始化之前,您有遇到参数值的问题。

接下来,与将状态加载到实例变量中相比,代码相当凌乱。而这种混乱主要是因为在静态初始化器的限制之内工作。以下是代码使用最终实例变量时的代码。

public final class Config {

public final int CONST_1;

public final String CONST_2;

public Config(File file) throws IOException {

try (Scanner s = new Scanner(file)) {

CONST_1 = s.nextInt();

CONST_2 = s.next();

}

}

}

最后,静态终场在终场领域的性能优势很小:

>每次访问其中一个常量时,大概有一个或两个机器指令,

>如果JIT编译器是智能的,可能没有什么,而且您可以适当地处理单例配置参考。

无论如何,在绝大多数情况下,收益将是微不足道的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。