Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 只有在第一次启动Spring应用程序时才运行某些方法的最佳方法是什么?_Java_Spring_Kotlin - Fatal编程技术网

Java 只有在第一次启动Spring应用程序时才运行某些方法的最佳方法是什么?

Java 只有在第一次启动Spring应用程序时才运行某些方法的最佳方法是什么?,java,spring,kotlin,Java,Spring,Kotlin,当应用程序第一次启动时,我只需要运行一些方法一次。在SpringJava/kotlin中有没有实现这一点的基本方法 UPD: 这第一次意味着我有了一个新的应用程序,它应该在启动时运行一些方法,但是当我重新启动这个应用程序时,我不希望它再次运行这个方法你可以用@PostConstruct注释你的方法(确保你已经创建了Springbean) 在该方法开始时,如果不继续使用该方法,您可以检查项目目录中是否存在文件“dummy.txt”。最后创建文件“dummy.txt” 您还可以在第一次启动java进

当应用程序第一次启动时,我只需要运行一些方法一次。在SpringJava/kotlin中有没有实现这一点的基本方法

UPD:
这第一次意味着我有了一个新的应用程序,它应该在启动时运行一些方法,但是当我重新启动这个应用程序时,我不希望它再次运行这个方法

你可以用@PostConstruct注释你的方法(确保你已经创建了Springbean)

在该方法开始时,如果不继续使用该方法,您可以检查项目目录中是否存在文件“dummy.txt”。最后创建文件“dummy.txt”

您还可以在第一次启动java进程时添加属性,如下所示:

java -DfirstTime=true -jar myjar.jar 

默认情况下,第一次将
设为false

我建议您使用ApplicationReadyEvent。根据,ApplicationReadyEvent是一个:

事件尽可能晚地发布,以指示应用程序已准备好为请求提供服务

因此,您可以实现自己的ApplicationListener侦听ApplicationReadyEvent,并仅在应用程序准备就绪时运行代码,例如:

@Component
@Order(0)
class CustomApplicationListener implements ApplicationListener<ApplicationReadyEvent> {

  @Override
  public void onApplicationEvent(ApplicationReadyEvent event) {
      // run your code
  }

}

@组件
@订单(0)
类CustomApplicationListener实现ApplicationListener{
@凌驾
ApplicationEvent上的公共无效(ApplicationReadyEvent事件){
//运行你的代码
}
}

什么是“第一次”呢?有史以来第一次?还是在给定的服务器中?新版本的应用程序有用吗?你需要一些来在某处存储标志。。。在启动时运行可以使用例如PostConstructp来完成。我会第一次实现一个单独的应用程序,不要将它与spring appRunning混淆,因为只有一次运行某个程序意味着某种形式的持久性。您甚至可能不需要标志,只要尝试检测第一次运行的效果,如果存在,则不运行安装方法的其余部分。此外,如果更改与数据库相关,我建议使用Flyway或Liquibase等数据库迁移工具。如果应用程序多次重启,这将如何阻止运行?不会。当我输入答案时,问题被更新了。但是,onApplicationEvent方法可以处理多次重启,例如在第一次运行时存储一个标志(在文件、数据库等上),并在其他运行时检查该标志。是的,我认为标志是唯一的选项,因此ApplicationListener可以,thanks@Pixel那么,为什么你批准了这个答案,而不是建议使用旗帜的答案呢?