Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

224
Views
¿Cómo actualizo un archivo de propiedades dinámicamente?

Mi aplicación es un proceso por lotes que extrae variables de entorno de un archivo application.properties. La contraseña que utilizo debe actualizarse cada pocos meses. Me gustaría automatizar el proceso de actualización de la contraseña y guardar la contraseña actualizada en el archivo de propiedades para poder usarla en ejecuciones futuras, pero las actualizaciones que intento hacer no se propagan al archivo application.config.

Cuando ejecuto Intellij, no hay errores, pero el archivo no se actualiza. Cuando ejecuto la aplicación como un jar, da:

 java.io.FileNotFoundException: file:{localpath}\application.jar!\BOOT-INF\classes!\application.properties (The filename, directory name, or volume label syntax is incorrect)

¿Cómo actualizo dinámicamente el archivo application.properties dentro del jar o necesito crear un nuevo archivo de propiedades fuera del jar cuando la aplicación se ejecuta por primera vez?

EJEMPLO DE SNIPPETS DE CÓDIGO A CONTINUACIÓN:

propiedades.config:

 username=user password=password123

Aplicación.java:

 //get properties prop = new Properties(); InputStream input = null; try { input = new FileInputStream(f); // load a properties file prop.load(input); } catch (IOException ex) { logger.error("Error reading application.properties", ex); ex.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } //update properties prop.setProperty("TESTSTRING", "testvalue"); //write to properties file OutputStream os = null; try{ File f = new File(Application.class.getClassLoader().getResource("application.properties").getFile()); os = new FileOutputStream(f); prop.store(os, comments); }catch(IOException ex){ logger.error("Error updating application.properties", ex); ex.printStackTrace(); } finally { if(os != null){ try{ os.close(); } catch (IOException e){ e.printStackTrace(); } }
about 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Las propiedades de una aplicación que pueden cambiar según el entorno en ejecución nunca deben empaquetarse dentro del componente empaquetado.
No debe acoplarse de forma rígida al componente y también debe poder modificarse si es necesario sin modificar el componente empaquetado.
Además, las propiedades pueden contener información confidencial (como en su caso: nombre de usuario y contraseña).
Por lo tanto, debe almacenarse preferentemente directamente en el entorno de destino.

Por ejemplo, uno de los principios de la aplicación nativa en la nube de Heroku/doce factores (que también son buenas prácticas en general) es "almacenar la configuración en el entorno".

Por lo tanto, debe evitarse absolutamente actualizar el archivo de propiedades dentro del componente empaquetado por las mismas razones.
Además de hacerlo, hace que la aplicación estatal sea más difícil de reproducir si se produce un error.


En su caso, simplemente complete las propiedades de nombre de username y password en un archivo de propiedades específico según el entorno de destino y almacene este archivo en el entorno.

Luego solo tiene que ejecutar la aplicación especificando este archivo de propiedades.
Por ejemplo para ventanas:

 java -jar yourApp-1.0.jar --spring.config.location=file:///D:/application-target-env.properties

Aquí está la documentación de referencia al respecto: 24.2 Acceso a las propiedades de la línea de comando

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!