2015-05-27 37 views
11

Thiết lập sự cố dựa trên webservice (Spring/Java, Tomcat7 và MySql), nơi mọi người dùng đều có cơ sở dữ liệu riêng của họ. Vì tất cả các cơ sở dữ liệu được tạo động trong thời gian chạy, cấu hình chúng tĩnh trước khi khởi động không phải là một tùy chọn.Kết nối cơ sở dữ liệu cho các kết nối cơ sở dữ liệu động

Để tối ưu hóa việc sử dụng kết nối cơ sở dữ liệu, việc triển khai hồ bơi kết nối cơ sở dữ liệu sẽ rất tuyệt, phải không?

Với Java/Spring: Làm cách nào để tạo hồ bơi kết nối cho cơ sở dữ liệu động? Tôi hơi bị ảnh hưởng bởi việc thiếu sạch tùy chọn tại đây!

Vấn đề: Tomcat's Connection Pool (và như xa như tôi hiểu C3P0 cũng) đối xử với mỗi trường hợp DataSource mới như toàn bộ một hồ bơi kết nối mới ->stack-reference

  1. có phải là một ý tưởng tốt để tạo ra một tĩnh nguồn dữ liệu với một kết nối MySql chung (không xác định cơ sở dữ liệu trên kết nối) và sử dụng một nhóm kết nối với nguồn dữ liệu này cùng với các câu lệnh SQL được điều chỉnh?
    stack-reference
  2. Điều gì về việc phát triển hồ bơi nguồn dữ liệu dựa trên cơ sở dữ liệu liên tục tùy chỉnh? Bất kỳ kinh nghiệm với hiệu suất ở đây? Lời khuyên nào? Bất kỳ thư viện nào làm điều đó? Hoặc là nó có khả thi để giải quyết vấn đề DataSource của Tomcat bằng cách tạo tự động Tomcat JNDI Datasources bằng cách thao tác context.xml động của nó từ Java không? Không.
  3. Tôi không thể tin rằng không có nhiều hơn đồng bằng/đơn giản giải pháp cho việc này. Grails/Hibernate đấu tranh với điều này, Java/JDBC đấu tranh với điều này, ... là nó như một trường hợp sử dụng hiếm hoi để tách userdata trên cơ sở người dùng bằng cách tạo cơ sở dữ liệu người dùng cụ thể động? Nếu vậy, thiết lập nào tốt hơn?

EDIT

  1. lựa chọn khác là những gợi ý từ @M.Deinum sử dụng một nguồn dữ liệu cấu hình đơn và tự động hotswap nó cho kết nối đúng ->M.Deinum Blogstack-reference.
    Làm thế nào để thực hiện với một hồ bơi kết nối như những người ở trên?
+0

Không chắc chắn cách thức ngủ đông đấu tranh với điều này khi đi ra khỏi hộp với sự hỗ trợ đa đối tượng thuê, đó là cơ bản những gì bạn muốn. –

+0

Chăm sóc để đưa ra một ví dụ? Sẽ rất vui mừng khi thấy một giải pháp làm việc! Kinh nghiệm của tôi với hỗ trợ nhiều người thuê nhà ngủ đông cho tôi hiểu rằng các nguồn dữ liệu vẫn phải có mặt/được cấu hình trước khi khởi động. Làm thế nào tôi có thể sử dụng ngủ đông mà không có nguồn dữ liệu như vậy và tạo kết nối của tôi tự động? –

+0

Bằng cách triển khai 'MultiTenantConnectionProvider' của riêng bạn và cũng là mặc định' DataSourceBasedMultiTenantConnectionProviderImpl' sử dụng JNDI cho tra cứu động để những người không cần phải có sẵn khi khởi động. Bạn có thể thêm các nguồn dữ liệu vào JNDI và Hibernate của bạn sẽ thực hiện tra cứu. –

Trả lời

0

Trước hết, xin lỗi vì tiếng Anh của tôi, tôi đang cải thiện mỗi ngày.

Trong kinh nghiệm của tôi, tôi đã có một tình huống tương tự và nó đã được giải quyết với khung mùa xuân. Hãy để tôi giải thích cho bạn cách bạn sẽ giải quyết câu hỏi đó.

  1. Tạo một file mùa xuân cấu hình với những đặc điểm: a) Một bộ nạp tài nguyên: Cái này là trách nhiệm của các thuộc tính tải từ các tập tin cấu hình hoặc từ cơ sở dữ liệu, các thuộc tính sẽ là chiếm đoạt để thiết lập kết nối cơ sở dữ liệu. b) Cấu hình cơ sở dữ liệu pool được tham số hóa với các thuộc tính mà bạn sẽ tải.

  2. Tạo một lớp locator: Trong lớp này, bạn sẽ cần một HashMap

  3. Sử dụng tính năng đa bối cảnh mùa xuân: Ý tưởng là gán một mã số để mọi người kết nối mà bạn thiết lập và sau đó tải kết nối đó giống như một bối cảnh ứng dụng với mùa xuân, sau đó trong lớp định vị, đặt vào bản đồ ngữ cảnh đó và sử dụng nó thường xuyên như bạn cần.

Tôi nghĩ là bạn làm theo các bước này, bạn có thể tạo hồ bơi động hoặc kết nối cơ sở dữ liệu theo ý muốn.

1

Khi cơ sở dữ liệu được tạo trong thời gian chạy, bạn phải tạo các hồ bơi cũng trong thời gian chạy. Tôi sợ cơ sở hạ tầng mùa xuân không giúp bạn bất kỳ sự trợ giúp nào ở đây, vì nó được điều chỉnh cho trường hợp sử dụng tĩnh thông thường.

tôi muốn có một bản đồ của hồ:

  • có một
     Map < connectionUrlString,List< c3poPool > > map
  • khi yêu cầu một kết nối, có hồ bơi C3PO tương ứng từ bản đồ
  • và bạn có thể tận dụng tốt nhất của cả hai thế giới , vì hồ bơi kết nối thực cho mỗi cơ sở dữ liệu được tạo động được xử lý bởi một cá thể c3po, nhưng bạn có thể tạo các cá thể mới trong thời gian chạy

Điều này hoạt động như một mức thấp el giải pháp. Nếu bạn muốn đi xa hơn, bạn có thể bọc logic này vào một nhà cung cấp kết nối db, và đăng ký đó như là một "trình điều khiển". Bằng cách này, bất kỳ phần nào của ứng dụng của bạn yêu cầu kết nối mới, bạn chỉ có thể trả lại một kết nối từ các nhóm hiện có (và nếu một kết nối hoàn toàn mới được yêu cầu, hãy tạo một hồ bơi mới cho điều đó).

2

Tôi tin rằng HikariCP hoạt động mà không cần phải chỉ định một cơ sở dữ liệu.

Các vấn đề liên quan