美文网首页Spring(Spring MVC/Spring Boot ...)
Spring-Cloud-Data-Flow-入门手册-3she

Spring-Cloud-Data-Flow-入门手册-3she

作者: devilteam2006 | 来源:发表于2017-12-06 22:26 被阅读0次

    目录

    Shell 1

    16. Shell 选项... 2

    17. 可用的命令行... 2

    18. Tab 键自动填充... 3

    19. 空格和单引号的使用规则... 3

    19.1.引号和转义... 4

    重要说明:本方是翻译自https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#getting-started这个文章,感谢Sabby AnandanMarius

    BogoeviciEric BottardMark FisherIlayaperumal GopinathanGunnar HillertMark

    PollackPatrick PeraltaGlenn RenfroThomas RisbergDave SyerDavid TuranskiJanne

    ValkealahtiOleg Zhurakousky这些原文作者的写作成果,让我们能更好地入门学习Spring Cloud Data Flow的相关技术,考虑到国内中文的文档资料比较欠缺,而且基本不太成体系,所以自己希望来翻译该文章,方便学习使用。

    以下是原文内容的翻译,一些关键性的技术术语,本文考虑不进行翻译,保持原来的英文词汇,加强技术术语印象,而且这些技术术语强行翻译成中文的话,感觉很别扭。另一方面水平有限,文本可能有翻译不太贴切或是错误的地方,还请大家体谅,看到后多多指正。

    ********************************以下是原文内容的翻译**********************

    Version 1.3.0.M2

    © 2012-2017 Pivotal Software, Inc.

    你可以自己使用这个文章或是分发给其它人,但前提是你不以赚取费用为目标,同时每个转发的文章必须包含此版权通知,无论是印刷品版本还是电子发行版本。

    Shell

    在这一节中您将开始了解Shell和它更进一步的功能,涉及到如何处理空格,引号,以及SPEL表达式的解析。StreamDSLComposedTask DSL章节很适合用来开始学习shell命令行。

    16. Shell 选项

    Shell是基于SpringShell项目来构建的。有命令行选项与Spring

    Shell和一些Data Flow的选项是通用的。shell接受以下命令行选项:

    unix:>java -jar spring-cloud-dataflow-shell-1.2.1.RELEASE.jar --helpData Flow Options: --dataflow.uri=                              Address of the Data Flow Server [default: http://localhost:9393]. --dataflow.username=                        Username of the Data Flow Server [no default]. --dataflow.password=                    Password of the Data Flow Server [no default]. --dataflow.credentials-provider-command= Executes an external command which must return an OAuth Access Token [no default]. --dataflow.skip-ssl-validation=      Accept any SSL certificate (even self-signed) [default: no]. --spring.shell.historySize=                Default size of the shell log file [default: 3000]. --spring.shell.commandFile=                Data Flow Shell executes commands read from the file(s) and then exits. --help                                            This message.

    spring.shell.commandfile这个选项是值得注意的,因为它可以用来指向一个现有的文件,其中包含所有用于部署一个或多个相关数据流任务的shell命令。这对于创建一些脚本来帮助自动化部署是非常有用的。

    下边也是一个 shell 的命令

    dataflow:>script --file

    这可以将复杂的脚本文件模块化,分成多个独立文件是非常有用的。

    17. 可用的命令行

    在命令提示符处键入help,系统将列出所有可用的命令。大多数命令都是用于数据流功能的,但有一些是通用的。

    ! - Allows execution of operating system (OS) commandsclear - Clears the consolecls - Clears the consoledate - Displays the local date and timeexit - Exits the shellhttp get - Make GET request to http endpointhttp post - POST data to http endpointquit - Exits the shellsystem properties - Shows the shell's propertiesversion - Displays shell version

    在help后面添加相应的命令的名称,系统将会显示关于这个命令的附加帮助信息。

    dataflow:>help stream createKeyword:                  stream createDescription:              Create a new stream definitionKeyword:                  ** default **Keyword:                  name  Help:                  the name to give to the stream  Mandatory:              true  Default if specified:  '__NULL__'  Default if unspecified: '__NULL__'Keyword:                  definition  Help:                  a stream definition, using the DSL (e.g. "http --port=9000 | hdfs")  Mandatory:              true  Default if specified:  '__NULL__'  Default if unspecified: '__NULL__'Keyword:                  deploy  Help:                  whether to deploy the stream immediately  Mandatory:              false  Default if specified:  'true'  Default if unspecified: 'false'

    18. Tab 键自动填充

    Shell命令行的选项,在输入--后,可以通过按TAB键自动填充完整。如输入stream

    create –后,直接按TAB键,那么会有相应的命令选项提示

    dataflow:>stream create --stream create --definition    stream create --name

    如果你是输--de后,再按TAB键,那么—definition这个选项将会自动填充完整

    在应用程序或任务属性的流或组合任务DSL表达式中,也可以使用TAB键自动填充。还可以使用TAB键在流DSL表达式中获取相应的提示,以便发现有哪些可用的sources, processors和sinks。

    19. 空格和引号的使用规则

    如果参数值里包含空格或|字符,那么需要给他们添加单引号。下边的例子是把一个SPEL表达式传给一个转换processor,这个表达式会处理一切通过这个processor的数据:

    transform --expression='new StringBuilder(payload).reverse()'

    如果参数值当中需要嵌入单引号,那么需要把用到的单引号改为双引号:

    // Query is: Select * from /Customers where name='Smith'scan --query='Select * from /Customers where name=''Smith'''

    19.1. 引号和转义

    基于Spring

    Shell的客户端,它负责解析DSL并和数据流服务器进行交互。反过来,应用程序可能也具有依赖于嵌入式语言(如Spring

    Expression Language

    )的应用程序属性。

    shell, Data Flow DSL 解析器和 SpEL都有相应的规则用于处理引号和转义。当他们结合在一起时就容易产生混乱。本章节会解释这些应用规则,并举例说明当涉及这三个组件时所遇到的复杂情况。

    当然,情况并不总是那么复杂。

    如果你不使用Data Flow

    shell,例如你直接使用REST API,或者应用程序的属性用的不是SpEL表达式,转义规则就简单了。

    19.1.1. Shell 的规则

    可以说,shell是使用引号最复杂的组件,但这些规则可以很简单地罗列出来:

    •shell命令由相应的命令键(--foo)和相应的值组成。存在一个特殊的无键映射,请参见下面

    •值通常不能包含空格,因为空格是命令的默认分隔符。

    •可以通过添加引号(单引号或双引号)来添加空格。

    •如果用引号括起来,一个值可以嵌入一个相同类型的字符,需要前面加一个反斜杠(\)

    •其他转义也是可用的,如\t,\n,\r,\ f和Unicode的转义形式\uxxxx

    •最后,如果不使用引号来包含空格,那么无键映射是以一种特殊的方式处理的。

    例如,shell支持!命令来执行本机shell命令。这个!接受单个无键的参数。以下命令行可以工作:

    dataflow:>! rm foo

    这里的参数是整个rm

    foo

    字符串,它被传递给底层的shell。

    作为另一个例子,下面的命令都是实现同样功能的,参数值是foo(没有引号):

    dataflow:>stream destroy foodataflow:>stream destroy --name foodataflow:>stream destroy "foo"dataflow:>stream destroy --name "foo"

    19.1.2. DSL 解析规则

    在解析器级别(即在stream 或task定义的内部),规则如下:

    •在遇到第一个空格字符前,前边相应的字符解析为选项值。

    •它们可以由字符串组成,由单引号或双引号包围。

    •需要嵌入引号的话,需要使用两个连续引号。

    因此,在下面的示例中,筛选器应用程序的--expression选项值在语义上是等价的:

    filter --expression=payload>5filter --expression="payload>5"filter --expression='payload>5'filter --expression='payload > 5'

    相对来说,最后一个是更易读的。主要是得益于它两边包围的单引号。实际表达式是payload

    > 5

    (没有引号)。

    现在,让我们假设我们要测试字符串消息。如果我们想比较payload与SpEL 的字符串“foo”,我们可以这么做:

    filter --expression=payload=='foo'          filter --expression='payload == ''foo'''    filter --expression='payload == "foo"'

    第一个命令行,可以正常工作是因为没有空格,虽然不太清晰。

    第二个命令行,使用单引号来保护整个参数,因此实际的单引号需要变为双引号。

    第三个命令行,SpEL基于单引号或者双引号识别字符串,最后一种方法是最好的。

    请注意上面的例子是不考虑在shell里使用的,例如,当直接调用REST API时。当在shell中输入时,整个流定义本身将在双引号内,它里面的一些字符需要转义。整个例子就变成了:

    dataflow:>stream create foo --definition "http | filter --expression=payload='foo' | log"dataflow:>stream create foo --definition "http | filter --expression='payload == ''foo''' | log"dataflow:>stream create foo --definition "http | filter --expression='payload == \"foo\"' | log"

    19.1.3. SpEL 语法和 SpEL 字符串

    最后一块规则内容是关于SpEL表达式的。许多应用程序接受的选项是被解释为SpEL表达,而如上所述,字符串的处理也有一种特殊的方式。规则是:

    •文字可以用单引号或双引号括起来。

    •引号需要增加一倍才能嵌入作为一个字符引号。双引号内的单引号不需要特殊处理,反之亦然。

    作为最后一个示例,假设希望使用转换处理器。该处理器接受一个expression选项,这是个SpEL表达式。它将对传入消息进行评估,使用默认的表达式payload(转发消息不受影响)。

    重要的是,要明白以下命令行是等价的:

    transform --expression=payloadtransform --expression='payload'

    但是和下边的不同:

    transform --expression="'payload'"transform --expression='''payload'''

    当然,还有其他变体。

    第一个系列将简单地对消息有效负载进行评估,而后一个示例将评估实际的实际字符串payload(没有引号)。

    19.1.4. 规则整体情况

    作为最后一个完整的示例,让我们回顾一下如何通过在Data Flow

    shell上下文中创建流来强制将所有消息转换为字符串Hello World:

    dataflow:>stream create foo --definition "http | transform --expression='''hello world''' | log" dataflow:>stream create foo --definition "http | transform --expression='\"hello world\"' | log" dataflow:>stream create foo --definition "http | transform --expression=\"'hello world'\" | log"

    第一个命令行,这里在字符串两边加单引号(在数据流解析器级别),但它们需要加倍,因为属于在字符串中(等号后面的第一个单引号)。

    第二、第三个命令行,分别使用单引号和双引号来覆盖数据流解析器级别上的整个字符串。因此,另一种引号可以在字符串中使用。整个内容都在shell的--definition参数内,但它使用了双引号,所以双引号需要转义(在shell级别)。

    相关文章

      网友评论

        本文标题:Spring-Cloud-Data-Flow-入门手册-3she

        本文链接:https://www.haomeiwen.com/subject/tkhrixtx.html