Write/Update properties file value in spring
Asked Answered
B

2

16

I have some requirement where I want to write/update the value in the properties file I am using the my spring application.

I have googled it but I have not found a direct way of doing it using Spring.

Does any one aware of how to do it or is there any best way to do it.

Thanks in advance.

Burdine answered 10/7, 2015 at 7:30 Comment(0)
C
22

You can achieve that like this :

public void saveParamChanges() {
   try {
     // create and set properties into properties object
     Properties props = new Properties();
     props.setProperty("Prop1", "toto");
     props.setProperty("Prop2", "test");
     props.setProperty("Prop3", "tata");
     // get or create the file
     File f = new File("app-properties.properties");
     OutputStream out = new FileOutputStream( f );
     // write into it
     DefaultPropertiesPersister p = new DefaultPropertiesPersister();
     p.store(props, out, "Header Comment");
   } catch (Exception e ) {
    e.printStackTrace();
   }
}

source

EDIT : updated with the defaultPropertiesPersiter from org.springframework.Util

Centre answered 10/7, 2015 at 7:47 Comment(7)
Thanks for the answer. But this is something I know. I want to do it through some method in spring only.Burdine
@Yogesh is that what you mean by spring method?Centre
@Yogesh, the Javadoc for DefaultPropertiesPersister reads, "As of JDK 1.6, Properties.load/store will also be used for readers/writers, effectively turning this class into a plain backwards compatibility adapter", so even Spring isn't using a Spring-only method...it uses the JDK method. You should accept Deh's answer.Homeopathist
Isnt there a SPRING endemic approach from an annotation, like using @value keyword for reading the parameters from the property file?Cleanup
@Cleanup I don't think there is. And this is a bummer as it seems you have to keep a separate file for manipulations with dynamic parameters.Hillhouse
shouldn't the app-properties.properties file be saved in resource directory?Granadilla
Is there a way to know where the properties were read from and write back over that? Also is there a way to write a class out, rather then specify props?Greenquist
C
0

Extending the existing answer by @deh, read and write using spring-boot. Note it is not using the typical classpath: in @PropertySource. To automate writing of more properties you could enumerate all fields with reflection.

@Data
@Configuration
@PropertySource("file:offset.properties")
public class Offset {

    @Value("${offset:0}")
    private int offset;

    public void save(int newOffset) {
        try {
            Properties props = new Properties();
            props.setProperty("offset", "" + newOffset);
            File f = new File("offset.properties");
            OutputStream out = new FileOutputStream( f );
            DefaultPropertiesPersister p = new DefaultPropertiesPersister();
            p.store(props, out, null);
        } catch (Exception e ) {
            e.printStackTrace();
        }
    }
}
Coulisse answered 1/6, 2023 at 8:11 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.