FastDFS-Client 源码的gitHub 地址:
https://github.com/happyfish100/fastdfs-client-java
这个Client的简单用法可自行去看博客:FastDFSClient集成SpringBoot 基础用法
简单用法主要是根据fdfs_client.conf 配置文件的配置来进行的,这样在打包发布后,配置文件不方便修改,对维护成本也有所增加。所以在这根据FastDFS-Client的源码进行改造,修改为使用application.yml配置文件就行fastdfs的配置,同时将配置文件存在Nacos中,以便后续生产改动服务器地址提供便利。
先看看改造后的工程(这里是做成了微服务的组件,通过加入依赖就可以使用):
工程的pom.xml如下(最主要的就是fastdfs-client-java 和 commons-pool2)另外的是工程的核心组件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>syiti-components</artifactId>
<groupId>com.syiti.dev</groupId>
<version>2.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>component-fastdfs</artifactId>
<dependencies>
<dependency>
<groupId>org.csource</groupId>
<artifactId>fastdfs-client-java</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
<version>1.27</version>
</dependency>
<dependency>
<groupId>com.syiti.dev</groupId>
<artifactId>component-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>
</dependencies>
</project>
然后在properties包下创建FastdfsProperties配置文件实体类
package com.syiti.dev.component.fastdfs.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* @author LinYoufeng
* @date 2020-01-03 下午4:05
*/
@Data
@ConfigurationProperties(prefix = "fastdfs")
public class FastdfsProperties {
/**
* 连接超时时间
*/
private String connectTimeout = "5";
/**
* 网络超时时间
*/
private String networkTimeout = "30";
/**
* 字符集编码
*/
private String charset = "UTF-8";
/**
* 是否使用Token
*/
private String httpAntiStealToken = "false";
/**
* Token加密密钥
*/
private String httpSecretKey = "";
/**
* 跟踪器IP地址,多个使用分号隔开
*/
private String httpTrackerHttpPort = "";
/**
* 连接池的连接对象最大个数
*/
private String trackerServers = "";
/**
* 连接池的最大空闲对象个数
*/
private String connectionPoolMaxTotal = "18";
/**
* 连接池的最小空闲对象个数
*/
private String connectionPoolMaxIdle = "18";
/**
* Nginx服务器IP,多个使用分号分割
*/
private String connectionPoolMinIdle = "2";
/**
* 获取连接对象时可忍受的等待时长(毫秒)
*/
private String nginxServers = "";
}
创建连接对象工厂类,在factory包下创建StorageClientFactory
package com.syiti.dev.component.fastdfs.factory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;
/**
* 用于创建连接对象的工厂类
* @author LinYoufeng
* @date 2020-01-03 下午4:02
*/
public class StorageClientFactory implements PooledObjectFactory<StorageClient> {
@Override
public PooledObject<StorageClient> makeObject() throws Exception {
TrackerClient client = new TrackerClient();
TrackerServer server = client.getConnection();
return new DefaultPooledObject<>(new StorageClient(server, null));
}
@Override
public void destroyObject(PooledObject<StorageClient> p) throws Exception {
p.getObject().getTrackerServer().close();
}
@Override
public boolean validateObject(PooledObject<StorageClient> p) {
return false;
}
@Override
public void activateObject(PooledObject<StorageClient> p) throws Exception {
}
@Override
public void passivateObject(PooledObject<StorageClient>