Apache Camel和Spring Boot集成
优采云 发布时间: 2020-08-07 12:031. 摘要:
该项目主要是通过在Spring平台上配置Camel和FTP来实现将文件从FTP服务器下载到本地,解析文件并将它们存储在数据库中的功能.
2,构建一个空项目:
Spring Boot具有几种用于自动生成空项目的机制: CLI,Spring工具套件和网站Spring Initializr. 我们选择第三个.
访问网站,如下所示
在依赖项中添加依赖项包时,在框中输入camle,jdbc,mysql,然后会自动弹出提示,并选择确认,如下所示:
单击“生成项目”按钮以生成项目,并将其导入ecipse,在pom.xml中添加camel-ftp依赖项,请注意版本号选择与camel-spring-boot-stater相同
org.apache.camel
camel-ftp
2.18.0
pom.xml文件的完整版本如下:
org.apache.camel
camel-spring-boot-starter
2.18.0
org.apache.camel
camel-ftp
2.18.0
org.springframework.boot
spring-boot-starter-jdbc
mysql
mysql-connector-java
runtime
org.springframework.boot
spring-boot-starter-test
test
将所有从属jar下载到本地后,便建立了基本项目. 3.配置骆驼以定期将文件从ftp服务器下载到本地. 在application.properties中配置远程FTP服务器的地址,端口,用户名和密码.
ftp.server.info=sftp://172.16.20.133:22/../home/temp/data?username=root&password=root&delay=5s&move=done&readLock=rename
ftp.local.dir=file:C:/ftp/test
注意: sftp服务器的文件位置是相对于root登录后的相对地址(在此处插入),delay = 5s是每5秒扫描一次ftp服务器以查看是否生成了新文件,如果将其下载到本地,然后将服务器上的文件传输到完成的文件夹(/ home / temp / data / done),则readLock = rename可以防止骆驼读取正在写入的文件
配置路由,完成文件下载
@Component
public class DownloadRouteDemo extends RouteBuilder {
private static Logger logger = LoggerFactory.getLogger( DownloadRouteDemo.class );
@Value("${ftp.server.info}")
private String sftpServer;
@Value("${ftp.local.dir}")
private String downloadLocation;
@Override
public void configure() throws Exception {
from( sftpServer ).to( downloadLocation ).log(LoggingLevel.INFO, logger, "Downloaded file ${file:name} complete.");
}
}
注意: 要继承骆驼的RouteBulider,重写configure方法,其作用是将文件从ftp服务器下载到本地,然后输出文件名(在application.properties中配置运行时所需的必要信息)文件)
为了使Java进程在后台运行,需要将以下配置添加到application.properties文件中
camel.springboot.main-run-controller=true
从ftp服务器下载文件的所有工作已完成. 运行CamelFtpSpringApplication.java. 如果ftp服务器的相应位置中有一个文件,它将被下载到本地配置的文件夹中. 4.通过骆驼文件定期进行本地分析,并将其保存到数据库中. 在application.properties中添加以下配置
route.parserfile.info = {{ftp.local.dir}}?delay=10s&move=done&readLock=rename
route.parserfile.dir = {{ftp.local.dir}}/done
请注意,两个花括号指的是其他变量的配置
写解析文件,仓库程序和其他处理器
@Component
public class LocationFileProcessor implements Processor {
private static Logger logger = LoggerFactory.getLogger( LocationFileProcessor.class );
@Value("${ftp.local.dir}")
private String fileDir;
@Autowired
OrderService orderService;//业务逻辑处理组件
@Override
public void process(Exchange exchange) throws Exception {
GenericFileMessage inFileMessage = (GenericFileMessage) exchange.getIn();
String fileName = inFileMessage.getGenericFile().getFileName();//文件名
String splitTag = File.separator;//系统文件分隔符
logger.info(fileDir + splitTag + fileName);//文件的绝对路径
orderService.process(fileDir + splitTag + fileName);//解析入库等操作
}
}
配置路由以完成业务逻辑的序列化
@Component
public class LocalTransformRoute extends RouteBuilder {
private static Logger logger = LoggerFactory.getLogger( LocalTransformRoute.class );
@Value("${route.parserfile.info}")
private String location;
@Value("${route.parserfile.dir}")
private String locationDir;
@Autowired
LocationFileProcessor locationFileProcessor;
@Override
public void configure() throws Exception {
from( location ).process( locationFileProcessor ).to( locationDir ).log(LoggingLevel.INFO, logger, "tirans file ${file:name} complete.");
}
}
请注意,流程配置比上述路由更多,即业务逻辑处理配置
至此,所有工作已经完成. 重新执行CamelFtpSpringApplication.java以实现ftp文件的常规下载,业务处理等(很多操作被省略,例如仓储操作等. )注意: 只是camle spring ftp的演示,将在生产中,仍有许多地方需要改进