使用Spring管理特定于部署的配置

时间:2011-05-31 12:17:16

标签: spring deployment configuration

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

我的 applicationContext.xml 包含以下两行

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

我注释掉那个实例中没有使用的数据源。尽管如此,还是有更好的方法。思想,想法,建议?

1 个答案:

答案 0 :(得分:2)

使用@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;
  }