首页 > 解决方案 > 如何以编程方式为 Spring Boot 应用程序定义系统属性

问题描述

我在 AWS 上部署了 Spring Boot 应用程序。这些应用程序具有用于初始化数据库连接(Autowired属性)的共享属性,并且它们也有自己的属性。

我们现在正在做的是将应用程序特定的属性设置为application.properties. 而且,我们有一个类,它是由Application该类扩展的,有static一块可以从 S3 加载所有属性。

这是基本应用程序

public abstract class BaseApp {
    static {
        /*
        logic to read properties from S3, and set to System.property
        */
        final GetObjectRequest request = new GetObjectRequest(bucketName, key);
        final S3Object s3obj = s3Client.getObject(request);
        final Properties prop = new Properties();
        prop.load(s3obj.getObjectContent());

        for (final Object k : prop.keySet()) {
            System.getProperties().put(k, prop.get(k));
        }
    }
}

对于每一项服务,

@SpringBootApplication
public class Application extends BaseApp {
    public static void main(final String[] args) {
        final SpringApplication app = new SpringApplication(Application.class);
        app.run(args);
    }
}

这里的问题是,它在运行 UT 代码时还需要连接到 s3。是否有任何解决方案让该static作品仅在生产环境中运行?

标签: spring-boot

解决方案


推荐阅读