Решите во время выполнения, какой сессионный компонент должен внедрить в Spring MVC - PullRequest
0 голосов
/ 01 марта 2019

У меня есть требование в моем проекте Spring MVC-Hibernate.

В интерфейсе пользователя выберет значение из выпадающего списка, которое имеет значения, такие как uat и production

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 я должен динамически вводить сессионные компоненты в зависимости от выбора пользователя в раскрывающемся списке (производство ИЛИ).

Каков наилучший подход для выполнения вышесказанного.

1) @Autowire и сессионные компоненты в классе Dao, и установка выбора пользователя в HttpSession объекте в классе контроллера и передача его в каждый метод.Основываясь на этом выборе, используйте конкретную ссылку.
, например: - если пользователь выбирает uat, то
Session session = sessionFactoryuat.openSession ();
, если пользователь выбирает продукцию, тогда
Session session = sessionFactoryproduction.openSession ();

Но я нахожу этот подход очень наивным и обременительным. Также я хочу, чтобы установить sessionfactory bean только один раз.
т.е. если пользователь выбирает uatна странице входа в приложение, то на протяжении всего сеанса пользователя должна использоваться только база данных uat.

Может кто-нибудь предложить мне другие подходы, такие как получение компонента из ApplicationContext и внедрение его во время выполнения?Это правильный или лучший подход ??
ИЛИ
Использование динамических значений в аннотации @Qualifier?

Я не понимаю, какой подход лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...