Java hibernate多租户应用程序中的数据源在启动时没有查找

Java hibernate多租户应用程序中的数据源在启动时没有查找,java,hibernate,datasource,multi-tenant,Java,Hibernate,Datasource,Multi Tenant,我目前正在使用Spring和Hibernate开发一个多租户应用程序,该应用程序具有独立的数据库。 我希望即使我的一个数据源无法访问,我的应用程序也能正常工作(如果出现问题),以便其他租户仍能访问他们的数据。这就是为什么我不希望我的应用程序在部署时检查数据源的原因。我试图告诉大家不要在开始时查找数据源: applicationContext-datasources.xml : <!-- data source 1 --> <jee:jndi-lookup id="ds1" j

我目前正在使用Spring和Hibernate开发一个多租户应用程序,该应用程序具有独立的数据库。 我希望即使我的一个数据源无法访问,我的应用程序也能正常工作(如果出现问题),以便其他租户仍能访问他们的数据。这就是为什么我不希望我的应用程序在部署时检查数据源的原因。我试图告诉大家不要在开始时查找数据源:

applicationContext-datasources.xml :

<!-- data source 1 -->
<jee:jndi-lookup id="ds1" jndi-name="jdbc/ds1" resource-ref="true" lookup-on-startup="false" expected-type="javax.sql.DataSource" />

<!-- data source 2 -->
<jee:jndi-lookup id="ds2" jndi-name="jdbc/ds2" resource-ref="true" lookup-on-startup="false" expected-type="javax.sql.DataSource" />
如果我在applicationContext-datasources.xml中使用true设置启动时的查找,那么它工作得非常好,但我知道在我的一个数据源不可访问的那一天,即使对于其他租户,它也不会工作。


提前感谢您的帮助。

我找到了实现目标的方法,但解决方案并不完美

当我在方法getAnyConnection()中声明我的类MultiTenantConnectionProviderImpl时,我提供了一个来自默认数据库的连接,该数据库由所有租户共享:

public class MultiTenantConnectionProviderImpl implements MultiTenantConnectionProvider, Stoppable {

    @Override
    public Connection getAnyConnection() throws SQLException {
        return defaultDataSource.getConnection();
    }
    ...
}
我让其他方法确定当前租户

然后,在applicationContext-datasources.xml中,我可以按照自己的意愿声明所有其他数据源:

applicationContext-datasources.xml :

<!-- default data source -->
<jee:jndi-lookup id="defaultDatasource" jndi-name="jdbc/defaultDatasource" resource-ref="true" lookup-on-startup="true" expected-type="javax.sql.DataSource" />

<!-- data source 1 -->
<jee:jndi-lookup id="ds1" jndi-name="jdbc/ds1" resource-ref="true" lookup-on-startup="false" expected-type="javax.sql.DataSource" />

<!-- data source 2 -->
<jee:jndi-lookup id="ds2" jndi-name="jdbc/ds2" resource-ref="true" lookup-on-startup="false" expected-type="javax.sql.DataSource" />
applicationContext-datasources.xml:
这样做是可行的,但它需要一个共享数据库

applicationContext-datasources.xml :

<!-- default data source -->
<jee:jndi-lookup id="defaultDatasource" jndi-name="jdbc/defaultDatasource" resource-ref="true" lookup-on-startup="true" expected-type="javax.sql.DataSource" />

<!-- data source 1 -->
<jee:jndi-lookup id="ds1" jndi-name="jdbc/ds1" resource-ref="true" lookup-on-startup="false" expected-type="javax.sql.DataSource" />

<!-- data source 2 -->
<jee:jndi-lookup id="ds2" jndi-name="jdbc/ds2" resource-ref="true" lookup-on-startup="false" expected-type="javax.sql.DataSource" />