是否可以将Spring Boot配置为使用MultiTenantConnectionProvider,以便我系统的每个客户端都连接到自己的私有数据库?
具体来说,我希望使用内置的hibernate支持多租户:
这是我所追求的那种配置的一个例子,但我无法弄清楚如何在Spring Boot设置中使用它:
我已经尝试将这些属性添加到application.properties:
spring.jpa.hibernate.multiTenancy=DATABASE
spring.jpa.hibernate.tenant_identifier_resolver=com.mystuff.MyCurrentTenantIdentifierResolver
spring.jpa.hibernate.multi_tenant_connection_provider=com.mystuff.MyMultiTenantConnectionProviderImplX
Run Code Online (Sandbox Code Playgroud)
我也试着编码了我自己CurrentTenantIdentifierResolver和MultiTenantConnectionProvider,并试图从我的主要@Configuration豆服务这些了:
@Bean
public CurrentTenantIdentifierResolver currentTenantIdentifierResolver() {
return new CurrentTenantIdentifierResolver() {
public String resolveCurrentTenantIdentifier() {
// this is never called ...
}
public boolean validateExistingCurrentSessions() {
// this is never called ...
}
};
}
@Bean
public MultiTenantConnectionProvider multiTenantConnectionProvider() {
return new AbstractMultiTenantConnectionProvider() {
protected ConnectionProvider getAnyConnectionProvider() {
// this is never called ...
}
protected ConnectionProvider selectConnectionProvider(String s) {
// this is never …Run Code Online (Sandbox Code Playgroud) 有没有办法直接加载标有的类@ConfigurationProperties而不使用Spring Context?基本上我想重用Spring所有的智能逻辑,但对于我在Spring生命周期之外手动实例化的bean.
我有一个在Spring(Boot)中快乐加载的bean,我可以将它注入我的其他Service bean:
@ConfigurationProperties(prefix="my")
public class MySettings {
String property1;
File property2;
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅spring docco http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-external-config-command-line-args
但是现在我需要从Spring(在Hibernate之外)创建的类中访问这个bean.该类是在应用程序启动过程的早期创建的,Spring Boot尚未通过经典查找帮助器方法或自己动态的静态引用使应用程序上下文可用.
所以我反而想做一些事情:
MySettings mySettings = new MySettings();
SpringPropertyLoadingMagicClass loader = new SpringPropertyLoadingMagicClass();
loader.populatePropertyValues(mySettings);
Run Code Online (Sandbox Code Playgroud)
从命令行,系统属性,app.properties等开始,MySettings最终会加载它的所有值.在Spring中是否有类似这样的东西,或者它是否与应用程序上下文交织在一起?
显然我可以自己加载Properties文件,但我真的想保留Spring Boot的逻辑,使用命令行变量(例如--my.property1 = xxx),或系统变量,或者application.properties甚至是yaml文件,如以及它在松弛绑定和类型转换方面的逻辑(例如,property2是一个文件),因此它与Spring上下文中使用的完全相同.
可能还是梦想?
谢谢你的帮助!