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
如何使用
-
pom依赖:
<dependency> <groupId>com.jccfc</groupId> <artifactId>fastdfs-spring-boot-starter</artifactId> <version>1.0.0</version> </dependency>
-
配置参数,如:
#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
-
注入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