我正在用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方法中(例如,在控制器或dao类中),则不会创建目录。
能否给我一些建议,如何在启动之前在项目中创建目录,并在完成应用程序之前清除它们?可能是Spring或Gradle可以做到吗?谢谢。
答案 0 :(得分:1)
您可以使用应用程序侦听器来利用应用程序启动和拆卸事件,如下所示:
@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
}
};
}
}
答案 1 :(得分:0)
我无法将空包推送到git
在这种情况下,我们向该目录添加.gitkeep
(类似于.gitignore
)。目录不再为空,但是.
将该文件隐藏了。
File file = new File("src/tmp/dbEnv/");
我想这会在其他地方创建文件,请尝试these getResource()
-methods之一。
也许是Spring或Gradle可以做到吗?
格雷迪也是我的第一个念头。在启动时创建目录。但是Spring和Gradle都不会(可靠地)检测到应用程序的关闭状态...您可以在.gitkeep
上添加任何内容(但如果使用了.gitignore
,则只是为了防止...提交。和/或您可以在应用程序启动期间清除目录(例如,在您提到的主方法中)。
答案 2 :(得分:0)
URL路径= ClassName.class.getClass()。getProtectionDomain()。getCodeSource()。getLocation();
// URL路径= this.getClass()。getProtectionDomain()。getCodeSource()。getLocation();
String libpath = path.toString()。substring(0,path.toString()。indexOf(“ env /”));
// Libpath将使用scr / tmp /
返回绝对路径答案 3 :(得分:0)
我的解决方案:
public class StartAppFilesProcessorListener implements ApplicationListener<ContextRefreshedEvent> {
private static final String PATH = System.getProperty("user.dir") + "/src/tmp/dbEnv";
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
File file = new File(PATH);
if (!file.exists()) {
try {
Files.createDirectories(Paths.get(PATH));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}