工厂和dao用spring支持一些数据库

时间:2012-06-23 10:52:34

标签: database spring dao factory-pattern

目前我们有一个使用spring支持mysql的应用程序。 有些人更喜欢使用Oracle。 所以我用spring搜索一个带有一个工厂的抽象工厂,每个数据库都有一个dao。 如何在所有这个组件之间粘上胶水? 组件如何知道需要使用的数据源? 做春天有什么好的做法吗?

1 个答案:

答案 0 :(得分:2)

不清楚你的问题到底是什么,但是Spring配置文件可以回答所有这些问题。首先,您需要为每个受支持的数据库定义两个DataSource

<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启动将失败。但是如果您启用其中一个配置文件(mysqloracle),Spring将仅实例化并创建用于匹配配置文件的bean。