工厂和DAO支持一些数据库与弹簧



目前我们有一个使用 spring 的应用程序,它支持 mysql。有些人更喜欢使用Oracle。所以我用 spring 寻找一种方法,有一个抽象工厂,每个数据库都有一个工厂,每个数据库都有一个 dao。如何在所有这些组件之间涂胶?组件如何知道需要使用的数据源?春天有什么好的实践来做到这一点吗?

不清楚你的问题到底是什么,但 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。

最新更新