Je voudrais faire un "processus d'installation de la base de données First Access" dans mon application de printemps et la seule chose que je peux imaginer comme solution serait d'initialiser le bean DataSource par programme.Définir le bean DataSource sur le code
Mon haricot actuel est défini comme:
<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>
mais l'idéal est de le charger par moi-même dans chaque fois que je besoin et avec le paramètre I définis.
Le scénario est que l'utilisateur (administrateur) arrive à l'application à la première fois et je lui demande le serveur, le port et le catalogue pour se connecter. Je le stocke dans un db embarqué et le prochain démarrage de l'application, un bean peut vérifier si les paramètres sont définis sur la base de données intégrée et le charger à nouveau.
Est-ce possible?
EDT: par @axtavt Sugestion Je suis goin avec un proxy ...
<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"/>
une fois avec une procuration mis en œuvre, comment puis-je l'ai jeté à l'original Bean?
Object o = ctx.getBean("dataSource");
BasicDataSource ds = (BasicDataSource)o;
lancera une java.lang.ClassCastException: Proxy4 $ ne peut pas être jeté à org.apache.commons.dbcp.BasicDataSource
http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html pourrait aider, mais je ne sais pas # M, que ce soit en cours – stacker
a trouvé ceci: il s'agit plus d'une source de données swapable utilisant un proxy. http://affy.blogspot.com/2007/11/dynamic-datasource-via-spring-using.html –