Spring - 在请求处理程序

时间:2015-06-28 19:29:46

标签: java spring

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

例如,对site1.domain.com和site2.domain.com的请求应该具有与不同数据库,用户等一起使用的不同服务bean集。

最好的方法是什么?

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

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

1 个答案:

答案 0 :(得分:0)

您需要根据请求使用Custom 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){
    }
}