gpt4 book ai didi

java - Spring - 在请求处理程序中动态切换应用程序上下文

转载 作者:太空宇宙 更新时间:2023-11-04 13:42:49 26 4
gpt4 key购买 nike

我想使用 Jersey/Spring 实现一个 RESTful Web 服务,它根据发出请求的主机名在应用程序上下文之间切换(类似于虚拟主机)。

例如,对 site1.domain.com 和 site2.domain.com 发出的请求应该具有不同的服务 bean 集,用于不同的数据库、用户等。

最好的方法是什么?

编辑:应用程序上下文应该具有相同的 bean 类。区别在于使用的数据库。而且它们必须是动态的,即在应用程序运行时定义/销毁。

很高兴知道 Spring 是否可以做到这一点以及搜索的起点是什么。我找到的大部分信息都与webapp init期间的静态配置有关。

最佳答案

您需要根据请求使用自定义 Spring bean 范围,以管理具有多个单元的多个 EMF/SessionFactory。

@Scope("dynamic")
@Bean(name ="erpEMF")
public LocalContainerEntityManagerFactoryBean erpManagerFactory() {
LocalContainerEntityManagerFactoryBean emf = buildEmf();
return emf;
}

@Scope("dynamic")
@Bean(name ="erpJPA")
public JpaTransactionManager erpTransactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setPersistenceUnitName("erpUnit");
return transactionManager;
}

@Scope("dynamic")
@Bean(name ="erpDataSource", destroyMethod=EmfHolder.DataSourceCloseMethod)
public DataSource erpDataSource() {
return dynamicDataSource( DB_NAMES.AGI_ERP );
}
public class DynamicScope implements Scope{
public Object get(String name, ObjectFactory<?> objectFactory) {
//return Service depending on your request
}
}
@Scope("dynamic")
@Service
public class ActAccountService extends ErpGenericService<ActAccount> implements IActAccountService {
@Transactional("erpJPA")
public Account create(Account t){
}
}

关于java - Spring - 在请求处理程序中动态切换应用程序上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31103887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com