1

在我们正在构建的 Spring-GWT 应用程序中,我有一个特殊的问题。我们有一个以不支持 UTF-8 的 WE8ISO8859P1 字符集编码的 Oracle DB。因此,我们正在 AL32UTF8 char set 中构建一个新数据库。不幸的是,DBA 不想将现有数据库迁移到新数据库,我们必须使用旧数据库获取英语数据,使用新数据库获取拉丁语数据。

我们在方法/类级别有 @Transactional 注释,并且 sessionFactory 被注入到 DAO 以连接到休眠。当用户选择拉丁语时,我想重用这些

@Transactional(动态更改)

即,当用户在拉丁语/英语之间切换时,注入的 TransactionManager 和 SessionFactory 应该通过 Ajax 调用动态更改。

这可以做到吗?解决此问题的最佳方法是什么?

再想一想,我可以通过制作 bean ApplicationContextAware 并在 dao 中设置它来获得拉丁会话工厂,但这是一个好方法吗?我该如何处理 TransactionManager ?

谢谢,

4

1 回答 1

1

感谢你的帮助。我真正需要的是“AbstractRoutingDataSource” - 我通过执行以下操作解决了这个问题

    <bean id="dataSource" class="com.myPackage.CustomRoutingDataSource">
   <property name="targetDataSources">
      <map key-type="com.myPackage.DBLocaleEnum">
         <entry key="English" value-ref="defaultDataSource"/>
         <entry key="Spanish" value-ref="latinDataSource"/>
      </map>
   </property>
   <property name="defaultTargetDataSource" ref="defaultDataSource"/>
</bean>

public class CustomRoutingDataSource extends AbstractRoutingDataSource {

@Override
protected Object determineCurrentLookupKey() {

    DBLocaleEnum localeType = LocaleContextHolder.getLocaleType();
    return localeType;
}

determineCurrentLookupKey 方法的返回类型帮助我确定我应该使用哪个数据源。

于 2011-12-06T12:01:50.603 回答