我对spring和java的了解让我感到沮丧,希望有人能帮助我:)

我阅读了spring的文档并搜索了如何在hanacloud平台上实现多租户的示例,但没有人使用spring data / eclipseLink ...

我真的不知道框架中对象的生命周期如何以及如何正确配置以在春季隔离住户

所采用的多租户策略是用于隔离租户的列描述符,该列在子实体中映射的超类中进行了描述...

每个消费者客户端都由url标识,并且可以使用此API进行访问,我创建了一条路由来测试租户ID,并且每个URl的租户ID都不相同,这意味着我的应用程序可以正常订阅...

但是春季数据并不能隔离数据,我想他不是在根据消费者的租户ID创建实体管理器和存储库,也不是在提供商的租户ID基础上创建,思想是仅创建一个持久性单元,而数据源是分开的基于列描述符的数据,

租户的ID由系统生成,它不可能创建其他持久性单元,它们是在订阅时创建的。

这是问题

  • 关于LocalContainerEntityManagerFactoryBean,何时在堆栈中调用他?
  • 可以根据请求为每个租户ID创建一个实体管理器。

我的配置类来设置数据源

@Configuration
@Profile({ "neo" })
@EnableTransactionManagement
public class DataSourceNeoConfig {

@Bean
public DataSource jndiDataSource() throws IllegalArgumentException, NamingException {
    final JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();

    DataSource dataSource = dataSourceLookup.getDataSource("java:comp/env/jdbc/DefaultDB");

    return dataSource;
}

@Bean
public JpaVendorAdapter jpaVendorAdapter() {
    EclipseLinkJpaVendorAdapter jpaVendorAdapter = new EclipseLinkJpaVendorAdapter();
    jpaVendorAdapter.setGenerateDdl(true);
    jpaVendorAdapter.setShowSql(true);

    return jpaVendorAdapter;
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {

    LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();

    try {
        lef.setDataSource(jndiDataSource());
    } catch (IllegalArgumentException | NamingException e) {
        e.printStackTrace();
    }

    lef.setJpaVendorAdapter(jpaVendorAdapter());

    Properties properties = new Properties();
    properties.setProperty("eclipselink.weaving", "false");
    properties.setProperty(PersistenceUnitProperties.LOGGING_LEVEL, "FINE");
    properties.setProperty("eclipselink.ddl-generation", "create-tables");
// eclipselink.tenant.id is column the identifier in mapped class
// @TenantDiscriminatorColumn(name = "TENANT_ID", contextProperty = "eclipselink.tenant.id", length = 36)
    properties.setProperty("eclipselink.tenant.id", TenantHolder.getTenant());

    lef.setPackagesToScan("com.strongit.models");
    lef.setJpaProperties(properties);
    lef.afterPropertiesSet();
    return lef;
}

@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf){
  JpaTransactionManager transactionManager = new JpaTransactionManager();
  transactionManager.setEntityManagerFactory(emf);

  return transactionManager;
}
}

springBoot应用程序

@SpringBootApplication
@EnableJpaRepositories(basePackageClasses = AppNameApplication.class, entityManagerFactoryRef = "entityManagerFactory")
public class AppNameApplication extends SpringBootServletInitializer {

public static void main(String[] args) {
    SpringApplication.run(AvaliacaoApplication.class, args);
}

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder.sources(AvaliacaoApplication.class);
}
}

提前致谢 !!

  ask by Murilo Monteiro translate from so

本文未有回复,本站智能推荐:

1回复

Spring JPA:如何在同一请求中更新2个不同`DataSource`中的2个不同表?

在我们的应用程序中,我们有一个称为central的通用数据库,每个客户都有一个拥有完全相同的表集的数据库。 根据客户组织的要求,每个客户的数据库都可以托管在我们自己的服务器或客户的服务器上。 为了处理这种多租户需求,我们从Spring JPA扩展了AbstractRoutingDataS
2回复

具有相同实体和仓库的多个数据源

当前正在从事一个项目,我的Spring Boot项目需要利用同一数据库服务器中的多个数据源或架构。 我发现有几本教程可以指导春季引导中的多个数据源配置,其中实体foo存在于数据源A中,而bar存在于数据源B中,即下面。 https://scattercode.co.uk/2016/01/
1回复

多租户配置:事务上的StaleObjectStateException(休眠+ spring-data-jpa)

我正在尝试通过spring-boot,spring-data-jpa,hibernate和mysql(相同的模式,每个租户表都有一个tenant_code列)来设置配置以管理多租户环境。 对于依赖关系,父maven项目是spring-boot-starter-parent (2.1.2.REL
1回复

Spring Boot-在多租户应用程序的单个请求中访问多个数据源

此应用程序从请求URL中提取子域 ,并将其用作tenantId以选择要连接的数据源。 MultiTenantManager类使用提取的子域将应用程序映射到相关的MySql数据库。 到目前为止,一切工作正常。 但是在场景中添加了一个新要求,即使用MongoDB数据库。 因此,当
1回复

如何在多租户(每个租户的数据库)感知 Spring Boot 应用程序中使用固定数据库

我确实有一个多租户感知 Spring Boot 应用程序(请参阅https://medium.com/swlh/multi-tenancy-implementation-using-spring-boot-hibernate-6a8e3ecb251a ),其中包含一组确实存在的 jpa 实体数据库。
3回复

使用多租户实现在单个事务期间切换数据源

我一直在努力让这个工作几天,但似乎我找不到解决方案。 这就是为什么我想在这里问它。 短版 我有一个多租户实现,它适用于 Spring Boot、Spring Data JPA 和 Hibernate。 这就像一个魅力。 但现在我想实现一个功能,在单个事务期间切换数据库(数据源)。 例如我在我的服务
1回复

带有JPA的Spring MVC中的多租户架构

我在企业应用程序体系结构中遇到了一个严重问题。 我当前的应用程序是一个使用spring framework 3.2+和jpa 2.0的Web应用程序。 现在,我需要在当前应用程序中支持多租户。 我的要求是,当用户登录系统时,应该从相应的数据库中为该用户提供数据。 简而言之,我需要多个
1回复

从spring配置中引用一个值

首先介绍一下设置信息: 我有一个基于多租户的spring应用程序。 多租户支持库是内部开发的工具,我必须在其中使用该工具。 它的工作方式是在应用程序的Servlet前面设置一个拦截器。 在请求到达servlet时,它会为到达servlet的url上指定的承租人所需的“东西”加载承租人