1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.bremersee.spring.boot.autoconfigure.minio;
18
19 import io.minio.MinioClient;
20 import okhttp3.HttpUrl;
21 import org.apache.commons.logging.Log;
22 import org.apache.commons.logging.LogFactory;
23 import org.bremersee.minio.MinioErrorHandler;
24 import org.bremersee.minio.MinioOperations;
25 import org.bremersee.minio.MinioTemplate;
26 import org.springframework.beans.factory.ObjectProvider;
27 import org.springframework.boot.autoconfigure.AutoConfiguration;
28 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
29 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
30 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
31 import org.springframework.boot.context.event.ApplicationReadyEvent;
32 import org.springframework.boot.context.properties.EnableConfigurationProperties;
33 import org.springframework.context.annotation.Bean;
34 import org.springframework.context.event.EventListener;
35 import org.springframework.util.ClassUtils;
36
37
38
39
40
41
42 @AutoConfiguration
43 @ConditionalOnClass(name = {
44 "io.minio.MinioClient",
45 "org.bremersee.minio.MinioTemplate"
46 })
47 @ConditionalOnProperty(
48 prefix = "bremersee.minio",
49 name = {"url", "access-key", "secret-key"})
50 @EnableConfigurationProperties(MinioProperties.class)
51 public class MinioAutoConfiguration {
52
53 private static final Log log = LogFactory.getLog(MinioAutoConfiguration.class);
54
55 private final MinioProperties properties;
56
57
58
59
60
61
62 public MinioAutoConfiguration(MinioProperties properties) {
63 this.properties = properties;
64 }
65
66
67
68
69 @EventListener(ApplicationReadyEvent.class)
70 public void init() {
71 log.info(String.format("""
72
73 *********************************************************************************
74 * %s
75 *********************************************************************************
76 * properties = %s
77 *********************************************************************************""",
78 ClassUtils.getUserClass(getClass()).getSimpleName(),
79 properties));
80 }
81
82
83
84
85
86
87 @ConditionalOnMissingBean
88 @Bean
89 public MinioClient minioClient() {
90
91 log.info("Creating MinioClient ...");
92 MinioClient minioClient = MinioClient.builder()
93 .credentials(properties.getAccessKey(), properties.getSecretKey())
94 .endpoint(HttpUrl.get(properties.getUrl()))
95 .build();
96 minioClient.setTimeout(
97 properties.getConnectTimeout().toMillis(),
98 properties.getWriteTimeout().toMillis(),
99 properties.getReadTimeout().toMillis()
100 );
101 return minioClient;
102 }
103
104
105
106
107
108
109
110
111 @ConditionalOnMissingBean(MinioOperations.class)
112 @Bean
113 public MinioTemplate minioTemplate(
114 MinioClient minioClient,
115 ObjectProvider<MinioErrorHandler> errorHandlerProvider) {
116
117 log.info("Creating MinioTemplate ...");
118 MinioTemplate minioTemplate = new MinioTemplate(minioClient);
119 minioTemplate.setErrorHandler(errorHandlerProvider.getIfAvailable());
120 return minioTemplate;
121 }
122
123 }