Unresolved include directive in modules/ROOT/pages/index.adoc - include::./includes/attributes.adoc[]

Integrate Min.io sdk compatible with all S3 Api compliant vendors. Available for jdk and native runtime.

Project configuration

Once you have your Quarkus project configured you can add the minio extension to your project by running the following command in your project base directory:

./mvnw quarkus:add-extension -Dextensions="minio"

This will add the following to your pom.xml:

<dependency>
    <groupId>io.quarkiverse.minio</groupId>
    <artifactId>quarkus-minio</artifactId>
    <version>{quarkus-minio-version}</version>
</dependency>

Native support only

If you need configless programmatic only creation of MinioClient, then your project should be configured as followed :

<dependency>
    <groupId>io.quarkiverse.minio</groupId>
    <artifactId>quarkus-minio-native</artifactId>
    <version>{quarkus-minio-version}</version>
</dependency>

Usage

An io.minio.MinioClient is made available to your application as a CDI bean if configuration is found.

package com.acme.minio;

import io.minio.MinioClient;

import jakarta.enterprise.context.ApplicationScoped;

import jakarta.inject.Inject;

@ApplicationScoped
public class SampleService {

    @Inject
    MinioClient minioClient;

    @ConfigProperty(name = "minio.bucket-name")
    String bucketName;

    public String getObject(String name) {
        try (InputStream is = minio.getObject(
                GetObjectArgs.builder()
                        .bucket(bucketName)
                        .object(objectName)
                        .build())
        ) {
           // Do whatever you want...
        } catch (MinioException e) {
            throw new IllegalStateException(e);
        }
    }

}

Async Minio Client

In addition to the blocking MinioClient the extension also provides io.minio.MinioAsyncClient beans with no extra configuration effort.

Just specify MinioAsyncClient in place of MinioClient and you’re good to go.

package com.acme.minio;

import io.minio.MinioAsyncClient;

// ...

@ApplicationScoped
public class SampleService {

    @Inject
    MinioAsyncClient minioClient;

    // ...

    public String getObject(String name) {
        try (InputStream is = minio.getObject(
                GetObjectArgs.builder()
                        .bucket(bucketName)
                        .object(objectName)
                        .build())
                        .get() // Waits for the result in a blocking fashion
        ) {
           // Do whatever you want...
        } catch (MinioException e) {
            // ...
        }
    }

}

Multiple Minio clients

Configuring Multiple MinioClients

Defining multiple minio clients works exactly the same way as defining a single minio client, with one important change: you define a name.

In the following example, you have 3 different minio clients:

  • The default one,

  • A minio client named other,

  • A minio client named public,

each with its own configuration.

quarkus.minio.url=http://localhost
quarkus.minio.port=9000
quarkus.minio.secure=false
quarkus.minio.access-key=minioaccess
quarkus.minio.secret-key=miniosecret

quarkus.minio.other.enabled=true
quarkus.minio.other.url=acme
quarkus.minio.other.access-key=minioaccess
quarkus.minio.other.secret-key=miniosecret

quarkus.minio.public.enabled=true
quarkus.minio.public.url=http://public:9000
quarkus.minio.public.secure=false
quarkus.minio.public.access-key=minioaccess
quarkus.minio.public.secret-key=miniosecret

Notice there is an extra bit in the key. The syntax is as follows: quarkus.minio.[optional name.][bucket property].

Named minio clients need to specify at least one build time property so that Quarkus knows they exist. Generally this will be the enabled property.

Named MinioClient injection

When using multiple minio clients, each MinioClient also has the io.quarkiverse.minio.client.MinioQualifier qualifier with the name of the minio client as the value. Using the above properties to configure three different minio clients, you can also inject each one as follows:

@Inject
MinioClient defaultMinioClient;

@Inject
@MinioQualifier("public")
MinioClient publicMinioClient;

@Inject
@MinioQualifier("other")
MinioClient otherMinioClient;

Configuration Reference

Unresolved include directive in modules/ROOT/pages/index.adoc - include::includes/quarkus-minio.adoc[]