Jak rozróżnić właściwości testowe i produkcyjne w aplikacji?
Opracowujemy duże rozwiązanie e-sprzedaży J2ee. Ma wiele integracji: CMS, ERP, serwer pocztowy itp. Wszystkie te systemy są podzielone na środowiska testowe i produkcyjne.
Musimy wdrożyć naszą aplikację na naszych serwerach testowych z konfiguracją testową i po wdrożeniu na naszych serwerach produkcyjnych powinna ona korzystać z konfiguracji produkcyjnej. Jak sprawić, by nasza aplikacja wybrała prawidłowe właściwości?
Dotychczas próbowaliśmy tego:
Wszystkie nasze pliki właściwości zawierają właściwości testowe i właściwości produkcyjne
test.mvxapi.server = SERV100TS test.mvxapi.username = user test.mvxapi.password = password test.mvxapi.port = 6006 test.mvxapi.cono = 600 mvxapi.server = SERV10001 mvxapi.username = user mvxapi.password = password mvxapi.port = 6001 mvxapi.cono = 100
Util, który odczytuje te właściwości, ma przełącznik: isTest (), który poprzedza klucz „test”.
public String getProperty(String property) { return properties.getProperty(prefix + "" + property); }
Przełącznik jest ustawiany przez inną właściwość, która jest tworzona przez nasz serwer kompilacji. Po zbudowaniu .EAR skrypt dla naszych serwerów produkcyjnych wstrzykuje (wejście do build.xml) "isProduction = true" do system.properties.
<propertyfile file="${buildDir}/system.properties">
<entry key="isProduction" value="${systemType}"/>
</propertyfile>
Nie jestem pewien, czy to najlepszy sposób. Jeśli z jakiegoś powodu „isProduction = false” zostanie popełnione błędnie w naszym środowisku produkcyjnym, piekło jest luźne.
Czytałem, że ludzie mają właściwości lokalnie na serwerze. Ale tak naprawdę nie chcemy, aby pliki były rozproszone. Mamy klaster serwerów produkcyjnych. Upewnienie się, że każdy serwer ma odpowiedni plik właściwości, nie wydaje się bezpieczne