通过cmd用application.properties动态重写默认的spring boot application.properties

oxiaedzo  于 2021-07-14  发布在  Java
关注(0)|答案(2)|浏览(466)

我要重写中定义的属性 application.properties 通过cmd与现有其他 application.properties ,但是 @Scheduled 仅允许提供预定义值。
我需要的是通过辩论 @Scheduled 通过中已存在的命令行 application.properties 它将改变中定义的默认值 @Scheduled .
我的问题是,当我从cmd执行jar文件时,它会获取当前的值 @Scheduled 在建造时。它不会覆盖现有值 @Scheduled 价值观。我想根据用户需要覆盖值。
Spring代码

@SpringBootApplication
@EnableScheduling
public class PSchedularApplication {

    public static void main(String[] args) {
        for(String s : args)
            System.out.println("arguments passed=>"+s);
        SpringApplication application = new SpringApplication(PSchedularApplication .class);
        if(!(args).equals(null))
        {
            application.setAddCommandLineProperties(true);
        }
        application.run(args);
    }
}

@Component  
public class TaskSchedular {
@Scheduled(cron="${cronExpression}")
    public void taskScheduling()
    {
        System.out.println("Welcome to task schedular " + new java.util.Date());
        moveFile();
    }
}

应用程序属性

cronExpression=0 0/1 * * * *
pzsc.poll.cron.weekly=0 0/2 * * * *
pzsc.poll.cron.daily=0/30 * * * * *

在cmd中

java -jar PSchedular-0.0.1-SNAPSHOT.jar --cron=cronExpression
t98cgbkg

t98cgbkg1#

有几种方法可以做到这一点,但我可以想到的一种方法是使用外部化的应用程序属性文件。看到了吗https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-提供外部配置文件以获取更详细的信息。
你会得到你的 application.properties (低于 src/main/resources )使用默认属性 cronExpression . 但是当您调用jar时,您可以传入一个系统属性来告诉spring一个额外的属性文件在哪里,并对其进行可能的重写 cronExpression 财产。

java -jar <jar_name> -Dspring.config.additional-location=my-other-file.properties
q8l4jmvw

q8l4jmvw2#

java -jar -Dserver.port=9999   your_jar_file.jar

请看一下这条线。有很多例子。

相关问题