1
Spring Integrationを使用してS3MessageHandlerに 'asset' POJOを渡してバケットを変更するにはどうすればよいですか?S3メッセージハンドラとSpring統合を使用してS3バケットを動的に設定する
私は、資産のフォルダに基づいてバケットを 'root-bucket/a/b/c'のように変更したいと考えています。
各アセットには異なるサブパスが存在する可能性があります。以下の答えに
@Bean
IntegrationFlow flowUploadAssetToS3()
{
return flow -> flow
.channel(this.channelUploadAsset)
.channel(c -> c.queue(10))
.publishSubscribeChannel(c -> c
.subscribe(s -> s
// Publish the asset?
.<File>handle((p, h) -> this.publishS3Asset(
p,
(Asset)h.get("asset")))
// Set the action
.enrichHeaders(e -> e
.header("s3Command", Command.UPLOAD.name()))
// Upload the file
.handle(this.s3MessageHandler())));
}
MessageHandler s3MessageHandler()
{
return new S3MessageHandler(amazonS3, "root-bucket");
}
おかげで、私はこれがそうのように働いてしまった:
final String bucket = "'my-root";
final Expression bucketExpression = PARSER.parseExpression(bucket);
final Expression keyExpression = PARSER.parseExpression("headers['asset'].bucket");
final S3MessageHandler handler = new S3MessageHandler(amazonS3, bucketExpression);
handler.setKeyExpression(keyExpression);
return handler;
上記のDSLを使ってこれらの式を設定することはできますか?それとも、ハンドラを返すメソッドの内部にある必要がありますか? – KJQ
AWSチャネルアダプタ用のJava DSLはありません。したがって、 'S3MessageHandler'のセッターとctorsを直接使用しなければなりません。 –