在运行时决定要在Spring MVC中注入哪个sessionFactory bean

时间:2019-03-01 13:47:02

标签: spring spring-mvc spring-data-jpa

我在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批注中使用动态值?

我对哪种方法最好感到困惑。

0 个答案:

没有答案