AWS Lambda + Spring,如何加载application.yml

时间:2017-03-25 15:55:04

标签: java spring amazon-web-services aws-lambda microservices

我在自定义API网关域时遇到问题,我在AWS lambda上部署了我的restful app。自定义域,以这种方式工作,根据basePath,它选择不同的API,最终触及Lambda。例如:

api.mycustomdomain.com/view/ping - >使用路径view转到应用/view/ping api.mycustomdomain.com/admin/ping - >转到带有路径admin

的应用/admin/ping

我使用此示例作为样板:https://github.com/awslabs/aws-serverless-java-container/tree/master/samples/spring/pet-store

我想要实现的是处理程序,它取决于Host标题从请求路径中排除前缀。

我准备了以下application.yml文件:

server:
  contextPath: "/view"
  productionHost: "api.mycustomdomain.com"

问题/问题是。我现在如何将它们加载到我的Lambda函数中?这是我天真的尝试:

public class LambdaHandler implements RequestHandler<AwsProxyRequest, AwsProxyResponse> {
    SpringLambdaContainerHandler<AwsProxyRequest, AwsProxyResponse> handler;
    boolean isinitialized = false;

    @Value("${server.contextPath}")
    private String prefix;

    @Value("${server.productionHost}")
    private String productionHost;

    public AwsProxyResponse handleRequest(AwsProxyRequest awsProxyRequest, Context context) {
        if(awsProxyRequest.getHeaders().get("Host").equals(productionHost))
            awsProxyRequest.setPath(awsProxyRequest.getPath().substring(prefix.length()));

        if (!isinitialized) {
            isinitialized = true;
            try {
                handler = SpringLambdaContainerHandler.getAwsProxyHandler(PingPongApp.class);
            } catch (ContainerInitializationException e) {
                e.printStackTrace();
                return null;
            }
        }
        return handler.proxy(awsProxyRequest, context);
    }
}

显然这不起作用,LambdaHandler正在使用Spring上下文。

任何想法我该如何处理?

1 个答案:

答案 0 :(得分:0)

似乎你无法加载这些属性。请遵循以下两个选项中的任何一个。

1&GT;您可以在配置中添加以下bean,这样您就可以自动装配字符串并使用您已经使用的方式

@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
return new PropertySourcesPlaceholderConfigurer();
}

2 - ;

public AwsProxyResponse..{
@Autowired
private Environment env;
..
    public AwsProxyResponse handleRequest{
    ..
    String contextPath = env.getRequiredProperty(“server.contextPath”));
    ...
    }
}