2009-08-08 80 views
4

我想声明一个指向DB2数据库的Spring数据源。目前,我正在使用org.springframework.jdbc.datasource.DriverManagerDataSource来设置连接,但没有找到任何方式在数据源bean的数据库中指定数据库模式。任何人都可以帮助我吗?Spring数据源和数据库模式

回答

10

问题是没有标准的方式来设置模式,每个数据库都有不同的机制。

一个解决办法是设置模式作为数据库URL的一部分...

DB2的URL看起来像:

jdbc:db2://SERVER_NAME:PORT/DATABASE:currentSchema=SCHEMA_NAME;

希望帮助..

特别说明:确保你添加了分号;在URL的结尾处,否则您会收到错误,指出网址无效。最后还要确保没有什么;存在(甚至没有空格)。

+0

最后一个注释仅适用于db2。 – gdrt 2018-02-28 09:16:33

2

没有办法用标准的Spring命名空间来做到这一点。罗布哈罗普的一个request响应架构添加到配置:

在一般情况下,由于没有真正的优雅和高性能的方式通过装饰来做到这一点这种功能应该推入连接池。池可以为每个创建的连接设置一次模式,而在这里您必须在每次连接被检索时设置它。

如果您不顾一切地在您的配置中设置代理,那么提交者为代理提供了一些代码,以允许指定模式。

+0

那么这是否意味着可以像使用c3p0时那样仅为池指定模式。因为在使用c3p0连接池时找不到任何资源来指定模式。 – Barun 2009-08-08 10:19:56

+0

对不起,我从来没有使用过C3p0,所以我只能猜测如何设置它 – 2009-08-08 10:57:22

+0

我认为在这种情况下,“连接池”意味着你正在使用的应用服务器:WebLogic,JBOSS,Glassfish,Tomcat,Jetty,上帝保佑,WebSphere。 – duffymo 2009-08-08 11:39:33

0

如果您的连接使用模式的所有者作为用户,那么该连接将指向该特定模式。 即。如果用户user1是名为schema1的数据库模式的所有者,那么如果使用用户user1连接到数据库,则默认情况下连接将指向schema1。

我们使用了Spring提供的UserCredentialsDataSourceAdapter来基于登录用户连接到不同的模式。这提供了指向基于用户的特定模式的数据源。这使用基于线程的登录信息。每个线程都必须决定连接哪个模式并根据该模式提供给用户。