2010-08-11 15 views
5

Mamy komendę łączenia puli (plik JAR) dla jednej z naszych aplikacji. Od tej pory szczegóły połączenia aplikacji są dołączane za pomocą pliku jar (w pliku .properties).W jaki sposób plik JAR może odczytać zewnętrzny plik właściwości

Czy możemy uczynić go bardziej ogólnym? Czy możemy poprosić klienta o podanie szczegółów pliku właściwości (zarówno ścieżki, jak i nazwy pliku) i użycie słoika, aby uzyskać połączenie?

Czy jest sens mieć coś takiego w kodzie klienta ..

XyzConnection con = connectionIF.getConnection(uname, pwd); 

wraz z tym, klient określi (jakoś ???) właściwości pliku szczegóły, które posiada - adresy URL do połączyć, limit czasu itd

Odpowiedz

5

Wystarczy załadować właściwości z pliku, coś jak

Properties properties = new Properties(); 
InputStreamReader in = null; 
try { 
    in = new InputStreamReader(new FileInputStream("propertiesfilepathandname"), "UTF-8"); 
    properties.load(in); 
} finally { 
    if (null != in) { 
     try { 
      in.close(); 
     } catch (IOException ex) {} 
    } 
} 

nocie jak kodowanie jest wyraźnie określony jako UTF-8. Może to również zostać pominięte, jeśli zaakceptujesz domyślne kodowanie ISO8859-1, ale uważaj na wszelkie znaki specjalne.

13

Najprostszy sposób: użyj przełącznika -D, aby zdefiniować właściwość systemową w wierszu poleceń java. Ta właściwość systemowa może zawierać ścieżkę do pliku właściwości.

Np

java -cp ... -Dmy.app.properties=/path/to/my.app.properties my.package.App 

Następnie w kodzie można zrobić (obsługa wyjątków nie jest pokazany na zwięzłość):

String propPath = System.getProperty("my.app.properties"); 

final Properties myProps; 

if (propPath != null) 
{ 
    final FileInputStream in = new FileInputStream(propPath); 

    try 
    { 
     myProps = Properties.load(in); 
    } 
    finally 
    { 
     in.close(); 
    } 
} 
else 
{ 
    // Do defaults initialization here or throw an exception telling 
    // that environment is not set 
    ... 
} 
0

Najprostszym sposobem jest poniżej. Spowoduje to załadowanie pliku application.properties z folderu cfg poza plikiem jar.

Struktura katalogów

|-cfg<Folder>-->application.properties 
    |-somerunnable.jar 

Kod:

Properties mainProperties = new Properties(); 
    mainProperties.load(new FileInputStream("./cfg/application.properties")); 
    System.out.println(mainProperties.getProperty("error.message")); 
-1
public static String getPropertiesValue(String propValue) { 
     Properties props = new Properties(); 
     fileType = PCLLoaderLQIOrder.class.getClassLoader().getResourceAsStream(propFileName); 
     if (fileType != null) { 
      try { 
       props.load(fileType); 
      } catch (IOException e) { 
       logger.error(e); 
      } 
     } else { 
      try { 
       throw new FileNotFoundException("Property file" + propFileName + " not found in the class path"); 
      } catch (FileNotFoundException e) { 
       logger.error(e); 
      } 
     } 
     String propertiesValue = props.getProperty(propValue); 
     return propertiesValue; 
    } 

powyżej metod pracuje dla mnie, po prostu zapisać plik własności do katalogu, z którego uruchomić słoika i dostarczenie tej nazwy w miejscu propFileName, gdy chcesz uzyskać jakąkolwiek wartość z nieruchomości, zadzwoń pod getPropertyValue("name").

+1

To nieczytelne. –

1

To jest moje rozwiązanie. Najpierw szuka app.properties w folderze startowym, jeśli nie istnieje, spróbuj załadować z pakietu słoik

File external = new File("app.properties"); if (external.exists()) properties.load(new FileInputStream(external)); else properties.load(Main.class.getClassLoader().getResourceAsStream("app.properties"));