我想在spring启动应用程序启动之前向application.properties写一个属性

时间:2018-02-16 11:35:48

标签: java spring spring-boot

我想在spring启动应用程序启动之前向application.properties写一个属性。

        Properties properties = new Properties();

        try {
            properties.load(new FileInputStream("src/main/resources/application.properties"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        if (properties.getProperty("name") == null) {
            OutputStream os = null;
            Properties prop = new Properties();
            prop.setProperty("name", "WriteTheName");
            try {
                os = new FileOutputStream("src/main/resources/application.properties", true);
                prop.store(os, "Dynamic Property File");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
        else
        {
            System.out.println("Already available Name %%%%%%%%%%%%%%%%%%%%%%%");
        }

上面的代码,我使用的是CommandLineRunner的run方法。这是在应用程序启动后写入值。 如果有办法在应用程序启动前写入属性值,请告诉我。

1 个答案:

答案 0 :(得分:0)

构建并启动应用后,您将无法访问src/main/resources

在启动应用程序之后但在开始加载Spring上下文之前编写属性文件不是一个好方法。我看到的少数用例之一是在应用程序安装期间,可能必须生成一些随机ID,但这是安装程序的工作,而不是应用程序的工作。

或者,您可以将属性值传递给Spring Boot应用程序:

假设您要使用的属性名为:my.property.key

java -Dmy.property.key=value -jar application.jar
java -jar application.jar --my.property.key=value
MY_PROPERTY_KEY=value java -jar application.jar