小编Jay*_*Jay的帖子

java.lang.IllegalStateException: InputStream 已被读取 - 如果需要多次读取流,请不要使用 InputStreamResource

我正在尝试从 aws s3 存储桶中读取文件并将其设置为我的 spring 批处理读取器类中的资源。当我在 aws lambda 函数上测试应用程序时,出现以下错误。任何建议专家?

    Caused by: java.lang.IllegalStateException: InputStream has already been read - do not use InputStreamResource if a stream needs to be read multiple times
    at org.springframework.core.io.InputStreamResource.getInputStream(InputStreamResource.java:97) ~[task/:na]
    at org.springframework.batch.item.file.DefaultBufferedReaderFactory.create(DefaultBufferedReaderFactory.java:34) ~[task/:na]
    at org.springframework.batch.item.file.FlatFileItemReader.doOpen(FlatFileItemReader.java:266) ~[task/:na]
    at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.open(AbstractItemCountingItemStreamItemReader.java:146) ~[task/:na]

Class to read from s3 bucket
@Service
public class S3BucketProcessing {
private static final AmazonS3 s3 = AmazonS3ClientBuilder.standard().build();

public InputStreamResource readFile() throws IOException{

   String bucketName = "mybuckey";
   String key = "File.txt";

   S3Object object = s3.getObject(new GetObjectRequest(bucketName, key)); …
Run Code Online (Sandbox Code Playgroud)

java spring-batch spring-boot aws-lambda

7
推荐指数
1
解决办法
6047
查看次数

可变字段不应该是"公共静态"

我收到sonarQube错误的下线,任何建议专家如何解决这个问题?提前致谢

    protected static final String [] COLUMN_NAMES = new String[]{"date","customerNumber","customerName",
            "account","emailAdress","mobilePhoneNumber","emailStatus"};
Run Code Online (Sandbox Code Playgroud)

java arrays collections sonarqube

5
推荐指数
1
解决办法
1301
查看次数

RestTemplateBuilder类型的requestFactory(Class <?扩展ClientHttpRequestFactory>)不适用

我在我的项目上使用springBootVersion ='2.0.1.RELEASE'。我正在尝试为我编写的RestClientCertTestConfiguration类编写相互身份验证代码,如下所示。我在requestFactory上遇到错误。RestTemplateBuilder类型的方法requestFactory(Class)不适用于参数(HttpComponentsClientHttpRequestFactory)关于如何解决此问题的任何建议?谢谢

    @Configuration
public class RestClientCertTestConfiguration {

    private String allPassword = "mypassword";

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) throws Exception {

        SSLContext sslContext = SSLContextBuilder
                .create()
                .loadKeyMaterial(ResourceUtils.getFile("classpath:myCerts.jks"), allPassword.toCharArray(), allPassword.toCharArray())
                .loadTrustMaterial(ResourceUtils.getFile("classpath:myCerts.jks"), allPassword.toCharArray())
                .build();

        HttpClient client = HttpClients.custom()
                .setSSLContext(sslContext)
                .build();

        return builder 
                 //error on this line
                .requestFactory(new HttpComponentsClientHttpRequestFactory(client))
                .build();
    }

}
Run Code Online (Sandbox Code Playgroud)

java rest spring-boot

4
推荐指数
2
解决办法
1143
查看次数

如果我们使用try-with-resource,是否需要关闭资源

我在我的代码中使用try-with-resource块,想知道是否需要在方法结束时关闭资源或不需要?

try (S3Object object = s3.getObject(new GetObjectRequest(bucketName, key));
  BufferedReader br = new BufferedReader(new InputStreamReader(object.getObjectContent()));
  BufferedWriter bw = new BufferedWriter(new FileWriter(new File("output.txt")))){
  String line;

  while((line=br.readLine())!=null){
    bw.write(line);
    bw.newLine();
    bw.flush();
  }
}
Run Code Online (Sandbox Code Playgroud)

java try-with-resources

2
推荐指数
2
解决办法
373
查看次数