目前我们有一个使用支持mysql的spring的应用程序。有些人更喜欢使用 Oracle。所以我用spring搜索了一种方法来为每个数据库建立一个抽象工厂,每个数据库都有一个dao。如何在所有这些组件之间放置胶水?组件如何知道需要使用的数据源?春天有什么好的做法吗?
问问题
374 次
1 回答
3
不清楚您的问题到底是什么,但 Spring 配置文件可以解决所有问题。首先,您需要DataSource
为每个支持的数据库定义两个 s:
<bean id="oracleDataSource" class="..." profile="oracle">
<!-- -->
</bean>
<bean id="mysqlDataSource" class="..." profile="mysql">
<!-- -->
</bean>
注意profile
属性。实际上,您可能会使用不同的 JDBC URL 和驱动程序简单地对一个数据源进行参数化,但这并不重要。
现在您定义了每个 DAO 的两个版本:一个用于 Oracle,一个用于 MySQL:
interface MonkeyDao {
//...
}
@Repository
@Profile("oracle")
class OracleMonkeyDao implements MonkeyDao {
//...
}
@Repository
@Profile("mysql")
class MySqlMonkeyDao implements MonkeyDao {
//...
}
如您所见,您定义了两个实现相同接口的 bean。如果您在没有配置文件的情况下执行此操作,然后自动装配它们:
@Resource
private MonkeyDao monkeyDao;
由于未解决的依赖关系,Spring 启动将失败。但是,如果您启用配置文件之一(mysql
或oracle
),Spring 只会实例化并创建匹配配置文件的 bean。
于 2012-06-23T11:04:36.967 回答