Ho un'applicazione di avvio a molla e ha più file di proprietà, uno per ogni ambiente locale, dev, test, prestazioni, produzione.
Recentemente abbiamo avuto un incidente in cui qualcuno si è dimenticato di inserire una nuova proprietà nel file delle proprietà di produzione e il sistema era inattivo per ore di produzione.
La mia domanda è, ci sono delle migliori pratiche su come mantenere le proprietà tra più file di proprietà?
In questo momento sto pensando a un'utilità, forse un test unitario che verifica ogni chiave esiste in ogni file di proprietà e fallirebbe la build se non esiste.
Ho fatto alcune ricerche ma non ho potuto trovare davveromolto su di esso. Comprendo i termini della domanda SO e che sto cercando un'opinione qui. Sto più cercando di conoscere le migliori pratiche sul mantenimento dei file di proprietà.
risposte:
3 per risposta № 1È necessario utilizzare file di proprietà differenti per diversi ambienti.like
application-qa.properties per l'ambiente QA
application-prod.properties per ambiente di produzione
application-local.properties per l'ambiente locale
E quindi utilizzare più script per avviare l'applicazione per ambienti diversi, come ogni script della shell conterrebbe
mvn spring-boot: run -Drun.profiles = qa
mvn spring-boot: run -Drun.profiles = prod
mvn spring-boot: run -Drun.profiles = local
Per esempio application-local.properties il file è:
spring.profiles.active = locale
spring.data.mongodb.host = localhost
spring.data.mongodb.port = 27017
spring.data.mongodb.database = my_db_name
spring.data.mongodb.username = some_user_name
spring.data.mongodb.password = some_password
spring.rabbitmq.host = localhost
spring.rabbitmq.username = ospite
spring.rabbitmq.password = ospite
spring.rabbitmq.port = 5672
rabbitmq.publish = true
1 per risposta № 2
Sì, questa è la pratica standard seguita aseparare le proprietà dipendenti dall'ambiente e farle iniettare usando spring.profile.active, ma lo scenario che hai descritto sembra più un errore umano e può verificarsi con qualsiasi utility, si può avere un test per verificare le proprietà ma introduce un problema di manutenibilità. Preferisco gestire le proprietà relative alla produzione utilizzando la configurazione della nuvola di primavera (Qui) perché le proprietà di produzione possono contenere credenziali db e chiavi segrete che potrebbero essere trapelate.
1 per risposta № 3
È possibile utilizzare un file di proprietà predefinito. Se non ci sono proprietà in un particolare file env specifico, cercherà in questo file delle proprietà.
Laddove possibile, mentre risolvi la proprietà in primavera, prova a fornire il valore predefinito. Per es. @Value ( "$ {mongodb.url: 127.0.0.1}")