我要尝试使用Spring Cloud Stream(redis)
首先
我最近试用了新的Spring Cloud Stream。首先从Redis开始使用示例。由于Spring Cloud Stream的快速入门没有成功,所以我尝试使用IntelliJ的Spring Initializr。
环境
-
- Mac
-
- IntelliJ
- redis(適当にインストールしておく)
步骤 (bù
使用IntelliJ创建项目
利用昨天介绍的IntelliJ的Spring Initializr功能。
请打开创建项目菜单。
从左侧窗格中选择“Spring Initializr”,然后点击“Next”按钮。
随意给「Name」取个名字,然后点击「Next」按钮。
在「依赖关系」中选择“,然后点击“下一步”按钮。
请随意输入“项目名称”,然后点击“下一步”按钮。
当Gradle的设置界面出现后,请点击“确定”按钮。
项目完成了
试着以默认状态启动
启动Redis
启动由IntelliJ自动生成的”SpringCloudDemoApplication”。
如果启动时没有出现错误,就可以了。
运行示例
从Spring Cloud Stream的GitHub示例中获取可以使用的源代码。
携带Source样本来
Spring Cloud Stream的Source在输入信息方面起到了作用,简而言之就是将信息输入到Redis中。
将以下3个source示例复制到自动生成的SpringCloudDemoApplication.java所在的同一个包中。
-
- DateFormat.java
-
- TimeSource.java
- TimeSourceOptionsMetadata
从GitHub上克隆
cd /tmp
git clone https://github.com/spring-cloud/spring-cloud-stream.git
使用Finder工具,将三个文件复制并粘贴到IntelliJ的SpringCloudDemoApplication.java文件所在的相同包中。
将其复制到IntelliJ开发环境中
将application.properties重命名为yml。
因为样本是以yml形式提供的,所以需要将自动生成的application.properties更改为application.yml。
右键点击文件,选择「重构」或「重命名」。
在application.yml中将名称更改为”Refactor”,然后点击”Refactor”按钮。
将示例的application.yml文件内容复制并粘贴到我重命名的项目的application.yml文件中。
server:
port: 8080
fixedDelay: 5000
spring:
cloud:
stream:
bindings:
output:
destination: testtock
contentType: text/plain
# uncomment below to use the last digit of the seconds as a partition key
# hashcode(key) % N is then applied with N being the partitionCount value
# thus, even seconds should go to the 0 queue, odd seconds to the 1 queue
#producerProperties:
# partitionKeyExpression: payload.charAt(payload.length()-1)
# partitionCount: 2
---
spring:
profiles: extended
cloud:
stream:
bindings:
output: xformed
解决编译错误
当你简单地复制Source的样本时,会出现无法使用ConfigurationProperties的错误。在Intellj编辑器的顶部会显示类似于Spring Boot Configuration Annotation Processor not in classpath…的错误,同时还会显示打开文档的链接,请点击该链接。
spring-boot-configuration-processor的规定
为了使用自定义注释,configuration-processor需要来解决错误的问题。我修改了build.gradle文件,同时提供以下页面上propdeps-plugin链接的信息。
更改点
-
- buildscript.repositoriesにmaven { url ‘http://repo.spring.io/plugins-release’ }を追加
-
- buildscript.dependenciesにclasspath(“org.springframework.build.gradle:propdeps-plugin:0.0.7”)を追加
configure(allprojects)を追加
compileJava.dependsOn(processResources)を追加
dependenciesにoptional(“org.springframework.boot:spring-boot-configuration-processor”)を追加
buildscript {
ext {
springBootVersion = '1.3.0.RELEASE'
}
repositories {
mavenCentral()
maven { url 'http://repo.spring.io/plugins-release' }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("org.springframework.build.gradle:propdeps-plugin:0.0.7")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
jar {
baseName = 'demo'
version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
configure(allprojects) {
apply plugin: 'propdeps'
apply plugin: 'propdeps-maven'
apply plugin: 'propdeps-idea'
apply plugin: 'propdeps-eclipse'
}
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
compileJava.dependsOn(processResources)
dependencies {
compile('org.springframework.cloud:spring-cloud-starter-stream-redis')
optional("org.springframework.boot:spring-boot-configuration-processor")
testCompile('org.springframework.boot:spring-boot-starter-test')
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-starter-parent:Brixton.M3"
}
}
eclipse {
classpath {
containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
}
}
task wrapper(type: Wrapper) {
gradleVersion = '2.7'
}
在这种情况下,重新构建gradle应该能够解决错误。
使用IntelliJ启动”SpringCloudDemoApplication”。
也要创建Sink侧。
使得源端将写入 Redis 的时间信息也传输给接收端进行样本处理。
重复之前的步骤,创建一个Sink项目,并复制Sink的示例,以便能够使用它。
※由于步骤相同,故不再重复解释。