Spring version upgrade, DownloaderImpl complete (need some tests!)
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>2.2.6.RELEASE</version>
|
||||
<version>2.3.2.RELEASE</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
<groupId>me.bearns</groupId>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package me.bearns.fias.service;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.concurrent.Future;
|
||||
import java.io.File;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public interface Downloader {
|
||||
|
||||
public Future<InputStream> download(String url);
|
||||
public CompletableFuture<File> download(String url);
|
||||
}
|
||||
|
||||
@@ -1,28 +1,65 @@
|
||||
package me.bearns.fias.service;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Future;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.URL;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.util.concurrent.*;
|
||||
|
||||
@Component
|
||||
public class DownloaderImpl implements Downloader {
|
||||
|
||||
private static final ExecutorService pool = Executors.newCachedThreadPool();
|
||||
private static final String BASE_DIRECTORY = "/var/opt/fias";
|
||||
private static final ConcurrentMap<String,CompletableFuture<File>> locks = new ConcurrentHashMap();
|
||||
|
||||
@Override
|
||||
public Future<InputStream> download(String url) {
|
||||
public CompletableFuture<File> download(String url) {
|
||||
|
||||
CompletableFuture<InputStream> completableFuture
|
||||
= new CompletableFuture<>();
|
||||
CompletableFuture<File> start = new CompletableFuture<>();
|
||||
|
||||
//syncronized
|
||||
final CompletableFuture<File> feature = locks.putIfAbsent(url, start);
|
||||
|
||||
//return earlier runned feature
|
||||
if(feature != start) return feature;
|
||||
|
||||
pool.submit(() -> {
|
||||
InputStream is = null;
|
||||
//todo
|
||||
|
||||
completableFuture.complete(is);
|
||||
final URL conn;
|
||||
final Path path;
|
||||
|
||||
try{
|
||||
conn = new URL(url);
|
||||
path = Paths.get(BASE_DIRECTORY, conn.getFile());
|
||||
|
||||
} catch (IOException e) {
|
||||
feature.obtrudeException(e);
|
||||
return;
|
||||
}
|
||||
|
||||
final File file = path.toFile();
|
||||
|
||||
if(!file.exists()) {
|
||||
|
||||
try (BufferedInputStream in = new BufferedInputStream(conn.openStream())) {
|
||||
|
||||
Files.copy(in, path, StandardCopyOption.REPLACE_EXISTING);
|
||||
|
||||
} catch (IOException e) {
|
||||
// handle exception
|
||||
feature.obtrudeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
feature.complete(file);
|
||||
});
|
||||
|
||||
return completableFuture;
|
||||
return feature;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import me.bearns.fias.repository.FiasVersionRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.stream.Stream;
|
||||
@@ -63,7 +63,7 @@ public class FiasUpdater implements Updater {
|
||||
updates.sort((o1, o2) -> Math.toIntExact(o1.getVersionId() - o2.getVersionId()));
|
||||
|
||||
//just for test
|
||||
final Stream<Future<InputStream>> stream = updates.stream().map(u -> downloader.download(reloadFlag ? u.getFiasCompleteXmlUrl() : u.getFiasDeltaXmlUrl()));
|
||||
final Stream<Future<File>> stream = updates.stream().map(u -> downloader.download(reloadFlag ? u.getFiasCompleteXmlUrl() : u.getFiasDeltaXmlUrl()));
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user