Я хотел бы выполнить «Процесс установки базы данных первого доступа» в своем весеннем приложении, и единственное, что я могу себе представить в качестве решения, - это программная инициализация компонента DataSource.
Мой текущий компонент определенкак:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/catalog" />
<property name="username" value="condominium" />
<property name="password" value="password" />
<property name="validationQuery" value="SELECT 1" />
<property name="testOnBorrow" value="true" />
<property name="defaultAutoCommit" value="false" />
<property name="maxWait" value="5000" />
</bean>
, но идеальной вещью было загрузить его самому, когда мне это нужно, и с параметром, который я определяю.
Сценарий таков, что пользователь (администратор) приходит в приложение в первый раз, и я прошу его подключить сервер, порт и каталог.Я сохраняю его в расширенной базе данных и при следующем запуске приложения компонент может проверить, установлены ли параметры для встроенной базы данных, и загрузить его снова.
Возможно ли это?
EDT: per@axtavt sugestion Я иду с прокси ...
<bean id="dataSource" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="targetSource" ref="swappableDataSource"/>
</bean>
<bean name="swappableDataSource" class="org.springframework.aop.target.HotSwappableTargetSource">
<constructor-arg ref="dummyDataSource"/>
</bean>
<bean id="dummyDataSource" factory-bean="dataSourceFactory" factory-method="createDataSource" destroy-method="close"/>
<bean id="dataSourceFactory" class="com.condominium.spring.factory.DataSourceFactory"/>
один раз с реализованным прокси, как я могу привести его к Original Bean?
Object o = ctx.getBean("dataSource");
BasicDataSource ds = (BasicDataSource)o;
сгенерирует java.lang.ClassCastException: $ Proxy4 не может быть приведен к org.apache.commons.dbcp.BasicDataSource