带连接池的 fastdfs 客户端starter

fastdfs-spring-boot-starter

一个简单的基于org.csource.fastdfs.StorageClient1二次封装并提供连接池功能的fastdfs客户端starter.

介绍

说明

工程提供三大接口(扩展点):

​ 操作接口->FastDFSClient,

​ StorageClient1对象池接口->StorageClientPool,

​ FastDFS操作模板接口->FastDFSTemplate

基于Java SPI机制,扩展方便,工程默认内部实现是基于commons-pool2将org.csource.fastdfs.StorageClient1池化。

项目结构

fastdfs-spring-boot-starter
 └── src
    ├── main  
    │	├── java  
    │	│   └── com.jccfc 
    │	│	├────── fastdfs
    │	│	│         ├──────client
    │   │   │         │         ├── api
    │   │   │         │         │     ├── client
    │   │   │         │         │     │      ├── FastDFSClient 操作接口
    │   │   │         │         │     │      └── FastDFSClientFactory FastDFSClient工厂
    │   │   │         │         │     ├── pool
    │   │   │         │         │     │      ├── StorageClient1Wrapper 包装对象
    │   │   │         │         │     │      ├── StorageClient1WrapperPool 包装对象池接口
    │   │   │         │         │     │      └── StorageClient1WrapperPoolFactory 接口工厂
    │   │   │         │         │     └── template
    │   │   │         │         │            ├── Executor 执行器函数式接口
    │   │   │         │         │            ├── FastDFSTemplate FastDFS操作模板接口
    │   │   │         │         │            └── FastDFSTemplateFactory 接口工厂
    │   │   │         │         ├── config 参数配置
    │   │   │         │         │     └── FastDFSConfig FastDFS配置类
    │   │   │         │         ├── exception 异常
    │   │   │         │         │     └── JccfcFastDFSException FastDFS异常类
    │   │   │         │         └── internal 接口内部实现
    │   │   │         │               ├── client
    │   │   │         │               │      ├── DefaultFastDFSClient 操作接口默认实现
    │   │   │         │               │      └── DefaultFastDFSClientFactory 工厂默认实现
    │   │   │         │               ├── pool
    │   │   │         │               │      ├── DefaultStorageClient1WrapperPool 默认实现
    │   │   │         │               │      ├── DefaultStorageClient1WrapperPoolFactory
    │   │   │         │               │      ├── PoolConfig 连接池配置
    │   │   │         │               │      └── StorageClient1WrapperFactory 包装对象工厂
    │   │   │         │               └── template
    │   │   │         │                      ├── DefaultFastDFSTemplate 默认实现
    │   │   │         │                      └── DefaultFastDFSTemplateFactory 工厂默认实现
    │	│	│         └──────starter
    │   │   │                   └── FastDFSAutoConfiguration 自动配置类
    │	│	├────── spi
    │   │   │         ├── Factory 工厂函数式接口
    │   │   │         ├── Spi SPI注解
    │   │   │         └── SpiLoader SPI加载器
    │	└── resource  
    │	    ├── META-INF
    │             └── services
    │	                 ├── com.jccfc.fastdfs.client.api.client.FastDFSClientFactory
    │	                 ├── com.jccfc...api.pool.StorageClient1WrapperPoolFactory
    │	                 └── com.jccfc.fastdfs.client.api.template.FastDFSTemplateFactory     │
    └── test  测试

相关包及版本:

  • spring boot 2.1.8.RELEASE
  • net.oschina.zcx7878 fastdfs-client-java 1.27.0.0
  • commons-pool2 2.7.0
  • lombok 1.18.6

如何使用

  1. pom依赖:

    <dependency>
       <groupId>com.jccfc</groupId>
       <artifactId>fastdfs-spring-boot-starter</artifactId>
       <version>1.0.0</version>
    </dependency>
    
  2. 配置参数,如:

    #tracker 地址 多个以逗号分隔
    fastdfs.tracker-servers = http://127.0.0.1:22122
    #连接超时时间,单位:毫秒
    fastdfs.connect-timeout = 10000
    #网络超时时间,单位:毫秒
    fastdfs.network-timeout = 30000
    #tracker 端口,HTTP访问服务的端口号
    fastdfs.tracker-http-port = 80
    fastdfs.secret-key = FastDFS1234567890
    #是否需要防盗链token,默认true
    fastdfs.anti-steal-token = false
    #链接池中最大空闲的连接数,默认也为8
    fastdfs.pool-config.max-idle = 10
    #链接池中最大连接数,默认为8
    fastdfs.pool-config.max-total = 10
    
  3. 注入FastDFSClient,如:

    @Autowired
    private FastDFSClient fastDFSClient;
    

SPI扩展

1、实现功能接口,及工厂接口,如默认实现:

/**
 * FastDFSClient默认实现类
 * <p>说明:</p>
 * <li>基于org.csource.fastdfs.StorageClient1 1.27.0.0</li>
 *
 * @author duanyong@jccfc.com
 * @date 2020/5/1 23:14
 */
public class DefaultFastDFSClient implements FastDFSClient {
    ...
}

/**
 * FastDFSClient默认实现类工厂
 * <p>说明:</p>
 * <li></li>
 * @author duanyong@jccfc.com
 * @date 2020/5/3 22:32
 */
@Spi(order = 1)
public final class DefaultFastDFSClientFactory implements FastDFSClientFactory {
    @Override
    public FastDFSClient get() {
        return new DefaultFastDFSClient();
    }
}

2、注意工程接口实现时注解order排序应大于1,如@Spi(order = 2)。

因为工程对SPI加载机制进行了封装,提供了缓存功能,返回对象时,如果接口有多个实现,则根据Spi注解中order降序排序,取第一个。

附件

1、FastDFSConfig配置参数:

    /** FastDFS是否可用,默认值*/
    public static final String PREFIX = "fastdfs";
    /** FastDFS是否可用,默认值*/
    public static final String ENABLED = "enabled";
	/** 连接超时时间,默认值,单位:毫秒*/
	public static final int DEFAULT_CONNECTION_TIMEOUT = 5 * 1000;
	/** 网络超时时间,默认值,单位:毫秒*/
	public static final int DEFAULT_NETWORK_TIMEOUT = 30 * 1000;
    /** 编码,默认值*/
    public static final String DEFAULT_CHARSET = "UTF-8";
	/** tracker 端口HTTP访问服务的端口号,默认值*/
	public static final int DEFAULT_TRACKER_HTTP_PORT = 80;
    /** tracker 地址 多个以逗号分隔,默认值*/
    public static final String DEFAULT_TRACKER_SERVERS = "";
    /** nginx 地址 多个以逗号分隔,默认值*/
    public static final String DEFAULT_NGINX_SERVERS = "";
    /** FastDFS key,默认值*/
    public static final String DEFAULT_SECRET_KEY = "";
    /** 是否需要防盗链token,默认值*/
    public static final boolean DEFAULT_ANTI_STEAL_TOKEN = true;
    /**FastDFS是否可用*/
    private String enabled = ENABLED;
    /** 连接超时时间 */
    private int connectTimeout = DEFAULT_CONNECTION_TIMEOUT;
    /** 网络超时时间 */
    private int networkTimeout = DEFAULT_NETWORK_TIMEOUT;
    /** 编码 */
    private String charset = DEFAULT_CHARSET;
    /** tracker 端口,HTTP访问服务的端口号 */
    private int trackerHttpPort = DEFAULT_TRACKER_HTTP_PORT;
    /** tracker 地址 多个以逗号分隔*/
    private String trackerServers = DEFAULT_TRACKER_SERVERS;
    /** nginx 地址 多个以逗号分隔*/
    private String nginxAddress = DEFAULT_NGINX_SERVERS;
    /** FastDFS key*/
    private String secretKey = DEFAULT_SECRET_KEY;
    /** 是否需要防盗链token */
    private boolean antiStealToken = DEFAULT_ANTI_STEAL_TOKEN;
    /**FastDFS连接池配置*/
    private PoolConfig poolConfig = new PoolConfig();

2、PoolConfig配置参数:

    /** 链接池中最大空闲的连接数,默认也为8.*/
    private int maxIdle = 10;
    /** 连接池中最少空闲的连接数,默认为0.*/
    private int minIdle = 0;
    /** 链接池中最大连接数,默认为8.*/
    private int maxTotal = 10;
    /** 当连接池资源耗尽时,等待时间,超出则抛异常,默认为-1即永不超时.*/
    private long maxWaitMillis = 5 * 1000;
    /** 默认false,create的时候检测是有有效,如果无效则从连接池中移除,并尝试获取继续获取.*/
    private boolean testOnCreate = false;
    /** 默认false,borrow的时候检测是有有效,如果无效则从连接池中移除,并尝试获取继续获取.*/
    private boolean testOnBorrow = true;
项目信息
路漫漫其修远兮,吾将上下而求索
码云:https://gitee.com/javacoo/fastdfs-spring-boot-starter
QQ群:164863067
作者/微信:javacoo
邮箱:xihuady@126.com
下载地址

https://gitee.com/javacoo/fastdfs-spring-boot-starter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

javacoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值