Tôi đã định cấu hình lò xo có hỗ trợ giao dịch. Có cách nào để ghi lại các giao dịch chỉ để đảm bảo tôi thiết lập mọi thứ chính xác không? Hiển thị trong nhật ký là một cách hay để xem điều gì đang xảy ra.Hiển thị giao dịch Mùa xuân trong nhật ký
Trả lời
trong bạn log4j.properties
(đối với khai thác gỗ thay thế, hoặc định dạng xml log4j của, kiểm tra các tài liệu)
Tùy thuộc vào quản lý giao dịch của bạn, bạn có thể thiết lập mức độ khai thác gỗ của khung mùa xuân để nó cung cấp cho bạn thêm thông tin về giao dịch. Ví dụ, trong trường hợp sử dụng JpaTransactionManager
, bạn thiết lập
log4j.logger.org.springframework.orm.jpa=INFO
(đây là gói của người quản lý giao dịch của bạn), và cũng
log4j.logger.org.springframework.transaction=INFO
Nếu INFO
là không đủ, sử dụng DEBUG
Vì bạn có thể truy cập vào các lớp Spring khi chạy, bạn có thể xác định trạng thái giao dịch. Bài viết này có thể giúp bạn:
liên kết bị hỏng .... – Gab
Rất bị hỏng, nhưng hãy thử: [Mẹo để gỡ lỗi chú thích @Transactional của mùa xuân] (http://blog.timmattison.com/archives/2012/04/19/tips-for-debugging-springs -transactional-annotation /) (chưa thử bản thân mình). Nó sử dụng [TransactionSynchronizationManager] (https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/support/TransactionSynchronizationManager.html) để nhận trạng thái giao dịch. Mã này có lẽ nên sử dụng biến thread-local để lưu trữ tham chiếu đến 'isActualTransactionActive()' thay vì truy xuất nó trên mỗi cuộc gọi ghi nhật ký. –
Thông tin nhật ký thú vị nhất của JtaTransactionManager.java
(nếu câu hỏi này vẫn còn về số JtaTransactionManager
) được ghi lại ở mức ưu tiên DEBUG
. Giả sử bạn có một nơi log4j.properties
trên classpath, tôi muốn đề nghị như vậy, để sử dụng:
log4j.logger.org.springframework.transaction=DEBUG
Bạn có thể kích hoạt tính năng đăng nhập JDBC cũng như:
log4j.logger.org.springframework.jdbc=DEBUG
Đối với tôi, một cấu hình khai thác gỗ tốt để thêm là :
log4j.logger.org.springframework.transaction.interceptor = trace
Nó sẽ chỉ cho tôi đăng nhập như thế:
2012-08-22 18: 50: 00.031 TRACE - Bắt giao dịch cho [com.MyClass.myMethod]
[báo cáo log của riêng tôi từ phương pháp com .MyClass.myMethod]
2012-08-22 18: 50: 00.142 TRACE - Hoàn thành giao dịch cho [com.MyClass.myMethod]
Tuyệt vời! Không cần phải có tất cả các thông tin/gỡ lỗi/theo dõi đăng nhập của các gói khác, khi đây là những gì bạn đang tìm kiếm: D – Johanneke
đối với mùa xuân Boot ứng dụng:
logging.level.ROOT=INFO
logging.level.org.springframework.orm.jpa=DEBUG
logging.level.org.springframework.transaction=DEBUG
Dưới đây là một số mã tôi sử dụng trong triển khai Bố cục nhật ký của mình có nguồn gốc từ ch.qos.logback.core.LayoutBase.
Tôi tạo biến chủ đề cục bộ để lưu tham chiếu đến phương thức org.springframework.transaction.support.TransactionSynchronizationManager.isActualTransactionActive()
. Bất cứ khi nào một dòng đăng nhập mới được in ra, getSpringTransactionInfo()
được gọi và nó trả về một chuỗi ký tự một ký tự sẽ đi vào nhật ký.
Tài liệu tham khảo:
- Tips for Debugging Spring's @Transactional Annotation
- org.springframework.transaction.support.TransactionSynchronizationManager
- java.lang.ThreadLocal
- java.lang.Class.getMethod()
Code:
private static ThreadLocal<Method> txCheckMethod;
private static String getSpringTransactionInfo() {
if (txCheckMethod == null) {
txCheckMethod = new ThreadLocal<Method>() {
@Override public Method initialValue() {
try {
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
Class<?> tsmClass = contextClassLoader.loadClass("org.springframework.transaction.support.TransactionSynchronizationManager");
return tsmClass.getMethod("isActualTransactionActive", (Class<?>[])null);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
};
}
assert txCheckMethod != null;
Method m = txCheckMethod.get();
String res;
if (m == null) {
res = " "; // there is no Spring here
}
else {
Boolean isActive = null;
try {
isActive = (Boolean) m.invoke((Object)null);
if (isActive) {
res = "T"; // transaction active
}
else {
res = "~"; // transaction inactive
}
}
catch (Exception exe) {
// suppress
res = "?";
}
}
return res;
}
- 1. Mùa xuân - Giao dịch chỉ đọc
- 2. Giao dịch mùa xuân và hibernate.current_session_context_class
- 3. Ghi nhật ký mùa xuân bằng cách sử dụng Log4j2
- 4. Giao dịch mùa xuân với sự hỗ trợ Tuyên truyền
- 5. Mùa xuân: Trình quản lý giao dịch theo chú thích
- 6. mùa xuân vấn đề quản lý nhiều giao dịch
- 7. lỗi khi thực hiện giao dịch mùa xuân
- 8. giao dịch mùa xuân YÊU CẦU vs REQUIRES_NEW: Rollback Transaction
- 9. Lỗi xác thực mùa xuân không được hiển thị
- 10. Mùa xuân - hình ảnh hiển thị trên tệp jsp
- 11. Giao dịch mùa xuân với Objectify và Appengine
- 12. tự động đăng ký người nghe giao dịch với mùa xuân?
- 13. Vô hiệu hóa nhật ký mùa xuân, để có các nhật ký có thể đọc được
- 14. AOP mùa xuân ở Tầng dịch vụ
- 15. Ghi nhật ký giao dịch MySQL
- 16. Đọc nhật ký giao dịch SQL Server
- 17. Tìm kiếm trình xem tệp nhật ký giao dịch SQL
- 18. Cách tắt Nhật ký giao dịch trong SQL Server 2008
- 19. Ghi nhật ký TSQL bên trong giao dịch
- 20. Làm thế nào để sử dụng giao dịch mùa xuân trong multithread
- 21. Cập nhật Hướng dẫn Khung MVC Mùa xuân
- 22. mùa xuân nhiều datasources @Transactional
- 23. mùa xuân trong Mockito
- 24. Làm thế nào để hiển thị tất cả các tuyến đường có sẵn trong mùa xuân?
- 25. Cách hiển thị giao diện trong dịch vụ web
- 26. Đồng bộ hóa giao dịch mùa xuân của JDBC và JMS
- 27. Mùa xuân 3.1: Tương đương không phải XML về quản lý giao dịch theo chú thích
- 28. Chủ đề trong mùa xuân
- 29. Giao dịch mùa xuân không quay trở lại ngoại lệ (nguồn dữ liệu Oracle JNDI)
- 30. Giao dịch phân phối mùa xuân liên quan đến các cuộc gọi RMI có thể?
Cấp độ 'INFO' sẽ không hiển thị bất kỳ hoạt động tx nào, nó sẽ quá dài dòng. 'DEBUG' sẽ cần thiết ở đó. – skaffman
Không hoạt động cho spring3.x – janwen
@Bozho Tôi đã JpaTransactionManager và tôi muốn theo dõi khi kết nối được mượn từ hồ bơi và khi nó được phát hành cho một giao dịch cụ thể. – Ali