Spring version upgrade, DownloaderImpl complete (need some tests!)
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-parent</artifactId>
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
<version>2.2.6.RELEASE</version>
|
<version>2.3.2.RELEASE</version>
|
||||||
<relativePath/> <!-- lookup parent from repository -->
|
<relativePath/> <!-- lookup parent from repository -->
|
||||||
</parent>
|
</parent>
|
||||||
<groupId>me.bearns</groupId>
|
<groupId>me.bearns</groupId>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package me.bearns.fias.service;
|
package me.bearns.fias.service;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.File;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
public interface Downloader {
|
public interface Downloader {
|
||||||
|
|
||||||
public Future<InputStream> download(String url);
|
public CompletableFuture<File> download(String url);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +1,65 @@
|
|||||||
package me.bearns.fias.service;
|
package me.bearns.fias.service;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import org.springframework.stereotype.Component;
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.Future;
|
|
||||||
|
|
||||||
|
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 {
|
public class DownloaderImpl implements Downloader {
|
||||||
|
|
||||||
private static final ExecutorService pool = Executors.newCachedThreadPool();
|
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
|
@Override
|
||||||
public Future<InputStream> download(String url) {
|
public CompletableFuture<File> download(String url) {
|
||||||
|
|
||||||
CompletableFuture<InputStream> completableFuture
|
CompletableFuture<File> start = new CompletableFuture<>();
|
||||||
= new CompletableFuture<>();
|
|
||||||
|
//syncronized
|
||||||
|
final CompletableFuture<File> feature = locks.putIfAbsent(url, start);
|
||||||
|
|
||||||
|
//return earlier runned feature
|
||||||
|
if(feature != start) return feature;
|
||||||
|
|
||||||
pool.submit(() -> {
|
pool.submit(() -> {
|
||||||
InputStream is = null;
|
|
||||||
//todo
|
//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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
@@ -63,7 +63,7 @@ public class FiasUpdater implements Updater {
|
|||||||
updates.sort((o1, o2) -> Math.toIntExact(o1.getVersionId() - o2.getVersionId()));
|
updates.sort((o1, o2) -> Math.toIntExact(o1.getVersionId() - o2.getVersionId()));
|
||||||
|
|
||||||
//just for test
|
//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