从属性文件java中设置静态变量

时间:2012-11-03 08:36:53

标签: java

我需要设置一些全局变量,这些变量将由几个类使用。

我在从属性文件中分配静态变量时遇到了麻烦。

我想如何调用变量是这样的:String url = WebdriverConfiguration.getBaseUrl();

public class WebDriverConfiguration
{
    private static Properties testProperties;
    private static String instaceUrl;

    testProperties = loadProperties();


    public static final String DEFAULT_BASEURL = testProperties.getProperty("confluence.base.url","");
    private static final int DEFAULT_HTTP_PORT = 8080;
    private static final String DEFAULT_CONTEXT_PATH = "/";
    public static final String TEST_SPACE_KEY = "SMOKE";
    public static final String TEST_PAGE = "XXX";

    private static final String BASE_URL = System.getProperty("baseurl", DEFAULT_BASEURL);


    public static String getBaseUrl()
    {
      return BASE_URL;

    }



    private Properties loadProperties() throws IOException
{
    InputStream testPropertiesInput = getClass().getClassLoader().getResourceAsStream("webtester.properties");
    Properties testProperties = new Properties();

    if (null != testPropertiesInput)
    {
        try
        {
            testProperties.load(testPropertiesInput);
        }
        finally
        {
            IOUtils.closeQuietly(testPropertiesInput);
        }
    }
    return testProperties;
}


   }

3 个答案:

答案 0 :(得分:4)

我不确定你在这里问的是什么,但你提供的代码不应该编译。取代

private static Properties testProperties;
testProperties = loadProperties();

private static final Properties testProperties = loadProperties();

更新,发现另一个bug。您还必须更改loadProperties的方法签名:

private static final Properties loadProperties() throws IOException {...}

           ^     ^

答案 1 :(得分:1)

使用问题中的当前设计,需要进行以下更改:

public class WebDriverConfiguration {
    private static Properties testProperties = loadProperties();
    //...snip...

    private static Properties loadProperties() { //must be static and can not throw a checked exception
    //...snip...
    }
}

答案 2 :(得分:0)

我认为你应该这样做:

首先,将构造函数签名设为private。 其次,将您的负载Properties()置于静态块。 第三,你应该把你所有的财产都私有。