AvalonS3Properties.kt
package io.github.lishangbu.avalon.s3.properties
import org.springframework.boot.context.properties.ConfigurationProperties
import java.time.Duration
import java.util.LinkedHashMap
/**
* Avalon S3 统一配置。
*
* 基于命名 client 暴露原生 AWS SDK client 与能力 facade。
*/
@ConfigurationProperties(prefix = AvalonS3Properties.PREFIX)
class AvalonS3Properties {
/** 是否启用自动配置。 */
var enabled: Boolean = false
/** 默认 client 名称。 */
var defaultClientName: String = DEFAULT_CLIENT_NAME
/** 命名 client 配置。 */
var clients: MutableMap<String, S3ClientProperties> =
linkedMapOf(
DEFAULT_CLIENT_NAME to S3ClientProperties(),
)
companion object {
const val PREFIX: String = "avalon.s3"
const val DEFAULT_CLIENT_NAME: String = "default"
}
}
/** 单个命名 S3 client 的配置。 */
class S3ClientProperties {
/** 是否启用当前 client。 */
var enabled: Boolean = true
/** 提供方类型。 */
var provider: S3Provider = S3Provider.AWS
/** AWS 区域。 */
var region: String? = null
/** 自定义 S3 端点。 */
var endpoint: String? = null
/** Access point / ARN 是否允许跨区域访问。 */
var useArnRegionEnabled: Boolean = true
/** 是否启用双栈。 */
var dualstackEnabled: Boolean = false
/** 是否启用 S3 accelerate。 */
var accelerateModeEnabled: Boolean = false
/** 是否启用路径风格访问。 */
var pathStyleAccess: Boolean? = null
/** 是否启用 chunked encoding。 */
var chunkedEncodingEnabled: Boolean? = null
/** 对象校验和验证。 */
var checksumValidationEnabled: Boolean? = null
/** 默认桶别名。 */
var bucketAliases: MutableMap<String, String> = LinkedHashMap()
/** 凭证配置。 */
var credentials: S3CredentialsProperties = S3CredentialsProperties()
/** 重试与超时配置。 */
var overrides: S3ClientOverrideProperties = S3ClientOverrideProperties()
/** HTTP 客户端配置。 */
var http: S3HttpClientProperties = S3HttpClientProperties()
/** 传输配置。 */
var transfer: S3TransferProperties = S3TransferProperties()
}
/** 静态凭证配置。 */
class S3CredentialsProperties {
/** Access key id。 */
var accessKeyId: String? = null
/** Secret access key。 */
var secretAccessKey: String? = null
/** Session token。 */
var sessionToken: String? = null
}
/** 覆盖配置。 */
class S3ClientOverrideProperties {
/** API 调用总超时。 */
var apiCallTimeout: Duration? = null
/** 单次重试超时。 */
var apiCallAttemptTimeout: Duration? = null
}
/** HTTP 传输配置。 */
class S3HttpClientProperties {
/** 连接超时。 */
var connectionTimeout: Duration? = null
/** 同步 socket 超时。 */
var socketTimeout: Duration? = null
/** 异步读取超时。 */
var readTimeout: Duration? = null
/** 异步写入超时。 */
var writeTimeout: Duration? = null
/** 同步客户端连接池大小。 */
var maxConnections: Int? = null
/** 异步客户端并发数。 */
var maxConcurrency: Int? = null
}
/** Transfer Manager 配置。 */
class S3TransferProperties {
/** 是否启用标准异步 multipart 支持。 */
var multipartEnabled: Boolean = true
}