java - 在启动应用程序之前如何在项目中创建目录?

标签 java spring gradle

我正在使用 tomcat 和 gradle 创建 Spring MVC 应用程序,用户可以从前端上传一些文件,然后可以对其进行更改。 我想将该文件上传到项目目录(scr/tmp/env)。如果我手动创建目录,它可以工作,但我无法将空包推送到 git 中。这意味着当有人将我的项目下载到另一台计算机时,他的项目中不会有这些目录。 例如,我可以使用 public static void 方法和以下代码创建一些类:

File file = new File("src/tmp/dbEnv/");
if (!file.exists()) {
  Files.createDirectories(Paths.get("src/tmp/dbEnv/"));
}

它将创建目录。但是如果我将此代码粘贴到 spring 方法中(例如在 Controller 或 dao 类中),则不会创建目录。

您能给我建议吗,如何在开始之前在项目中创建目录并在完成应用程序之前清除这些目录?也许Spring或Gradle可以做到这一点?谢谢。

最佳答案

您可以使用应用程序监听器来访问应用程序启动和拆卸事件,如下所示:

@Configuration
public class TempDirConfig {

  private static final Path TEMP_PATH = Paths.get( "/tmp/dbEnv" );

  @Bean( "createTempDir" )
  public ApplicationListener<ContextStartedEvent> createTempDir() {
    return event -> {
      try {
        if ( !Files.exists( TEMP_PATH ) ) {
          Files.createDirectories( TEMP_PATH );
        }
      }
      catch ( IOException aE ) {
        // oops
      }
    };
  }

  @Bean( "removeTempDir" )
  public ApplicationListener<ContextClosedEvent> removeTempDir() {
    return event -> {
      try {
        if ( Files.exists( TEMP_PATH ) ) {
          FileSystemUtils.deleteRecursively( TEMP_PATH );
        }
      }
      catch ( IOException aE ) {
        // oops
      }
    };
  }
}

关于java - 在启动应用程序之前如何在项目中创建目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59497888/

相关文章:

testing - Gradle Testkit无法将插件添加到自定义源集

java - 如何用数据库数据填充 TableView

java - 为什么 Spring 在混淆后看不到我的 @Resource 注解的对象?

java - 专业程序员使用哪种风格,使用 try 和 catch 还是在代码中添加错误处理?

java - 有条件运行的 Cucumber 特定场景

spring - 如何在 FeignClient 中使用多个查询字符串参数调用 url?

java - 通过超链接将多个大型数组从 Servlet 传递到另一个 Servlet

java - MVC 模式的逻辑太多?

gradle - Gradle flyway如何确定架构版本并确定是否需要升级?

android - 如何在平板电脑上运行可在智能手机上运行的应用程序?