ですthis SO post。リンクポストから
:そのような APIで設定することができないこれらのプロパティのほとんど基本的にJDBCで、むしろ彼らは、実装に依存します。 JDBC の処理方法は、 ベンダーごとに異なる接続URLを許可することです。
それでは、あなたがやっていることはJDBCシステムは、URLをどうするか を知ることができるようにドライバを登録です:
DriverManager.registerDriver((Driver)
Class.forName("com.mysql.jdbc.Driver").newInstance());
その後、あなたは URLを形成:
String url =
"jdbc:mysql://[host][,failoverhost...][:port]/[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]"
最後に、 nnection:もっと 洗練されたJDBCで
Connection c = DriverManager.getConnection(url);
は、接続プールと などとの関与を取得、およびアプリケーション・サーバーは、多くの場合、JNDIで ドライバを登録する独自の方法を持っていて、データソースを検索しますそこから getConnectionを呼び出してください。
MySQLがサポートするプロパティについては、こちらを参照してください。リンクは無効です)。
EDIT:もう一つの思考、技術だけ がクラスが登録独自の静的初期化子を有していなければならないようにClass.forName(「はcom.mysql.jdbc.Driver」)は、十分でなければならないコードの行を有しますa バージョンですが、JDBCドライバでは時々JDBCドライバが認識されないので、わからない場合は、 2番目の登録に害はほとんどありません。
私はそれを試していないので、これがうまくいくかどうかわかりませんが、 が試してみることができます。
ここでは、値を指定せずにDAOの上に@Transactional
アノテーションを使用します(これは機能します)。あなたのDAOクラスでは、DataSource
beanを注入するのではなく、上記のリンクで指定されているように独自のdataSourceを作成し、実行時にその依存性を注入するか、getter setterメソッドを使用するか、new
キーワードを使用します。私はそのトリックをやりたいと思う。
注:私はまだ自分でテストしていないので、これがうまくいくと私に知らせてください。
、あなたは別々のデータベースが、同じテーブルによって何を意味していますか?つまり、各データベースには同じスキーマがありますか? –
はい。各データベースには同じスキーマがあります –
実際に解決策を探していますが、それ以外にも、クライアントごとに別々のデータベースを用意することをお勧めしませんスキーマは同じですが、なぜ単一のデータベースを使用しないのですか? 100台のクライアントがあっても100台のデータベースにつながり、管理するデータベース接続数は100になります。それは資源の浪費です。 –