- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Spring+Hibernate/Flex 应用程序,需要在数据库模式之间动态切换。为了实现这一点,我在this之后实现了一个AbstractRoutingDataSource。文章。不幸的是它不起作用。它实际上在默认模式(逻辑公共(public))中执行SQL。任何帮助将不胜感激。谢谢。
这是我的设置:
applicationContext.xml 包含两个数据源。每个数据源使用不同的登录角色连接到数据库。路由数据源使用 String 键选择正确的数据源。 SchemaConstants 类包含几个public static final 字段。
<bean id="parentDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="org.postgresql.Driver"/>
<property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/mystore"/>
<property name="acquireIncrement" value="3"/>
<property name="minPoolSize" value="1"/>
<property name="maxPoolSize" value="15"/>
<property name="maxStatementsPerConnection" value="100"/>
<property name="automaticTestTable" value="c3p0_test_table"/>
<property name="numHelperThreads" value = "20"/>
</bean>
<bean id="publicDS" parent="parentDataSource">
<property name="user" value="postgres"/>
<property name="password" value="password"/>
</bean>
<bean id="tempSchemaDS" parent="parentDataSource">
<property name="user" value="temp_role"/>
<property name="password" value="tmppsw"/>
</bean>
<bean id="routingDS" class="flex.RoutingDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="flex.SchemaConstants.LOGICAL_PUBLIC" value-ref="publicDS"/>
<entry key="flex.SchemaConstants.TEMP_SCHEMA" value-ref="tempSchemaDS"/>
</map>
</property>
<property name="defaultTargetDataSource" ref="publicDS"/>
</bean>
RoutingDataSource 实现:这里没有什么可添加的。
public class RoutingDataSource extends AbstractRoutingDataSource
{
@Override
protected Object determineCurrentLookupKey()
{
return Globals.getSchema();
}
@Override
public Logger getParentLogger() throws SQLFeatureNotSupportedException
{
// TODO Auto-generated method stub
return null;
}
}
Globals 类:用于存储和查找数据源键。
public class Globals
{
private static final ThreadLocal<String> schemaHolder
= new ThreadLocal<String>();
public static void setSchema(String schema)
{
schemaHolder.set(schema);
}
public static String getSchema()
{
return schemaHolder.get();
}
public static void clearCustomerType()
{
schemaHolder.remove();
}
}
测试代码:尝试插入几条记录,每条记录都在不同的架构(和不同的表)中
@RemotingInclude
@Transactional
public void test()
{
Globals.setSchema(SchemaConstants.TEMP_SCHEMA);
SomeDataOther someOtherData = new SomeDataOther();
someOtherData.setName("Jorjinio");
this.sessionFactory.getCurrentSession().save(someOtherData);
Globals.setSchema(SchemaConstants.LOGICAL_PUBLIC);
SomeData someData = new SomeData();
someData.setFirstName("Hulio");
someData.setLastName("Julio");
this.sessionFactory.getCurrentSession().save(someData);
}
一个次要问题。在这种情况下保持数据完整性的正确方法是什么?我已经用 @Transactional 属性注释了该方法,但我还不确定这是否会如此轻松地工作。我使用的 transactionManager 类型为 org.springframework.orm.hibernate3.HibernateTransactionManager。我还没有对此事进行任何研究,但如果有人可以提供信息,我也将不胜感激。
最佳答案
很明显,当调用 AbstractRoutingDataSource.getConnection()
时,即当事务绑定(bind)的 Hibernate Session
时,实际上会选择特定的 DataSource
被 build 。在您的情况下,当您输入 @Transactional
方法时,就会发生这种情况。
因此,您无法在事务内切换方案。您必须针对不同的方案执行单独的交易。要在同一方法内执行多个事务,您可以使用编程式事务管理 (TransactionTemplate
),而不是 @Transactional
。
关于hibernate - Spring + Hibernate SessionFactory + AbstractRoutingDataSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7378883/
我用 AbstractRoutingDataSource动态更改数据源和 ThreadLocal设置 currentLookupKey。当我每个 http 请求只使用一个数据源时,它工作得很好。我用
我目前有一个有两个数据源的程序。每个数据源都与一个事务管理器绑定(bind)。 如果我有一个访问两个数据源的函数并且发生错误,如果一个数据源回滚,第二个数据源也会回滚吗? 谢谢! 最佳答案
我现在在数据库中有 2 个表: 用户 用户数据库 在用户中我存储登录名、密码、角色 在 user_database 中,我存储数据库驱动程序、url、密码和用户。图数据库 我希望用户登录到我的页面,下
Spring AbstractRoutingDatasource 动态数据源 数据源上下文 AbstractRoutingDatasource 需要信息决定路由到那个数据源,该信息我们称为上下文
1、前言 近期一项目A需实现数据同步到另一项目B数据库中,在不改变B项目的情况下,只好选择项目A中切换数据源,直接把数据写入项目B的数据库中。这种需求,在数据同步与定时任务中经常需要。 那么问
使用 AbstractRoutingDataSource 时如何在数据源之间共享事务切换 Activity 数据源? 到目前为止,在没有事务的情况下,查询会在两个数据库上正确执行,但是当我开始事务时,
我一直在使用 AbstractRoutingDataSource取得了巨大的成功,但遇到了一个我无法解决的问题:当我使用 @Async 启动异步方法时,它丢失了本地线程的上下文,我无法弄清楚设置数据库
我有一个 Spring+Hibernate/Flex 应用程序,需要在数据库模式之间动态切换。为了实现这一点,我在this之后实现了一个AbstractRoutingDataSource。文章。不幸的
我正在使用 Spring、Spring Data JPA、Spring Security、Primefaces 的项目...... 我正在关注this tutorial关于 Spring 的动态数据源
我关注了this tutorial从 2007 年开始学习如何使用 Spring 设置多个可选择的 DataSource 实例: 我的问题是,由于这篇文章已经很老了,现在是否有更好的方法来代替使用 T
根据this article ,您可以使用 Spring Framework 中的 AbstractRoutingDataSource 来动态更改应用程序使用的数据源。 但是,使用的数据源是由配置定义
我使用 JPA 注释(Hibernate 实现)来初始化我的数据库架构。我关注文章 DYNAMIC DATASOURCE ROUTING实现动态数据源路由类。 但是,我有两个数据库(映射了 2 个数据
大家好,我已按照本指南使用 Spring-Boot 实现 Multi-Tenancy 应用程序: https://www.baeldung.com/spring-abstract-routing-da
我是 Spring boot 的新手,我正在开发一个需要能够连接到多个可用数据库之一的新应用程序。根据用户的凭据,我将确定要连接到哪个数据库,因此我需要能够在运行时动态更改连接。我找到了一个旧的 Sp
我正在使用 SpringBoot 以及 Hibernate 作为持久性提供程序。对于我的应用程序,我需要在 2 个数据库之间进行动态选择。 (For simplicity sake, domain
我在 Spring 中使用 Hibernate,相关配置: 最佳答案 想一想... 一些代码想要从DataSource 获取Connection。可能是为了启动
我在 Spring 中使用 Hibernate,相关配置: 最佳答案 想一想... 一些代码想要从DataSource 获取Connection。可能是为了启动
我们的应用程序使用 Struts2 Internalization 和 Spring AbstractRoutingDataSource 进行动态数据库更改。更改语言,需要选择对应的语言数据库。 因此
我正在使用 Spring 实现一个 Multi-Tenancy 系统,其中每个租户都有自己的数据库。我的一切都已启动并运行。 我扩展了“AbstractRoutingDataSource”并覆盖了“d
我是一名优秀的程序员,十分优秀!