【问题标题】:Managing deployment-specific configurations with Spring使用 Spring 管理特定于部署的配置
【发布时间】:2011-05-31 21:08:52
【问题描述】:

人们为使用 Spring 控制部署配置制定了哪些策略?我已经将环境细节(例如 jdbc 连接参数)提取到一个属性文件中,但我正在寻找某种方法来管理不是简单字符串的部署细节。具体来说,我目前在进行开发时使用本地配置的数据源,并在我们的应用程序服务器(DEV、QA)上使用 JNDI。

我有一个 applicationContext.xml 有以下两行,

<import resource="spring/datasource-local-oracle.xml"/>
<import resource="spring/datasource-jndi.xml"/>

然后我注释掉该实例中未使用的任何数据源。不过,必须有更好的方法来做到这一点。想法、想法、建议?

【问题讨论】:

标签: spring deployment configuration


【解决方案1】:

使用@Bean 在代码中而不是在 XML 中定义您的数据源。这样,您可以将条件逻辑应用于 bean 的创建方式。例如:

  @Value("${url:jdbc:hsqldb:mem:memdb}")
  String url;

  // username, password, etc

  @Value("${jndiName:}")
  String jndiName;

  @Bean
  public DataSource dataSource() {
    DataSource ds;

    if (jndiName == "") {
      BasicDataSource bds = new BasicDataSource();
      bds.setDriverClassName(driverClassName);
      bds.setUrl(url);
      bds.setUsername(username);
      bds.setPassword(password);
      ds = bds;
    } else {
      JndiObjectFactoryBean = jndiFactory = new JndiObjectFactoryBean();
      jndiFactory.setJndiName("java:/" + jndiName);
      jndiFactory.afterPropertiesSet();
      ds = (DataSource) jndiFactory.getObject();
    }
    return ds;
  }

【讨论】:

  • 我喜欢这种方法。我可以想象做一些事情,比如在名为“target_environment=qa|dev|prod|”的属性文件中拥有一个属性并让我的 @Bean 注释方法根据这些设置做出不同的响应。
  • 可以,或者在 JVM 启动时将 -Denvironment=xxx 设置为系统属性。
猜你喜欢
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 2020-04-16
  • 2019-07-01
相关资源
最近更新 更多