Как сделать переменную / константу доступной все время после инициализации? - PullRequest
0 голосов
/ 05 января 2012

У меня есть свинг-приложение, которое должно подключаться к базе данных для некоторых ресурсов, для этого я использовал .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 объекта). Я знаю, что в настоящее время обработка выполняется достаточно быстро, чтобы запускать эти строки в микросекундах, но, насколько я знаю, мне предлагаются способы, с помощью которых я могу хранить эти значения БД при запуске приложения или при первом подключении пользователя к БД для любой операции в таких objects или variables или constants, которая будет использоваться до перезапуска приложения и может вызываться напрямую без чтения файла.

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

Ответы [ 3 ]

2 голосов
/ 05 января 2012

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

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
2 голосов
/ 05 января 2012

Вот общий класс среды для вас.Вы можете получить реквизиты вашей БД, такие как 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());
      }
   }
}
2 голосов
/ 05 января 2012

, создав эти статические поля в отдельном классе, они не будут загружены до тех пор, пока вы в первый раз не получите доступ к URL, ПОЛЬЗОВАТЕЛЮ или ПАРОЛУ.

...