2012-01-05 3 views
0

У меня есть приложение swing, которое должно подключиться к базе данных для некоторых ресурсов, для этого я использовал файл .properties для хранения свойств базы данных и который можно прочитать во время выполнения.
Для этого я использую следующий кодКак сделать переменную/константу доступной все время после инициализации?

public void readPropertiesFile(){ 
     try{ 
     InputStream is = ReadValues.class.getResourceAsStream(PROP_FILE); 
     Properties prop = new Properties(); 
     prop.load(is); 
     String URL = prop.getProperty("DB_URL"); 
     String user = prop.getProperty("DB_USER"); 
     String pwd = prop.getProperty("DB_PWD"); 
     is.close(); 
     /* code to use values read from the file*/ 
     }catch(Exception e){ 
     System.out.println("Failed to read from " + PROP_FILE + " file."); 
     } 
    } 

но я вызывать этот метод каждый раз, когда я хочу, чтобы подключиться к базе данных (для Connection объекта). Я знаю, что теперь обработка выполняется достаточно быстро, чтобы запускать эти строки за микросекунды, но для моих собственных знаний я предлагаю способы, с помощью которых я могу хранить эти значения БД при запуске приложения или первый пользователь пытается подключиться к DB для любой операции в таких objects или variables или constants, которые будут использоваться до тех пор, пока приложение не перезагрузится и может быть вызвано непосредственно, не читая файл.

P.S. : Я знаю, что значения БД не будут меняться часто, и если это произойдет, я с удовольствием перезапущу свое приложение :)

ответ

2

, создав эти статические поля в отдельном классе, они не будут загружены до первого время доступа к URL, USER или PASSWORD.

public class DbProps { 
    public static final String URL; 
    public static final String USER; 
    public static final String PASSWORD; 

    static { 
     try{ 
     InputStream is = ReadValues.class.getResourceAsStream(PROP_FILE); 
     try { 
      Properties prop = new Properties(); 
      prop.load(is); 
      URL = prop.getProperty("DB_URL"); 
      USER = prop.getProperty("DB_USER"); 
      PASSWORD = prop.getProperty("DB_PWD"); 
     } finally { 
      is.close(); 
     } 
     }catch(Exception e){ 
     throw new RuntimeException("Failed to read from " + PROP_FILE + " file.", e); 
     } 
    } 
} 
+0

аккуратный и простой .. спасибо! :) – Asif

+0

Я создал класс 'Constants' для хранения всех статических константных значений в приложении, в которых я сохраню эти значения, когда класс' DBProps' сначала инициализируется с запуском приложения, а затем будет использован далее. – Asif

+0

put правильные классы в classpath? – jtahlborn

2

Вы можете обнажить проверочное условие, которое будет проверять, если это первый раз, а затем установите значение других мудрым использовать существующее значение

public static boolean isFirstTime = true; 
public static String URL = true; 
public static String user = true; 
public static String pwd = true; 
public void readPropertiesFile(){ 
if(isFirstTime){ 
     try{ 

     InputStream is = ReadValues.class.getResourceAsStream(PROP_FILE); 
     Properties prop = new Properties(); 
     prop.load(is); 
     URL = prop.getProperty("DB_URL"); 
     user = prop.getProperty("DB_USER"); 
     pwd = prop.getProperty("DB_PWD"); 
isFirstTime = false; 
     is.close(); 
     /* code to use values read from the file*/ 
     }catch(Exception e){ 
     System.out.println("Failed to read from " + PROP_FILE + " file."); 
     } 
} 
    } 
//use this URL user and pwd in your application 
+0

Спасибо ... :) – Asif

2

Вот общий класс среды для вас. Вы можете получить свои реквизиты БД, например Environment.getEnvironment().getProperty("DB_URL") и т. Д.

public class Environment { 
    private static final String PROP_FILE = "somefilename"; 

    private static final Environment singleton = new Environment(); 

    public static Environment getEnvironment() { 
     return singleton; 
    } 

    private Properties properties = new Properties(); 

    protected Environment() { 
     super(); 
     loadProperties(); 
    } 

    public Properties getProperties() { 
     return properties; 
    } 

    public String getProperty(String propertyName) { 
     return getProperty(propertyName, System.getProperty(propertyName)); 
    } 

    public String getProperty(String propertyName, String defaultValue) { 
     return getProperties().getProperty(propertyName, defaultValue); 
    } 

    public void loadProperties() { 
     URL resourceURL = null; 

     try { 
     resourceURL = Thread.currentThread().getContextClassLoader() 
       .getResource(PROP_FILE); 
     getProperties().load(resourceURL.openStream()); 
     System.out.println("Loaded properties from " 
       + resourceURL.toExternalForm()); 
     } catch (IOException ioe) { 
     System.err.println("Failed to load properties from " 
       + resourceURL.toExternalForm()); 
     } 
    } 
} 
+0

То же самое, что я делаю с классом 'Constant'. Спасибо за предложение :) – Asif