初始化后如何使变量/常量始终可用?

时间:2012-01-05 14:27:46

标签: java swing properties-file

我有一个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时可以存储这些数据库值的方式对于objectsvariablesconstants中的任何操作,在应用程序重新启动之前可以使用,并且无需读取文件即可直接调用。

P.S。 :我知道DB值不会经常更改,如果它发生了,我会很乐意重新启动我的应用程序:)

3 个答案:

答案 0 :(得分: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);
       }
  }
}

答案 1 :(得分: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

答案 2 :(得分: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());
      }
   }
}