#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
}
}