【问题标题】:Spring Special Beans春特豆
【发布时间】:2018-02-17 23:23:06
【问题描述】:

我们可以声明一个特殊的 spring bean,它可以在 spring 检查 Spring Profiles 声明之前实例化吗? 挑战是从 spring bean 设置活动的 spring 配置文件,但似乎 spring 寻找声明的配置文件,然后进行 bean 实例化。

我有这个奇怪的要求,因为我需要设置活动配置文件但不能使用 -Dspring.profiles.active=profilename。 因此,我需要使用 System.setProperty() 在代码中执行此操作。 另外,我不能使用任何 SpringContextListener,因为它不是 Web 应用程序。

【问题讨论】:

  • 您正在部署什么/如何运行无法设置其他变量的应用程序?
  • 如何实例化spring上下文?
  • 应用部署到mule esb 3.5.3。我们对 qa 和 prod 没有完全的所有权,也没有人愿意要求对 qa 和 prod 环境进行更改。
  • Mule 有它的自定义类来创建弹簧上下文。
  • 投什么票?

标签: java spring system-properties


【解决方案1】:

如果您在命令行程序中使用 Spring,您可能有一个看起来像这样的主类:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).run(args);
    }
}

您可以通过调用profiles() 方法指定活动配置文件:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class)
                .profiles("myprofile", "otherprofile")
                .run(args);
    }
}

如果您在 Servlet 容器中使用 Spring,您可能有一个看起来像这样的 Servlet Initializer:

public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}

您可以通过调用profiles() 方法指定活动配置文件:

public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class)
                          .profiles("myprofile", "otherprofile");
    }
}

您当然可以编写代码来动态确定要激活哪些配置文件。

【讨论】:

  • 在我的例子中,spring 上下文是由 Mule ESB 创建的。配置文件(和其他 bean)在 xml 中声明。似乎 Mule 组合了各种 xml 文件,然后创建上下文,它首先确定活动配置文件并应用它。我尝试创建 bean 以将系统属性设置为激活,但它不起作用,因为该 bean 是在激活配置文件后创建的。
  • @Prakash 所以你真正要问的是如何配置 Mule ESB 来设置活动配置文件。也许你应该在你的问题中提到这一点,你会得到更准确的答案,我不会浪费时间写这个答案。
  • 我从未说过它是 Spring Boot 应用程序。那你为什么在你的例子中使用 SpringBootApplication。
  • 问题不是特定于 mule。我所描述的情况可能发生在您有自定义第三方类创建弹簧上下文的任何情况下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
相关资源
最近更新 更多