我在Spring MVC-Hibernate项目中有一个要求。
在前端,用户将从下拉菜单中选择一个值,该值具有燕麦和产量
database-config.xml
<bean id="dataSourceuat"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@192.168.1.199:1521:XE" />
<property name="username" value="mobicule_los" />
<property name="password" value="go4it" />
</bean>
<bean id="dataSourceproduction"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@10.10.20.232:1530:KLEAD" />
<property name="username" value="RETAILGLN" />
<property name="password" value="retailgln" />
</bean>
<bean id="sessionFactoryuat"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSourceuat" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.connection.release_mode">after_transaction</prop>
<!-- <prop key="hibernate.hbm2ddl.auto">update</prop> -->
</props>
</property>
<property name="packagesToScan" value="com.mobicule"/>
<property name="mappingLocations" value="classpath*:com/mobicule/**/*.hbm.xml"/>
</bean>
<bean id="sessionFactoryproduction"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSourceproduction" ref="KleaddataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.connection.release_mode">after_transaction</prop>
<!-- <prop key="hibernate.hbm2ddl.auto">update</prop> -->
</props>
</property>
<property name="packagesToScan" value="com.mobicule"/>
<property name="mappingLocations" value="classpath*:com/mobicule/**/*.hbm.xml"/>
</bean>
<bean id="transactionManagerproduction"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactoryproduction" ref="sessionFactory" />
</bean>
<bean id="transactionManageruat"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactoryuat" ref="KleadsessionFactory" />
</bean>
</beans>
现在在我的Dao类中,我必须根据用户在下拉菜单(uat OR production)中的选择动态地注入sessionfactory bean。
执行上述操作的最佳方法是什么?
1)@AutowireDao类中的两个sessionfactory bean,并在控制器类的 HttpSession 对象中设置用户的选择,并将其传递给每个方法。根据该选择,使用该特定参考。
例如:-如果用户选择uat,则
会话会话= sessionFactoryuat.openSession();
如果用户选择生产,则
会话会话= sessionFactoryproduction.openSession();
但是我发现这种方法非常幼稚和麻烦。我也只想设置一次sessionfactory bean。
即,如果用户在应用程序的登录页面中选择uat,则在整个用户会话中,仅应使用uat数据库。
有人能建议我其他方法吗,例如从ApplicationContext获取bean并在运行时注入它?是正确的还是更好的方法?
或
在@Qualifier批注中使用动态值?
我对哪种方法最好感到困惑。