Từ những gì tôi hiểu, cả hai DataSource
và JdbcTemplates
là threadsafe
, vì vậy bạn có thể cấu hình một trường hợp duy nhất của một JdbcTemplate
và sau đó tiêm một cách an toàn thông tin này chia sẻ thành nhiều DAO (hoặc kho). Ngoài ra DataSource
phải là một singleton mùa xuân, vì nó quản lý hồ bơi kết nối.Nhiều phiên bản JdbcTemplate hay không?
Quan chức Spring Documentation JdbcTemplate best practices giải thích sự lựa chọn thay thế (trích đoạn từ cuốn hướng dẫn được in nghiêng, và ghi chú của tôi giữa dấu ngoặc vuông:
- cấu hình một DataSource trong file cấu hình Spring của bạn, và sau đó phụ thuộc-bơm đã chia sẻ DataSource đậu vào các lớp DAO của bạn, JdbcTemplate được tạo ra trong setter cho DataSource [với cấu hình XML và điều này dẫn đến nhiều trường hợp JdbcTemplate, vì trong bộ dữ liệu setter có
new JdbcTemplate(dataSource)
] - sử dụng quét thành phần và hỗ trợ chú thích cho tiêm phụ thuộc. Trong trường hợp này, bạn chú thích lớp với @Repository (làm cho nó trở thành một ứng cử viên cho quét thành phần) và chú thích phương thức setter DataSource với @Autowired. [trường hợp này cũng dẫn đến nhiều trường hợp JdbcTemplate]
- Nếu bạn đang sử dụng lớp JdbcDaoSupport của Spring và các lớp DAO được hỗ trợ JDBC khác nhau, thì lớp con của bạn thừa hưởng phương thức setDataSource (..) từ Lớp JdbcDaoSupport. Bạn có thể chọn có kế thừa từ lớp này hay không. Lớp JdbcDaoSupport chỉ được cung cấp dưới dạng tiện lợi. [kể từ khi bạn đã là một thể hiện của JdbcDaoSupport cho mỗi lớp mở rộng nó, có một thể hiện của JdbcTemplate quá cho mỗi thể hiện của lớp được thừa kế (xem source code for JdbcDaoSupport)]
Tuy nhiên, một lưu ý sau, không khuyến khích tất cả các các tùy chọn vừa được trình bày:
Sau khi được định cấu hình, một cá thể JdbcTemplate là luồng an toàn. Bạn có thể muốn nhiều cá thể JdbcTemplate nếu ứng dụng của bạn truy cập nhiều cơ sở dữ liệu, đòi hỏi nhiều DataSources và sau đó là nhiều JdbcTemplates được định cấu hình khác nhau.
Nói cách khác, tất cả các tùy chọn vừa trình bày sẽ dẫn đến có nhiều phiên bản JdbcTemplate (một cho mỗi DAO) và ngay sau khi tài liệu nói rằng không cần thiết khi làm việc với một cơ sở dữ liệu.
Điều tôi sẽ làm là tiêm trực tiếp JdbcTemplate
đến các DAO khác nhau cần nó, vì vậy câu hỏi của tôi là, liệu có ổn không? Và bạn cũng nghĩ rằng tài liệu tham chiếu Spring là tự mâu thuẫn? Hay là sự hiểu lầm của tôi?
Chỉ cần sử dụng một nguồn dữ liệu/JdbcTemplate mỗi cơ sở dữ liệu chương trình – tom
tài liệu Mùa xuân không tự mâu thuẫn. Bạn nên đọc câu lệnh trước đó - Bất kể bạn đang sử dụng kiểu mẫu nào ở trên (hoặc không), ít khi cần tạo một cá thể mới của một lớp JdbcTemplate mỗi khi bạn muốn thực thi SQL. Thực hành tốt nhất là một JdbcTemplate mỗi dao. Nhiều JdbcTemplates nếu bạn muốn nhiều DataSources chỉ. – hutingung