Apache Camel 与 Spring Boot 集成

优采云 发布时间: 2020-08-09 16:05

  1、概要:

  本项目主要是通过在Spring平台上配置Camel、FTP,实现定时从FTP服务器下载文件到本地、解析文件、存入数据库等功能。

  2、搭建空项目:

  Spring Boot有几种手动生成空项目的机制:CLI、Spring tool suite、网站Spring Initializr,我们选择第三个。

  访问网站,如右图

  

  在dependencies添加依赖包的时侯,在框中输入camle、jdbc、mysql会手动弹出提示,确认即为选中,如下图:

  

  点击 generate project按键,生成项目,并将其导出到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、配置Camel完成从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服务器上是否有新文件生成,如果有下载到本地,并将服务器上的文件转移到done文件夹(/home/temp/data/done),readLock=rename可以制止camel读取正在被写入的文件

  配置路由,完成文件下载

  

  @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.");

}

}

  

  注意:要承继camel的RouteBulider,重写configure方式,大意是从ftp服务器下载文件到本地,并输出文件名(运行时所需必要信息都配置在application.properties文件中)

  为了使java进程在后台运行,需要在application.properties文件中降低如下配置

  camel.springboot.main-run-controller=true

  从ftp服务器下载文件的所有工作都已完成,运行CamelFtpSpringApplication.java,如果你的ftp服务器相应的位置上有文件,就会下载到本地所配置的文件夹下4、通过camel定时解析本地文件并保存到数据库在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.");

}

}

  

  注意,比前面的路由多了process配置,即业务逻辑处理配置

  至此,所有工作都已完成,重新执行CamelFtpSpringApplication.java即可实现ftp文件定时下载、业务处理等(其中省去了好多,例如入库操作等)备注:只是camle spring ftp的一个演示demo,要运用于生产,还有很多须要建立的地方

  转载至:

  转载于:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线