如何设置AmazonS3Client在DEV配置文件中使用代理但在PROD配置文件中没有代理

时间:2017-01-30 17:46:10

标签: java maven amazon-s3 spring-boot amazon

根据http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html,有5种方法可以使用AWS Credentials。据我所知,所有5个提供了​​解决AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY的方法。然而,我在开发时使用代理配置,但在AWS中运行时我不需要它。我在部署到AWS时手动注释我设置代理详细信息的代码。我无法找到更好的解决方案,但我确信我没有做到最好的方法。我的直截了当的问题是:我怎样才能更灵活?我的意思是,使用我的本地代理配置,但在部署代码时将其取出?当然,有一些选项可以使用maven profile或其他方式。

基本上,重点是:我正在使用"新的AmazonS3Client(凭据,配置)"同时开发新的AmazonS3Client(凭据)"构建和部署到AWS时。

@Component
public class MyClass {

@Value("${bucketName}")
private String bucketName;

@Value("${accessKey}")
private String accessKey;

@Value("${secretKey}")
private String secretKey;

// ...

        AWSCredentials credentials = null;
        credentials = new BasicAWSCredentials(accessKey, secretKey); 

当我在开发时:

ClientConfiguration config = new ClientConfiguration();
String proxyHost = "my.local.proxy.ip";
String proxyPort = "8080";
String proxyUser = "my-local-network-user"; 
String proxyPassword = "pwpwd";
config.setProxyHost(proxyHost);
config.setProxyPort(Integer.valueOf(proxyPort));
config.setProxyUsername(proxyUser);
config.setProxyPassword(proxyPassword);
AmazonS3 s3client = new AmazonS3Client(credentials, config);

部署到AWS时

AmazonS3 s3client = new AmazonS3Client(credentials);

application.properties(Spring Boot常用的文件)

accessKey=A..W
secretKey=b1234..rewq

*** 2017年2月1日编辑

我正在使用这项工作,但我相信有更好的方法来实现它

@Value("${proxyHost}")
private String proxyHost;

@Value("${proxyPort}")
private Integer proxyPort;

@Value("${proxyUser}")
private String proxyUser;

@Value("${proxyPassword}")
private String proxyPassword;

//...

    credentials = new BasicAWSCredentials(accessKey, secretKey);

    if (proxyHost != null && proxyHost.length() > 0 && proxyPort != null && proxyUser != null
            && proxyUser.length() > 0 && proxyPassword != null && proxyPassword.length() > 0) {
        config = new ClientConfiguration();
        config.setProxyHost(proxyHost);
        config.setProxyPort(proxyPort);
        config.setProxyUsername(proxyUser);
        config.setProxyPassword(proxyPassword);
        s3client = new AmazonS3Client(credentials, config);
    } else {
        s3client = new AmazonS3Client(credentials);
    }

1 个答案:

答案 0 :(得分:0)

您好,您可以随时使用多个配置文件选项 local-app.properties和live-app.properties

当您启动应用程序时,使用参数

传递要用作配置的文件
--spring.config.location=local-app.properties

--spring.config.location=live-app.properties

你的本地文件将包含代理的属性并且不会包含它(因此将其设置为null,我希望null可以工作,或者你可以添加空检查)。

有关详细信息,请查看此问题:Spring boot multiple config files它可以回答您的问题,但 ganesh jadhav 的答案清楚地显示了一个示例。