Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将S3存储桶名称作为参数从属性文件传递到aws-S3组件_Java_Apache_Maven_Apache Camel - Fatal编程技术网

Java 将S3存储桶名称作为参数从属性文件传递到aws-S3组件

Java 将S3存储桶名称作为参数从属性文件传递到aws-S3组件,java,apache,maven,apache-camel,Java,Apache,Maven,Apache Camel,我有一个驼峰路由端点,如下所示,我想替换硬编码的s3 bucket名称,替换为一个参数,并从属性文件传递它 <to uri="aws-s3://input-test-bucket?amazonS3Client=#aws-s3-client"/> 我有一个bean,如下所示,它传递包含访问密钥和密钥的aws-s3-client <bean id="aws-s3-client" class="com.amazonaws.services.s3.AmazonS3Clie nt

我有一个驼峰路由端点,如下所示,我想替换硬编码的s3 bucket名称,替换为一个参数,并从属性文件传递它

<to uri="aws-s3://input-test-bucket?amazonS3Client=#aws-s3-client"/> 

我有一个bean,如下所示,它传递包含访问密钥和密钥的aws-s3-client

<bean id="aws-s3-client" class="com.amazonaws.services.s3.AmazonS3Clie nt"> 
<constructor-arg> 
<bean class="com.amazonaws.auth.BasicAWSCredentials "> 
<constructor-arg index="0" value="${aws.accessKey}"/> 
<constructor-arg index="1" value="${aws.secretKey}"/> 
</bean> 
</constructor-arg> 
</bean> 

aws.accessKey和aws.secretKey的值来自一个属性文件,我想从中获取bucket名称


请告诉我如何将bucket名称添加到bean中,并将其作为参数传递给aws-s3路由。

如果您愿意,您可以自己创建一个bucket名称,并在春季根据需要进行设置。这样,您可以直接将BucketName设置为

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <route>
        <!--from uri="aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&amp;maxMessagesPerPoll=5"/-->
        <from ref="s3Endpoint"/>
        <to uri="mock:result"/>
    </route>

</camelContext>

<bean id="amazonS3Client" class="org.apache.camel.component.aws.s3.AmazonS3ClientMock"/>

<bean id="amazonS3Configuration" class="org.apache.camel.component.aws.s3.S3Configuration">
   <property name="amazonS3Client" ref="amazonS3Client" />
   <property name="bucketName" value="mycamelbucket" />
</bean>

<bean id="s3Component" class="org.apache.camel.component.aws.s3.S3Component">
   <constructor-arg index="0" ref="camel"/>
</bean>

<bean id="s3Endpoint" class="org.apache.camel.component.aws.s3.S3Endpoint">
   <constructor-arg index="0" value="aws-s3://Unknowbucket"/>
   <constructor-arg index="1" ref="s3Component"/>
   <constructor-arg index="2" ref="amazonS3Configuration"/>
</bean>

我对此也不熟悉,但您尝试过属性占位符吗?

本质上,如果您有一个名为“S3Bucket”的属性,例如:

<camelContext xmlns="http://camel.apache.org/schema/spring">

    <propertyPlaceholder id="properties"
                         location="classpath:org/apache/camel/component/properties/myprop.properties"
                         xmlns="http://camel.apache.org/schema/spring"/>

    <route>
        <from uri="direct:start"/>
        <to uri="properties:aws-s3:{{S3Bucket}}?amazonS3Client=#aws-s3-client"/> 
    </route>

</camelContext>

如果:

  • 在类路径中有“myprop.properties”(在适当的路径中)
  • 该属性文件包含映射到值的键“S3Bucket”

我不是在一个位置上尝试和运行这个构建,但给它一个机会

我是新来的..请你告诉我是否需要用S3Configuration创建另一个bean…是的,在camel属性占位符的帮助下,你可以将属性设置传递给任何camel端点uri。