Spring JdbcTemplate中的多租户
我在我的项目中使用JdbcTemplate,我们需要在项目中实现多租户 现在我们只是创建一个数据源bean,然后将该数据源注入jdbtemplate,就像Spring JdbcTemplate中的多租户,spring,spring-boot,spring-jdbc,jdbctemplate,Spring,Spring Boot,Spring Jdbc,Jdbctemplate,我在我的项目中使用JdbcTemplate,我们需要在项目中实现多租户 现在我们只是创建一个数据源bean,然后将该数据源注入jdbtemplate,就像 @Bean public DataSource dataSource() { final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup(); dsLookup.setResourceRef(true); return dsLookup.getDataS
@Bean
public DataSource dataSource() {
final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
dsLookup.setResourceRef(true);
return dsLookup.getDataSource("path");
}
@Bean
public NamedParameterJdbcTemplate jdbcTemplate(DataSource dataSource) {
JdbcTemplate template = new JdbcTemplate(dataSource);
return new NamedParameterJdbcTemplate(template);
}
但是在拥有多租户之后,我们需要根据请求中的参数连接到不同的模式
有人能告诉我如何使用jdbctemplate做到这一点吗?您可以创建这样一个Bean,它将根据数据源分配不同的模式:
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
Map<String, Object> jpaPropertiesMap = createJpaPropertiesMap();
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setPackagesToScan("com.example.multi*");
factoryBean.setJpaVendorAdapter(jpaVendorAdapter());
factoryBean.setJpaPropertyMap(jpaPropertiesMap);
return factoryBean;
}
private Map<String, Object> createJpaPropertiesMap() {
Map<String, Object> jpaPropertiesMap = new HashMap<>(jpaProperties.getProperties());
jpaPropertiesMap.put(Environment.MULTI_TENANT, MultiTenancyStrategy.SCHEMA);
// jpaPropertiesMap.put(Environment.MULTI_TENANT, MultiTenancyStrategy.DATABASE);
jpaPropertiesMap.put(Environment.MULTI_TENANT_CONNECTION_PROVIDER, tenantConnectionProvider);
jpaPropertiesMap.put(Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, currentTenantIdentifier);
jpaPropertiesMap.put(Environment.FORMAT_SQL, true);
jpaPropertiesMap.put(Environment.SHOW_SQL, true);
return jpaPropertiesMap;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(){
Map jpaPropertiesMap=createJpaPropertiesMap();
LocalContainerEntityManagerFactoryBean factoryBean=新的LocalContainerEntityManagerFactoryBean();
setDataSource(dataSource);
setPackagesToScan(“com.example.multi*”;
setJpaVendorAdapter(jpaVendorAdapter());
setjpapPropertyMap(jpapPropertiesMap);
返回factoryBean;
}
私有映射CreateJPapPropertiesMap(){
Map jpaPropertiesMap=newhashmap(jpaProperties.getProperties());
jpapPropertiesMap.put(Environment.MULTI_-TENANT,MULTI-tenancystategy.SCHEMA);
//jpaPropertiesMap.put(Environment.MULTI_-TENANT,MULTI-tenancystategy.DATABASE);
jpaPropertiesMap.put(Environment.MULTI_TENANT_CONNECTION_PROVIDER,tenantConnectionProvider);
jpapPropertiesMap.put(Environment.MULTI_TENANT_IDENTIFIER_RESOLVER,currentTenantIdentifier);
jpaPropertiesMap.put(Environment.FORMAT_SQL,true);
jpaPropertiesMap.put(Environment.SHOW_SQL,true);
返回JPapPropertiesMap;
}
如果您想为新租户创建数据库,只需取消对bean中的行的注释此解决方案是否需要JPA?我不认为OP正在使用这个方法。@Edward这个解决方案需要JPA