淘宝tfs-client java配置

胡俊弼
2023-12-01

pom.xml

<dependency>  
            <groupId>com.taobao.tair</groupId>  
            <artifactId>tair-client</artifactId>  
            <version>2.3.1</version>  
        </dependency>  
  
        <dependency>  
            <groupId>com.taobao.common.tair</groupId>  
            <artifactId>common-tair</artifactId>  
            <version>2.3.1</version>  
        </dependency>  
  
        <dependency>  
            <groupId>com.taobao.common.tfs</groupId>  
            <artifactId>tfs-javaclient</artifactId>  
            <version>2.1.6</version>  
        </dependency>

tfs.properties

tfs.client.maxWaitThread=100  
tfs.client.timeout=2000  
tfs.client.nsip=192.168.229.3:8108  
tfs.client.tfsClusterIndex=1  
tfs.client.maxCacheItemCount=10000  
tfs.client.maxCacheTime=5000

spring-tfs.xml

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
<beans>  
      
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="location">  
            <value>classpath:tfs.properties</value>  
        </property>  
    </bean>  
  
  
    <bean id="tfsManager" class="com.taobao.common.tfs.DefaultTfsManager" init-method="init" >  
      <!-- 整个进程中系统最多等待多少个请求,取决于你有多少个线程并发的请求TFS -->  
       <property name="maxWaitThread" value="${tfs.client.maxWaitThread}" />  
  
      <!-- 单个请求最大的等待时间(ms) 超过这个时间放弃这次请求-->  
      <property name="timeout" value="${tfs.client.timeout}" />  
  
      <!-- Tfs master nameserver ip address -->  
      <property name="nsip" value="${tfs.client.nsip}" />  
  
      <!-- TFS 集群的编号,这个编号只是一种参考,系统初始化的时候会从ns上取,取不到才用本地设置的.!-->  
      <property name="tfsClusterIndex" value="${tfs.client.tfsClusterIndex}" />  
  
      <!-- TFS在读取文件的时候会缓存block所在的数据服务器ip,这个参数配置了最多缓存的记录个数!-->  
      <property name="maxCacheItemCount" value="${tfs.client.maxCacheItemCount}" />  
  
      <!-- 上一项缓存最大有效的时间(ms)!-->  
      <property name="maxCacheTime" value="${tfs.client.maxCacheTime}" />  
      
       <!-- tair排重数据库的serverlist, 至少指定一个ip address -->  
       <!--   
      <property name="uniqueServerList">  
        <list>  
          <value>10.232.12.141:5198</value>  
        </list>  
      </property>  
       -->  
       <!-- tair排重数据库的groupName -->  
       <!--   
      <property name="groupName">  
        <value>group_1</value>  
      </property>  
      <property name="namespace">  
        <value>100</value>  
      </property>  
       -->  
    </bean>  
    <bean id="tfsClientService" class="xxx.xxx.xxx.TfsClientService">  
      <property name="tfsManager" ref="tfsManager" />  
    </bean>  
</beans>

TfsClientService.java

public class TfsClientService {  
  
    /** 
     * tfs 管理器 
     */  
      
    private DefaultTfsManager tfsManager ;  
      
    /** 
     * 保存一个文件到 tfs中,文件小于2M 
     * 
     * @param localFileName  本地文件名 
     * @param tfsSuffix  文件后缀 
     * @return  保存成功,返回成功后 的tfs文件名,失败返回null 
     */  
   public  String saveFile(String localFileName,  String tfsSuffix){  
       if(null == localFileName || null == tfsSuffix){  
           throw new IllegalArgumentException("保存文件的入参不能为空!localFileName=" + localFileName  + ",tfsSuffix=" + tfsSuffix);  
       }  
       return  tfsManager.saveFile(localFileName, null, tfsSuffix);  
          
    }  
      
   /** 
    * 保存一个文件字节流到 tfs中,文件小于2M 
    * 
    * @param data  文件字节流 
    * @param tfsSuffix  文件后缀 
    * @return  保存成功,返回成功后 的tfs文件名,失败返回null 
    */  
   public   String saveFile(byte[] data,  String tfsSuffix){  
       if(null == data || null == tfsSuffix){  
           throw new IllegalArgumentException("保存文件字节流入参不能为空!data=" + data  + ",tfsSuffix=" + tfsSuffix);  
       }  
       return tfsManager.saveFile(data, null, tfsSuffix);  
   }  
     
       
      
   /** 
    * 保存一个大文件到tfs(文件大于2M),成功返回tfs文件名(L开头),失败返回null 
    * tfs文件写大文件,为了断点续传,必须传入一个key参数,来标识此次大文件的写。一次写失败后,再次传入相同的key写,tfsclient会根据key找到前一次已经写完成的部分重用 
    * 默认使用localFileName作为key 
    * 
    * @param localFileName  本地文件名 
    * @param tfsFileName  保存到tfs中的文件名 (目前都为null,不支持自定义文件名) 
    * @param tfsSuffix  文件后缀 
    * @return  保存成功,返回成功后 的tfs文件名,失败返回null 
    */  
    public  String saveLargeFile(String localFileName,  String tfsSuffix){  
         if(null == localFileName || null == tfsSuffix){  
             throw new IllegalArgumentException("保存大文件入参不能为空! localFileName=" + localFileName  + ",tfsSuffix=" + tfsSuffix);  
       }  
         return tfsManager.saveLargeFile(localFileName, null, tfsSuffix);  
    }  
      
    /** 
     * 保存一个字节流data到tfs(文件大于2M),成功返回tfs文件名,失败返回null, 
     * tfs文件写大文件,为了断点续传,必须传入一个key参数,来标识此次大文件的写。一次写失败后,再次传入相同的key写,tfsclient会根据key找到前一次已经写完成的部分重用 
     *  
     * @param data 
     * @param tfsSuffix 
     * @param key key name 
     * @return 
     */  
    public  String saveLargeFile(byte[] data, String tfsSuffix, String key){  
       if(null == data || null == tfsSuffix){  
           throw new IllegalArgumentException("保存大文件字节流入参不能为空! data=" + data  + ",tfsSuffix=" + tfsSuffix);  
       }  
      return tfsManager.saveLargeFile(data, null, tfsSuffix, key);  
    }  
  
      
      
    /** 
     * 删除一个文件 
     * 
     * @param tfsFileName 文件名 
     * @param tfsSuffix  文件后缀 
     * @return  true if delete successully, or false if fail 
     */  
    public  boolean deleteFile(String tfsFileName, String tfsSuffix){  
       if(null == tfsFileName || null == tfsSuffix){  
             
           throw new IllegalArgumentException("删除文件名或文件后缀不能为空! tfsFileName=" + tfsFileName  + ",tfsSuffix=" + tfsSuffix);  
       }  
         return tfsManager.unlinkFile(tfsFileName, tfsSuffix);  
    }  
      
      
    /** 
     * 从tfs 获取文件到本地 
     * 
     * @param tfsFileName   需要读取的tfs文件名 
     * @param tfsSuffix  需要读取的文件名后缀,需要和存入时后缀相同。 
     * @param localFileName 本地文件名 
     * @return  读操作成功返回true,读操作失败返回false 
     */  
    public  boolean  fetchFile(String tfsFileName, String tfsSuffix, String localFileName){  
       if(null == tfsFileName || null == tfsSuffix || null == localFileName ){  
           throw new IllegalArgumentException("获取文件入参不能为空! tfsFileName=" + tfsFileName  + ",tfsSuffix=" + tfsSuffix + ",localFileName=" + localFileName);  
       }  
         
        return tfsManager.fetchFile(tfsFileName, tfsSuffix, localFileName);  
    }  
      
      
    /** 
     * 从tfs 获取文件到本地,数据存到输出流 
     *  
     * @param tfsFileName 
     * @param tfsSuffix 
     * @param output   数据流 
     * @return  读操作成功返回true,读操作失败返回false 
     */  
    public  boolean fetchFile(String tfsFileName, String tfsSuffix, OutputStream output){  
       if(null == tfsFileName || null == tfsSuffix || null == output ){  
           throw new IllegalArgumentException("获取文件入参不能为空! tfsFileName=" + tfsFileName  + ",tfsSuffix=" + tfsSuffix + ",output=" + output);  
       }  
             
        return tfsManager.fetchFile(tfsFileName, tfsSuffix, output);  
    }  
      
      
    /** 
     * stat一个tfs文件 
     *文件的状态有0(正常), 1(删除), 4(隐藏) 
     * @param tfsFileName 需要读取的tfs文件名 
     * @param tfsSuffix 需要读取的文件名后缀,需要和存入时后缀相同 
     * @return  操作成功返回FileInfo,操作失败返回null 
     */  
    public   FileInfo statFile(String tfsFileName, String tfsSuffix){  
         if(null == tfsFileName || null == tfsSuffix ){  
               throw new IllegalArgumentException("stat文件入参不能为空! tfsFileName=" + tfsFileName  + ",tfsSuffix=" + tfsSuffix );  
         }  
           
         return tfsManager.statFile(tfsFileName, tfsSuffix);  
    }   
      
      
      
    public void setTfsManager(DefaultTfsManager tfsManager){  
        this.tfsManager = tfsManager;  
    }  
      
    public DefaultTfsManager getTfsManager(){  
        return this.tfsManager ;  
    }


转载于:https://my.oschina.net/suzhicheng/blog/363903

 类似资料: