Tôi có một ứng dụng sử dụng bốn cơ sở dữ liệu ở các vị trí địa lý khác nhau. Tất cả các cơ sở dữ liệu chứa cùng một bảng và chỉ có tên cơ sở dữ liệu là khác nhau tùy theo vị trí. Tôi phải tạo một số báo cáo trong ứng dụng sử dụng dữ liệu từ mỗi cơ sở dữ liệu. Điều gì sẽ là cách thích hợp để tạo ra những kết nối cơ sở dữ liệu từ một ứng dụng java và có một mẫu thiết kế phù hợp cho nhiệm vụ này mà tôi có thể sử dụng không?Cách tạo nhiều kết nối cơ sở dữ liệu cho các cơ sở dữ liệu khác nhau trong java
Trả lời
Như các bạn đã không được gắn thẻ câu hỏi của bạn với bất kỳ này, hibernate
, JPA
, ORM
, tôi giả sử bạn đang đối phó với JDBC đồng bằng.
Có nói rằng, tôi đề nghị bạn có một lớp DAO để đối phó với cơ sở dữ liệu bên dưới và để lại chi tiết kết nối với các triển khai cụ thể. Bạn có thể định cấu hình các chuỗi kết nối của mình trong một số tệp .properties
, cho phép nói.
[Bổ sung]
Bạn cũng có thể tận dụng các nhà máy DAO, một thực hiện Abstract Factory hoặc mẫu Factory mathod, nào phù hợp với ở đây.
[Liên kết]
- A very fine implementation of DAO and DAO Factory, bởi BalusC
- Core J2EE Patterns - cho là ngày nhưng có thể cung cấp một số ý tưởng.
Cách lý tưởng để đạt được điều này là sử dụng hệ thống đa chiều như OLAP. Nhưng hãy xem liệu bạn có thể tạo ra một khung nhìn từ những cơ sở dữ liệu đó hay không. Sau đó, bạn chỉ cần truy vấn chế độ xem (tức là chỉ một kết nối cơ sở dữ liệu). Ngoài ra, bạn vẫn có thể sử dụng nhiều kết nối cơ sở dữ liệu nếu muốn.
Bạn có thể xử lý nhiều kết nối dễ dàng bằng công cụ ORM như Hibernate .. Bạn có thể chỉ định từng kết nối trong một tệp cấu hình riêng biệt và khởi tạo kết nối được yêu cầu bằng cách tạo nhà máy phiên mới mỗi lần.
cách khác sẽ được sử dụng nguồn dữ liệu và JNDI: Java connecting to multiple databases
Tôi nghĩ rằng bạn có thể sử dụng một sự kết hợp của mô hình Nhà máy và mô hình Singleton cho mục đích này.
Có nhiều cách để bạn có thể đạt được điều này:
- Nếu bạn đang sử dụng bất kỳ container Java EE mà hỗ trợ giao dịch phân phối sau đó bạn có thể sử dụng có chức năng.
- Nếu bạn đang sử dụng JDBC đơn giản thì bạn sẽ phải duy trì kết nối của riêng mình cho mọi cơ sở dữ liệu. Đối với JDBC:
- Cung cấp tất cả chi tiết kết nối
- Có mặt tiền mang đến cho bạn đối tượng mong muốn bằng cách gọi DAO chung trừu tượng.
- Có một nhà máy tạo dao dựa trên kết nối.
- Sử dụng các công cụ ORM như Hibernate, nơi bạn có thể sử dụng cấu hình cho nhiều cơ sở dữ liệu. Tutorial.
- Nếu bạn đang sử dụng Spring, thì bạn có thể định cấu hình một nguồn dữ liệu cho mỗi cơ sở dữ liệu. Docs
Design Patterns:
- Facade Pattern - cho ẩn sự phức tạp và sử dụng cơ sở dữ liệu nhiều.
- Nhà máy - Trong trường hợp bạn tự quản lý kết nối cơ sở dữ liệu.
- Singleton - Đối với datasources
là rất dễ dàng :)
1.Create một nguồn dữ liệu để thử kết nối đến DB
public DataSource getDataSource(String db) throws Exception {
DataSource dt = null;
InitialContext ic = null;
try {
if(db.trim().equals("you_database_name")) {
dt = (DataSource)ic.lookup("jdbc/connection_name");
} else if(db.trim().equals("you_database_name")) {
dt = (DataSource) ic.lookup("jdbc/connection_name");
}
return dt;
} catch(NamingException n) {
throw new Exception("Err getDataSource (ServiceLocator) NamingException - " + n.getMessage());
}
2.Create một DataBase lớp, nhớ đóng tất cả các kết nối trong thời điểm này.
public class DataBases {
public YouNameDataSourceClass dataSrc;
public DataBases() throws Exception {
super();
dataSrc = new YouNameDataSourceClass.getDataSource();
}
public Connection getConnectionAS400() throws Exception {
return locator.getDataSource("you_database_name").getConnection();
}
public Connection getConnectionOracle() throws Exception {
return locator.getDataSource("you_database_name").getConnection();
}
public Connection getConnectionSQLServer() throws Exception {
return locator.getDataSource("you_database_name").getConnection();
}
}
Cái nhìn tốt.
- 1. Java, cách thay đổi cơ sở dữ liệu hiện tại sang cơ sở dữ liệu khác?
- 2. Cơ sở dữ liệu và kết nối
- 3. Kết hợp nhiều cơ sở dữ liệu vào một cơ sở dữ liệu đơn
- 4. Nhiều kết nối cơ sở dữ liệu trong Rails
- 5. Tạo cơ sở dữ liệu từ cơ sở dữ liệu khác?
- 6. Nhiều lệnh giao dịch SQL qua các kết nối cơ sở dữ liệu khác nhau
- 7. Mở lại kết nối cơ sở dữ liệu trong Java
- 8. JDBC - Kết nối nhiều cơ sở dữ liệu
- 9. Codeigniter - nhiều kết nối cơ sở dữ liệu
- 10. LINQ trên nhiều cơ sở dữ liệu
- 11. DBI: Kết nối với một cơ sở dữ liệu khác nếu cơ sở dữ liệu đầu tiên không tồn tại
- 12. Nhiều cơ sở dữ liệu trong Rails
- 13. Chuyển dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác
- 14. Kết nối cơ sở dữ liệu không đồng nhất
- 15. Thiết kế cơ sở dữ liệu SaaS - Nhiều Cơ sở dữ liệu? Tách?
- 16. Một cơ sở dữ liệu người dùng phục vụ nhiều cơ sở dữ liệu ứng dụng
- 17. Kết nối tối đa cho cơ sở dữ liệu sqlite3
- 18. Một cơ sở dữ liệu và nhiều cơ sở dữ liệu
- 19. Các kết nối cơ sở dữ liệu và xoắn Xoắn
- 20. Cách lấy chuỗi kết nối từ cơ sở dữ liệu
- 21. Tạo dữ liệu thử nghiệm trong cơ sở dữ liệu
- 22. CakePHP Cách thay đổi kết nối cơ sở dữ liệu
- 23. Cơ sở dữ liệu người dùng đơn và cơ sở dữ liệu nhiều người dùng
- 24. cách kết nối F # với cơ sở dữ liệu MySQL?
- 25. Cơ sở dữ liệu cho Python Twisted
- 26. kết nối cơ sở dữ liệu oracle trong web.config asp.net
- 27. Giữ mở một kết nối cơ sở dữ liệu MongoDB
- 28. Liên kết cơ sở dữ liệu Oracle
- 29. Ưu tiên kết nối cơ sở dữ liệu PHP/MySQL?
- 30. Các loại chỉ mục cơ sở dữ liệu khác nhau?
nhưng sau đó bạn sẽ có nhiều kết nối db như thế nào? –
@munna: Mỗi lần triển khai DAO sẽ biết Datasource của nó. –