Beispielcode mit Minio aus Java

Vor kurzem habe ich Minio, einen S3-kompatiblen Speicher, zum automatisierten Testen von Anwendungen verwendet, die auf Amazon S3 basieren. Erstellen Sie jetzt Beispielcode für den Zugriff auf Minio von Java (Spring Boot) mit dem AWS SDK für Java.

Was ist Minio?

Es ist einer der S3-Klone und mit S3 kompatibel, sodass Sie mit AWS SDK usw. auf dieselbe Weise wie mit Amazon S3 darauf zugreifen können. Praktisch, da Sie problemlos S3-kompatiblen Speicher verwenden können.

Voraussetzungen

$ docker version
docker version
Client:
 Version:      1.12.5
 API version:  1.24
 Go version:   go1.6.4
 Git commit:   7392c3b
 Built:        Fri Dec 16 06:14:34 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.5
 API version:  1.24
 Go version:   go1.6.4
 Git commit:   7392c3b
 Built:        Fri Dec 16 06:14:34 2016
 OS/Arch:      linux/amd64
# java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (IcedTea 3.3.0) (Alpine 8.121.13-r0)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
# mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00)
Maven home: /usr/share/java/maven-3
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8-openjdk/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.4.59-boot2docker", arch: "amd64", family: "unix"

Verfahren

In diesem Abschnitt wird beschrieben, wie Sie Minio als Docker-Container betreiben und über die Spring Boot-Anwendung darauf zugreifen. Der erstellte Beispielcode finden Sie unter u6k / sample-minio.

Versuchen Sie, den Minio-Container auszuführen

Lassen Sie es uns unter Bezugnahme auf "Docker Container" von Minio Docs betreiben.

$ docker run \
    -d \
    --name s3 \
    -p 9000:9000 \
    minio/minio:edge server /export

Wenn es normal startet, wird das Protokoll wie unten gezeigt ausgegeben.

$ docker logs s3
Created minio configuration file successfully at /root/.minio

Endpoint:  http://172.17.0.2:9000  http://127.0.0.1:9000
AccessKey: xxxxxxxxxxxxxxxxxxxx
SecretKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Region:    us-east-1
SQS ARNs:  <none>

Browser Access:
   http://172.17.0.2:9000  http://127.0.0.1:9000

Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide
   $ mc config host add myminio http://172.17.0.2:9000 C05JGTT0UWNXW25Y4IHN zg1JZrFIAWM0dZmXkPF93ZOXXf6Vj3F/QgycmLZE

Object API (Amazon S3 compatible):
   Go:         https://docs.minio.io/docs/golang-client-quickstart-guide
   Java:       https://docs.minio.io/docs/java-client-quickstart-guide
   Python:     https://docs.minio.io/docs/python-client-quickstart-guide
   JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide

Drive Capacity: 17 GiB Free, 18 GiB Total

Minio startet an Port 9000, stellen Sie also mit einem Webbrowser oder einer API eine Verbindung zu Port 9000 her. Wenn Sie versuchen, auf "http: // localhost: 9000 /" zuzugreifen, wird die Minio-Weboberfläche angezeigt. Versuchen Sie also, sich anzumelden. Zu diesem Zeitpunkt erstellen Sie bitte einige Eimer. Lassen Sie uns die Liste der Buckets mit dem Beispielcode anzeigen.

Der Zugriffsschlüssel und der geheime Schlüssel werden im Protokoll ausgegeben. Verwenden Sie diese Option, wenn Sie mit einem Webbrowser oder einer API darauf zugreifen. Wenn Sie den Zugriffsschlüssel und den geheimen Schlüssel im automatischen Test usw. festlegen möchten, können Sie sie beliebig festlegen, indem Sie die Umgebungsvariablen "MINIO_ACCESS_KEY" und "MINIO_SECRET_KEY" angeben.

Versuchen Sie, über die Spring Boot-Anwendung auf Minio zuzugreifen

@Value("${s3.url}")
private String s3url;

@Value("${s3.access-id}")
private String s3accessId;

@Value("${s3.secret-key}")
private String s3secretKey;

@Value("${s3.timeout}")
private int s3timeout;

Die S3-Endpunkt-URL, der Zugriffsschlüssel, der geheime Schlüssel und der Zeitlimitwert (Millisekunden) werden als Einstellungsinformationen erfasst. Da es sich um eine SpringBoot-Anwendung handelt, kann sie in "application.properties" oder Umgebungsvariablen angegeben werden.

AWSCredentials credentials = new BasicAWSCredentials(this.s3accessId, this.s3secretKey);

Erstellen Sie Anmeldeinformationen mit den Zugriffs- und geheimen Schlüsseln. Es scheint eine andere Möglichkeit zu geben, Anmeldeinformationen aus einem Zertifikat zu erstellen.

ClientConfiguration configuration = new ClientConfiguration();
configuration.setSocketTimeout(this.s3timeout);
configuration.setSignerOverride("AWSS3V4SignerType");

Geben Sie den Zeitlimitwert und die Signaturmethode an. Dieser Bereich ist magisch.

AmazonS3 s3 = AmazonS3ClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(credentials))
                .withEndpointConfiguration(new EndpointConfiguration(this.s3url, "us-east-1"))
                .withClientConfiguration(configuration)
                .withPathStyleAccessEnabled(true)
                .build();

Initialisieren Sie den S3-Client, indem Sie Anmeldeinformationen, S3-Endpunkt, Clientkonfigurationsinformationen und Pfadstil festlegen.

Der S3-Endpunkt gibt zusätzlich zur URL eine Region an. Ich codiere hier "us-east-1" hart, weil Minio standardmäßig "us-east-1" ist.

In Bezug auf den Pfadstil ist dies erforderlich, da der Bucket-Name in AWS S3 ein DNS-Name ist, während Minio ein Pfad ist.

for (Bucket bucket : s3.listBuckets()) {
    L.info("bucket={}", bucket.getName());
}

Die Liste der Buckets wird erfasst und der Bucket-Name wird im Protokoll ausgegeben.

Erstellen Sie ein Docker-Image und versuchen Sie, über einen Docker-Container darauf zuzugreifen

Erstellen Sie zunächst das Docker-Image.

$ docker build -t sample-minio .

Starten Sie den Minio-Container im Voraus, erstellen Sie einige Eimer und starten Sie den Sample-Minio-Container.

$ docker run \
    --rm \
    --link s3:s3 \
    -e S3_URL=http://s3:9000/ \
    -e S3_ACCESS-ID=xxxxxxxxxxxxxxxxxxxx \
    -e S3_SECRET-KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
    -e S3_TIMEOUT=10000 \
    -v $HOME/.m2:/root/.m2 \
    -v $(pwd):/var/my-app \
    sample-minio

Wenn das Protokoll normal abgeschlossen ist, wird es wie unten gezeigt ausgegeben.

2017-04-30 09:14:54.463  INFO 1 --- [           main] me.u6k.sample_minio.Main                 : s3.url=http://s3:9000/
2017-04-30 09:14:54.476  INFO 1 --- [           main] me.u6k.sample_minio.Main                 : s3.access-id=xxxxxxxxxxxxxxxxxxxx
2017-04-30 09:14:54.476  INFO 1 --- [           main] me.u6k.sample_minio.Main                 : s3.secret-key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2017-04-30 09:14:54.476  INFO 1 --- [           main] me.u6k.sample_minio.Main                 : s3.timeout=10000
2017-04-30 09:14:57.357  INFO 1 --- [           main] me.u6k.sample_minio.Main                 : bucket=bar
2017-04-30 09:14:57.357  INFO 1 --- [           main] me.u6k.sample_minio.Main                 : bucket=boo
2017-04-30 09:14:57.357  INFO 1 --- [           main] me.u6k.sample_minio.Main                 : bucket=foo

abschließend

Recommended Posts

Beispielcode mit Minio aus Java
Java-Beispielcode 02
Java-Beispielcode 03
Java-Beispielcode 04
Java EE 8 (unter Verwendung von NetBeans IDE 8.2) ab Beispielcode Teil 1 Umgebungskonstruktion
Beispielcode für elektronische Signatur (JAVA)
Java Parallel Code Sample Collection
Verwenden von Docker von Java Gradle
Java 9 neue Funktionen und Beispielcode
[Java] Eliminierung des Kesselplattencodes mit Lombok
[Java] Eliminierung des Kesselplattencodes mit Lombok 2
Beispiel für die Verwendung der Bulk-API von Salesforce vom Java-Client mit PK-Chunking
Beispielcode für die Singleton-Implementierung mit enum
Datenverarbeitung mit der Stream-API von Java 8
Stellen Sie mit Eclipse eine Verbindung von Java zu MySQL her
[Java] Fluss vom Quellcode zur Ausführung
Führen Sie Java-Code von cpp auf cocos2dx aus
Führen Sie Java-Code skriptweise aus
Java-Code-TIPPS
[Java] Generics-Beispiel
Selenprobe (Java)
Java GUI Beispiel
Java-Zeichencode
Greifen Sie über Java mit Axis2 Enterprise WSDL auf Forec.com zu
[Java] Konvertieren Sie DB-Code mit enum in einen Codewert
Versuchen Sie es mit Sourcetrail (Win-Version) mit Java-Code
Versuchen Sie es mit Sourcetrail (MacOS-Version) mit Java-Code
Versuchen Sie, mit JZOS von Java aus auf das Dataset zuzugreifen
Erstellen Sie mit Gradle mit VSCode Java → Ausführen
Schreiben Sie Selenium Java-Bindungscode mit Silk WebDriver
SSH-Verbindung mit SSHJ aus der Java6-App
Sortieren mit Java-Komparator
Rufen Sie Java von JRuby aus auf
Erste Schritte mit Java-Programmen mit Visual Studio Code
Geben Sie den Maximalwert eines Arrays mithilfe der Java-Standardausgabe aus
Beispielcode zum Konvertieren von List in List <String> in Java Stream
Erstellen Sie die VS Code + WSL + Java + Gradle-Umgebung von Grund auf neu
Änderungen von Java 8 zu Java 11
Summe von Java_1 bis 100
GUI-Beispiel mit JavaFX
Eval Java-Quelle von Java
Apache Beam Beispielcode
[Java] Beispiel für ein Urlaubsurteil
[Java] Textextraktion aus PowerPoint (ppt) mit Apache POI
Schrottpraxis mit Java ②
Von Java zu Ruby !!
Verwenden der Datenbank (SQL Server 2014) aus einem Java-Programm 2018/01/04
Schrottpraxis mit Java ①
Beispielcode für die Protokollausgabe von Java + SLF4J + Logback
Unterschiede im Code bei Verwendung des Längensystems in Java
Java-Codebeispiel zum Erfassen und Anzeigen von DBLINK-Quell- und Zieldaten in Oracle Database mithilfe von DBLINK
Beispielcode zum Parsen von Datum und Uhrzeit mit Java SimpleDateFormat
Erstellen Sie einen QR-Code für Google Authenticator mit ZXing in Java
Korrigieren Sie den Zeichencode in Java und lesen Sie von der URL
Die Geschichte der Verwendung von Java Input Waiting (Scanner) mit VSCode
Ein einfaches CRUD-Beispiel mit Java Servlet / JSP und MySQL
Versuchen Sie es mit RocksDB mit Java