之前已经介绍过如何编写自定义starter,如不明白请参考springboot自定义Starter
功能点:
- 初始化ftp连接池
- 封装ftp基础操作
1.创建maven工程
略
2.编写pom文件
<?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>iotstarter</artifactId>
<groupId>com.iot</groupId>
<version>0.0.1-RELEASES</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<groupId>com.iot</groupId>
<artifactId>iot-ftp-spring-boot-starter</artifactId>
<version>0.0.1-RELEASES</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
</dependencies>
</project>
3.编写配置实体(读取配置文件信息)
package com.iot.ftp.properties;
import lombok.Data;
import org.apache.commons.net.ftp.FTPClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "iot-ftp")
@Data
public class FtpOptionProperties {
private String host;
private int port= FTPClient.DEFAULT_PORT;
private String username;
private String password;
private int bufferSize = 8096;
/**
* 初始化连接数
*/
private Integer initialSize = 0;
private String encoding;
}
4.编写总配置类(初始化单例bean)
package com.iot.ftp.config;
import com.iot.ftp.properties.FtpOptionProperties;
import com.iot.ftp.service.IotFtpService;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.pool2.ObjectPool;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PreDestroy;
/**
* 描述: els快捷操作配置
* @author: myx
* @date: 2018/5/3
* Copyright © 2018-hotpot. All rights reserved.
*/
@Configuration//开启配置
@EnableConfigurationProperties(FtpOptionProperties.class)//开启使用映射实体对象
@ConditionalOnClass({IotFtpService.class,GenericObjectPool.class, FTPClient.class})//存在IotFtpService时初始化该配置类
@ConditionalOnProperty//存在对应配置信息时初始化该配置类
(
prefix = "iot-ftp",//存在配置前缀hello
name = "isopen",
havingValue = "true",//开启
matchIfMissing = true//缺失检查
)
public class FtpConfiguration {
private Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
private FtpOptionProperties ftpOptionProperties;
private ObjectPool<FTPClient> pool;
/**
* 预先加载FTPClient连接到对象池中
* @param