OSS服务进行后端的存储附件

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 1个月
简介: OSS服务进行后端的存储附件

当操作完OSS的流后,需要关闭对应的流,否则会造成资源泄漏或者占用服务资源过多。关闭流的方式如下:

```java

if (inputStream != null) {

   try {

       inputStream.close();

   } catch (IOException e) {

       e.printStackTrace();

   }

}

if (outputStream != null) {

   try {

       outputStream.close();

   } catch (IOException e) {

       e.printStackTrace();

   }

}

```

关于OSS连接池的使用,推荐使用Alibaba Cloud SDK for Java中提供 OSSClientBuilder 来构建连接池的连接。在使用OSS服务时,我们一般都需要创建 OSSClient 实例,而 OSSClient 并不是线程安全的,所以需要使用连接池来减少每个线程创建的 OSSClient 实例和连接数。 示例代码如下:

```java

import com.aliyun.oss.OSSClient;

import com.aliyun.oss.OSSClientBuilder;

import com.aliyun.oss.common.auth.DefaultCredentialProvider;

import com.aliyun.oss.common.comm.Protocol;

import com.aliyun.oss.common.utils.AuthUtils;

import java.util.ArrayList;

import java.util.List;

import java.util.concurrent.ArrayBlockingQueue;

import java.util.concurrent.BlockingQueue;

import java.util.concurrent.TimeUnit;

public class OSSClientPool {

   // 连接池最大连接数

   private static int DEFAULT_MAX_CONNECTIONS = 100;

   // 默认的空闲时间(单位:毫秒)

   private static long DEFAULT_IDLE_TIMEOUT = 5 * 60 * 1000;

   // OSS连接池

   private BlockingQueue<OSSClient> ossClientPool = new ArrayBlockingQueue<OSSClient>(DEFAULT_MAX_CONNECTIONS);

   // OSS连接池中最多使用的连接数

   private int maxConnections;

   // OSS连接池中空闲连接的超时时间

   private long idleTimeout;

   // 构造函数

   public OSSClientPool() {

       this(DEFAULT_MAX_CONNECTIONS, DEFAULT_IDLE_TIMEOUT);

   }

   public OSSClientPool(int maxConnections, long idleTimeout) {

       this.maxConnections = maxConnections;

       this.idleTimeout = idleTimeout;

       initialize();

   }

   // 初始化OSS连接池

   private void initialize() {

       for (int i = 0; i < maxConnections; i++) {

           OSSClient ossClient = buildOSSClient();

           if (ossClient != null) {

               ossClientPool.add(ossClient);

           }

       }

   }

   // 构建OSSClient实例

   private OSSClient buildOSSClient() {

       String endpoint = "yourEndPoint"; // 替换成自己的endpoint

       String accessKeyId = "yourAccessKeyId"; // 替换成自己的accessKeyId

       String accessKeySecret = "yourAccessKeySecret"; // 替换成自己的accessKeySecret

       boolean isCname = false; // 非CNAME模式

       OSSClient ossClient = null;

       try {

           ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

           ossClient.setEndpoint(endpoint);

           ossClient.setCredentials(new DefaultCredentialProvider(accessKeyId, accessKeySecret, null));

           ossClient.setProtocol(Protocol.HTTPS);

           ossClient.setTimeout(30000);

       } catch (Exception e) {

           e.printStackTrace();

       }

       return ossClient;

   }

   // 获取OSSClient连接

   public OSSClient getOSSClient() {

       OSSClient ossClient = null;

       try {

           ossClient = ossClientPool.poll(idleTimeout, TimeUnit.MILLISECONDS);

       } catch (InterruptedException e) {

           e.printStackTrace();

       }

       if (ossClient == null) {

           ossClient = buildOSSClient();

       }

       return ossClient;

   }

   // 释放OSSClient连接

   public boolean releaseOSSClient(OSSClient ossClient) {

       return (ossClientPool.add(ossClient) || ossClientPool.offer(ossClient));

   }

   // 销毁OSS连接池

   public void destroy() {

       List<OSSClient> list = new ArrayList<OSSClient>();

       ossClientPool.drainTo(list);

       for (OSSClient ossClient : list) {

           ossClient.shutdown();

       }

   }

}

```

通过上述的方式,我们可以方便地使用OSS服务进行后端的存储附件。

相关实践学习
对象存储OSS快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
相关文章
|
8月前
|
存储 人工智能 Cloud Native
阿里云渠道商:OSS与传统存储系统的差异在哪里?
本文对比传统存储与云原生对象存储OSS的架构差异,涵盖性能、成本、扩展性等方面。OSS凭借高持久性、弹性扩容及与云服务深度集成,成为大数据与AI时代的优选方案。
|
存储 人工智能 Kubernetes
AI 场景深度优化!K8s 集群 OSSFS 2.0 存储卷全面升级,高效访问 OSS 数据
阿里云对象存储OSS是一款海量、安全、低成本、高可靠的云存储服务,是用户在云上存储的高性价比选择…
|
10月前
|
存储 运维 安全
阿里云国际站OSS与自建存储的区别
阿里云国际站对象存储OSS提供海量、安全、低成本的云存储解决方案。相比自建存储,OSS具备易用性强、稳定性高、安全性好、成本更低等优势,支持无限扩展、自动冗余、多层防护及丰富增值服务,助力企业高效管理数据。
|
存储 关系型数据库 MySQL
成本直降30%!RDS MySQL存储自动分层实战:OSS冷热分离架构设计指南
在日均订单量超500万的场景下,MySQL数据年增200%,但访问集中在近7天(85%)。通过冷热数据分离,将历史数据迁移至OSS,实现存储成本下降48%,年省72万元。结合RDS、OSS与Redis构建分层架构,自动化管理数据生命周期,优化查询性能与资源利用率,支撑PB级数据扩展。
833 3
|
10月前
|
存储 域名解析 前端开发
震惊!不买服务器,还可以用阿里云国际站 OSS 轻松搭建静态网站
在数字化时代,利用阿里云国际站OSS可低成本搭建静态网站。本文详解OSS优势及步骤:创建Bucket、上传文件、配置首页与404页面、绑定域名等,助你快速上线个人或小型业务网站,操作简单,成本低廉,适合初学者与中小企业。
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
SQL 分布式计算 Serverless
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
397 0
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
存储 机器学习/深度学习 弹性计算
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
343 1