Java - 启动时读出系统环境
Java - Read out system environment during startup
在 Java 应用程序和 class 可见性函数中读取系统环境的最佳方法是什么?
我需要例如os.name 并设计了一个 class 像
private String osName;
private void readSystemSettings() {
osName = System.getProperty("os.name");
}
public void printSystemSettings() {
System.out.println(this.osName);
...
}
public SystemEnvironment() {
readSystemSettings();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
获取这些信息的最佳做法是什么?
始终在启动时调用此函数还是偶尔调用?
我想在 class 实例化后立即读出这些信息。因此构造函数正在调用 readSystemSettings()
函数。
由于这些信息在运行时总是相同的,所以我实际上不需要任何立场。意味着所有变量+函数都是最终的。还是我错了?
- 如果2)理解正确,怎么办?
您可以使用实用程序 class:
public final class Utilities {
public static final String OS_NAME = System.getProperty("os.name");
private Utilities() { } // utility classes can't be instantiated
}
这样,这个 属性 只会在您的应用程序启动期间初始化一次。然后,您可以使用 Utilities.OS_NAME
.
从代码中的任何位置访问此 属性
由于该值是全局设置的,您可以这样做
enum SystemEnvironment {
;
public static final String OS_NAME = System.getProperty("os.name");
或者您可以每次都查看 ti,因为您不应该经常调用它。
enum SystemEnvironment {
;
public static getOsName() {
return System.getProperty("os.name");
}
如果您经常使用它,我建议为它创建一些测试。
enum SystemEnvironment {
;
public static final boolean IS_WINDOWS = getOsName().startsWith("Window");
public static getOsName() {
return System.getProperty("os.name");
}
您可以使用 OWNER 库。
OWNER API 是一个 Java 库,其目标是通过 Java 属性文件最小化处理应用程序配置所需的代码。
所以要加载属性,您应该像这样创建 class
public interface MyConfig extends Config {
@Key("os.name")
String osName();
}
然后你可以随时加载配置:
ServerConfig cfg = ConfigFactory.create(MyConfig.class,
System.getProperties(),
System.getenv()
);
System.out.println("Os name:" + cfg.osName());
有关详细信息,请参阅文档 http://owner.aeonbits.org/docs/usage/
你可以有一个 class,所有变量都标记为 final,然后在静态块中初始化。
public class SystemProperties{
public static final String OS_NAME;
// other properties
static{
OS_NAME = System.getProperty("os.name");
// initialize other properties
}
}
否则,如果您处于 Spring 或 EJB 等托管环境中,您可以将 SystemProperties
标记为 singleton
并在用 [=14 注释的方法中初始化变量=].
public class SystemProperties{
public static String OS_NAME;
// other properties
@PostConstruct
private void init(){
OS_NAME = System.getProperty("os.name");
// initialize other properties
}
}
在 Java 应用程序和 class 可见性函数中读取系统环境的最佳方法是什么?
我需要例如os.name 并设计了一个 class 像
private String osName;
private void readSystemSettings() {
osName = System.getProperty("os.name");
}
public void printSystemSettings() {
System.out.println(this.osName);
...
}
public SystemEnvironment() {
readSystemSettings();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
获取这些信息的最佳做法是什么? 始终在启动时调用此函数还是偶尔调用?
我想在 class 实例化后立即读出这些信息。因此构造函数正在调用
readSystemSettings()
函数。
由于这些信息在运行时总是相同的,所以我实际上不需要任何立场。意味着所有变量+函数都是最终的。还是我错了?
- 如果2)理解正确,怎么办?
您可以使用实用程序 class:
public final class Utilities {
public static final String OS_NAME = System.getProperty("os.name");
private Utilities() { } // utility classes can't be instantiated
}
这样,这个 属性 只会在您的应用程序启动期间初始化一次。然后,您可以使用 Utilities.OS_NAME
.
由于该值是全局设置的,您可以这样做
enum SystemEnvironment {
;
public static final String OS_NAME = System.getProperty("os.name");
或者您可以每次都查看 ti,因为您不应该经常调用它。
enum SystemEnvironment {
;
public static getOsName() {
return System.getProperty("os.name");
}
如果您经常使用它,我建议为它创建一些测试。
enum SystemEnvironment {
;
public static final boolean IS_WINDOWS = getOsName().startsWith("Window");
public static getOsName() {
return System.getProperty("os.name");
}
您可以使用 OWNER 库。
OWNER API 是一个 Java 库,其目标是通过 Java 属性文件最小化处理应用程序配置所需的代码。
所以要加载属性,您应该像这样创建 class
public interface MyConfig extends Config {
@Key("os.name")
String osName();
}
然后你可以随时加载配置:
ServerConfig cfg = ConfigFactory.create(MyConfig.class,
System.getProperties(),
System.getenv()
);
System.out.println("Os name:" + cfg.osName());
有关详细信息,请参阅文档 http://owner.aeonbits.org/docs/usage/
你可以有一个 class,所有变量都标记为 final,然后在静态块中初始化。
public class SystemProperties{
public static final String OS_NAME;
// other properties
static{
OS_NAME = System.getProperty("os.name");
// initialize other properties
}
}
否则,如果您处于 Spring 或 EJB 等托管环境中,您可以将 SystemProperties
标记为 singleton
并在用 [=14 注释的方法中初始化变量=].
public class SystemProperties{
public static String OS_NAME;
// other properties
@PostConstruct
private void init(){
OS_NAME = System.getProperty("os.name");
// initialize other properties
}
}