Управление конфигурациями, специфичными для развертывания, с помощью Spring - PullRequest
1 голос
/ 31 мая 2011

Какие стратегии разработали люди для управления конфигурациями развертывания с помощью Spring?Я уже извлек детали среды (например, параметры соединения jdbc) в файл свойств, но я ищу способ управления деталями развертывания, которые не являются простыми строками.В частности, в настоящее время я использую локально настроенный источник данных при разработке и JNDI на наших серверах приложений (DEV, QA).

У меня есть applicationContext.xml со следующимдве строки,

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

, и я комментирую, какой источник данных не используется в этом случае.Хотя должен быть лучший способ сделать это.Мысли, идеи, предложения?

1 Ответ

2 голосов
/ 31 мая 2011

Используйте @Bean для определения источника данных в коде, а не в XML.Таким образом, вы можете применить условную логику к тому, как создается компонент.Например:

  @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;
  }
...