Arthur Zaczek Mar 2015
1 Konfiguration 1.1 Leitspruch Hardcoded gibt es nicht 1.2 Was gehört in eine Konfiguration Datei? Allg.: Alles, was auf dem Zielsystem Variabel ist, z.b.: Datenbankconnection Strings Welcher DAL soll verwendet werden Dateipfade, URL s, etc. Adressen von Servern, etc. u.v.m. Besteht auch nur die kleinste Chance, dass eine Konstante verändert werden soll, gehört sie in die Konfiguration Datei 1.3 Beispiel aus einem Messdaten Erfassungssystem DataServiceURI=tcp://localhost:8989/DataService ChannelCount=16 DataDir=c:\\Perdix.Data IPAddress= 192.168.19.250:10001;192.168.19.251:10001 Timeslot=1000 TimeslotTolerance=20 FilterQueueLength=10 MaxBitErrors=5 MaxF0=10000 1.4 Passwörter Nur sehr ungerne Passwörter gehören aber auch nicht in den SourceCode Dort kann man sie genauso auslesen! Am Besten, man verwendet Authentifizierung über eine Domain Controller mit dem aktuellen User 2 Java 2.1 Property Files Einfache Key/Value Collection 1
# Property File for Produktverwaltung DAL.DriverManager = com.microsoft.sqlserver.jdbc.sqlserverdriver DAL.Connection = jdbc:sqlserver://localhost\\sqlexpress;databasename=produkte # Nicht gut! Sollte man anders lösen DAL.User = java DAL.Password = java 2.2 Lesen - Java // Properties anlegen currentproperties = new Properties(); InputStream in = null; // File suchen File configfile = new File("appProperties.txt"); if(configfile.exists()) { // File öffnen in = new FileInputStream("appProperties.txt"); } else { // Alternativ auf die Ressourcen zurückgreifen in = getclass().getresourceasstream("appproperties.txt"); } // Properties laden currentproperties.load(in); in.close(); 2.3 Hinweise zum Laden Die Text Dateien (Endung ist egal) müssen von Hand geladen werden. D.H. der Pfad ist frei wählbar aktuelles Verzeichnis Pfad als Parameter übergeben Home Directory des aktuellen Benutzers etc. Datei kann auch Bestandteil der Ressourcen sein Idealer Ort für Default Properties Konfiguration kann auch gespeichert werden Achtung! Berechtigungen 2.4 Hierarchische Konfiguration Konfiguration kann auch von mehreren Orten geladen werden. Dabei überschreiben die zuletzt geladenen Dateien die vorige Konfiguration Ideal um Benutzerspezifische Konfigurationen zu speichern 2
2.5 Hierarchische Konfiguration // create and load default properties Properties defaultprops = new Properties(); FileInputStream in = new FileInputStream("defaultProperties"); defaultprops.load(in); in.close(); // create application properties with default Properties applicationprops = new Properties(defaultProps); // now load properties from last invocation in = new FileInputStream("appProperties"); applicationprops.load(in); in.close(); 3.NET 3.1 Dateiname Die Konfiguration Datei heißt immer [NameDerEXE].exe.config [NameDerDLL].dll.config ist immer nur ein Beispiel-Datei für Konfigurationen, die die Assembly erwartet Im Studio heißt sie app.config & wird in das bin Verzeichnis mit dem richtigen Namen kopiert Bei ASP.NET heißt die Konfiguration Datei immer web.config 3.2 Format Die Konfiguration Datei ist immer eine XML Datei Das Schema ist von Microsoft vorgegeben Hierarchien gibt es auch machine.config app.config (Achtung! Namensänderung) user.config (Wird im Benutzerprofil gespeichert) In der Konfiguration Datei werden alle Konfigurationen, auch die vom.net Framework, eingestellt. z.b.: Security, etc. 3.3.NET 1.0 <?xml version="1.0" encoding= "utf-8"?> <configuration> <appsettings> <add key="databasepath" value= db.mdb" /> <add key="supportemail" value= test@test.com" /> </appsettings> </configuration> 3
string dbpath = System.Configuration.ConfigurationSettings.AppSettings["DatabasePath"]; string email = System.Configuration.ConfigurationSettings.AppSettings["SupportEmail"]; 3.4 >=.NET 2.0 Figure 1: 3.5 Konfiguration -.NET 2.0 <?xml version="1.0" encoding="utf-8"?> <configuration> <configsections> <sectiongroup name="applicationsettings" type="..." > <section name="_05_cs_databinding.properties.settings" type="..." /> </sectiongroup> </configsections> <applicationsettings> <_05_CS_DataBinding.Properties.Settings> <setting name="database" serializeas="string"> <value>test.mdb</value> </setting> <setting name="supportemail" serializeas="string"> <value>test@test.com</value> </setting> </_05_CS_DataBinding.Properties.Settings> </applicationsettings> </configuration> 4
3.6 >=.NET 2.0 string db = Properties.Settings.Default.DataBase; string mail = Properties.Settings.Default.SupportEmail; Es wird automatisch eine Settings Klasse angelegt Datentypen können angegeben werden int string etc. Alle Konfigurationen werden in den richtigen Datentypen aufbereitet Speichern: Properties.Settings.Default.Save(); 5