У меня есть контейнер сервлетов Tomcat, который имеет список DataSource
управляемый пулом соединений Tomcat. Из моего приложения Spring (Spring 3.2.3) я хотел бы получить один из этих источников данных во время выполнения, что-то вроде:
public class MyService {
@Autowired
private JndiObjectLocator jndiLocator;
public void myMethod(String jndiName) {
DataSource myDataSource = jndiLocator.locate(jndiName);
}
}
Любые идеи о том, как это сделать?
Вы всегда можете просмотреть JNDI-код в своем коде, вы можете использовать JndiDataSourceLookup
для этого и вызвать метод getDataSource()
.
public class MyService {
@Autowired
private JndiDataSourceLookup lookup;
public void myMethod(String jndiName) {
DataSource myDataSource = lookup.getDataSourcejndiName);
}
}
Другой вариант - сделать ваш bean-компонент осведомленным о BeanFactory
и получить оттуда DataSource
.
public class MyService {
@Autowired
private BeanFactory factory;
public void myMethod(String jndiName) {
DataSource myDataSource = factory.getBean(jndiName, DataSource.class);
}
}
JndiDataSourceLookup
это именно то, что я искал и работает отлично.