У меня есть требование в моем проекте 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?
Я не понимаю, какой подход лучше.