0

現在、mysql をサポートする spring を使用するアプリケーションがあります。Oracle の使用を好む人もいます。だから私はスプリングを使って、すべてのデータベースのファクトリを持つ抽象ファクトリを持つ方法を探し、それぞれにダオがあります。このすべてのコンポーネントの間に接着剤を配置する方法は? コンポーネントは、使用する必要があるデータソースをどのように認識していますか? これを行うための春の良い練習はありますか?

4

1 に答える 1

3

あなたの問題が正確に何であるかは明確ではありませんが、Spring プロファイルはそれらすべてに対する答えです。DataSource最初に、サポートされているデータベースごとに2 つの を定義する必要があります。

<bean id="oracleDataSource" class="..." profile="oracle">
    <!-- -->
</bean>

<bean id="mysqlDataSource" class="..." profile="mysql">
    <!-- -->
</bean>

profile属性に注意してください。実際には、別の JDBC URL とドライバーを使用する 1 つのデータ ソースを単純にパラメーター化するだけで済む可能性がありますが、問題にはなりません。

次に、各 DAO の 2 つのバージョンを定義します。1 つは Oracle 用、もう 1 つは MySQL 用です。

interface MonkeyDao {
    //...
}

@Repository
@Profile("oracle")
class OracleMonkeyDao implements MonkeyDao {
    //...
}

@Repository
@Profile("mysql")
class MySqlMonkeyDao implements MonkeyDao {
    //...
}

ご覧のとおり、同じインターフェースを実装する 2 つの Bean が定義されています。プロファイルなしでそれを行い、それらを自動配線する場合:

@Resource
private MonkeyDao monkeyDao;

依存関係が解決されていないため、Spring の起動は失敗します。ただし、プロファイルの 1 つ ( または のいずれmysqloracle) を有効にすると、Spring はプロファイルに一致する Bean のみをインスタンス化して作成します。

于 2012-06-23T11:04:36.967 に答える