現在、mysql をサポートする spring を使用するアプリケーションがあります。Oracle の使用を好む人もいます。だから私はスプリングを使って、すべてのデータベースのファクトリを持つ抽象ファクトリを持つ方法を探し、それぞれにダオがあります。このすべてのコンポーネントの間に接着剤を配置する方法は? コンポーネントは、使用する必要があるデータソースをどのように認識していますか? これを行うための春の良い練習はありますか?
質問する
374 次
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 つ ( または のいずれmysql
かoracle
) を有効にすると、Spring はプロファイルに一致する Bean のみをインスタンス化して作成します。
于 2012-06-23T11:04:36.967 に答える