我遇到了这个特殊的问题,我需要从两个不同的数据源中获取数据。我正在使用myBatis并且根据他们的文档,一个sqlSessionFactory只能引用一个数据源,并且由于sqlSessionFactory被注入到DAO中,因此具有多个源的DAO的想法是不可能的。我正在考虑创建一个与多个DAO交互的通用服务类。这是可能的。?如果是的话,怎么样?如果没有,为什么不......?
答案 0 :(得分:0)
如果您需要将几个实现相同接口的bean注入您的服务 - 请检查this answer,它可能就是您要找的。简单的方法是:
interface DevService
{
void add(Device d);
String getName();
}
@Service("devServiceLocal")
class DevServiceLocalImpl implements DevService
{
void add(Device d) {...}
String getName() {return "local";}
}
class Controller
{
@Autowired
Collection<DevService> services;
void doSomethingWithService()
{
// TODO: Check type somehow
String servType = "local";
for(DevService s: services)
{
if(servType.equals(s.getName())
{
// Call service methods
break;
}
}
}
}
答案 1 :(得分:0)
我遇到了这个特殊的问题,我需要从两个不同的数据源中获取数据。
- &GT;在使用两个数据源时,可以使用/创建两个SessionFactory。我不知道myBatis。你可以做的是创建BaseDao
类,通过所有dao类扩展它。自动连接两个SessionFactory
和DataSource
。创建两个不同的getter方法以从两个Session工厂获取会话。您可以从所有Dao类访问两个SessionFactories。
public class BaseDao {
// Declare and autowire session factory 1 -> defined in configuration
// Declare and autowire session factory 2 -> defined in configuration
// getter method to get session from factory 1
// getter method to get session from factory 2
}
public UserDaoImpl extends BaseDao implements UserDao {
// here you can directly access sessions from factory 1 & 2 using getter methods in BaseDao
}