Профили Maven, источники данных Spring, JDBC и JNDI

#spring #jdbc #maven #jndi

#spring #jdbc #maven #jndi

Вопрос:

У меня есть проект Spring, который использует Maven и имеет несколько профилей, позволяющих запускать его в разных настройках с фильтрацией ресурсов. Некоторые настройки имеют JNDI, а некоторые нет. Для тех, которые этого не делают, требуется источник данных JDBC.

Каков наилучший способ справиться с этим, учитывая мои настройки? Я хочу избегать каких-либо действий с несколькими файлами и ant-run или чего-либо подобного. Что оставляет меня с:

  • Настройка двух компонентов и фильтрация моих ресурсов для включения одного или другого.
  • Я о чем-то не подумал?

Вот пример первого элемента:

 <bean id="jdbcDataSource"
    class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close"
    p:driverClassName="${jdbc.driver}"
    p:url="${jdbc.url}"
    p:username="${jdbc.username}"
    p:password="${jdbc.password}"/>

<bean id="jndiDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"
    p:jndiName="${jndi.name}" />

<bean id="someBean" class="com.whatever.SomeBeanImpl"
    p:dataSource-ref="${dataSource}"/>
  

Мне интересно услышать о других способах, которыми люди добились этого, и почему они выбрали это решение. Или если они пошли с этим решением и почему.

Ответ №1:

Spring 3.1 обеспечивает поддержку профилей изначально. В мире Spring это известно как среда. Посмотрите здесь для получения более подробной информации.

Комментарии:

1. Я повторяю это, вот еще один пример использования профилей spring diarmuidmoloney.wordpress.com/2012/04/07/spring-environments

Ответ №2:

Используйте конфигурацию на основе Java для вашего компонента datasource.

 @Configuration
public class DataConfig {

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

  @Bean
  public DataSource dataSource() {
    if ("".equals(jndiName)) {
       // create datasource
    } else {
       // lookup from JNDI
    }
  }