2014-12-01 41 views
43

Tôi có một ứng dụng Khởi động mùa xuân. Tôi đã thêm rất nhiều phụ thuộc (không may, có vẻ tôi cần tất cả chúng) và thời gian khởi động đã tăng lên khá nhiều. Chỉ cần thực hiện SpringApplication.run(source, args) mất 10 giây.Tăng tốc thời gian khởi động Khởi động mùa xuân

Trong khi đó có thể không được nhiều so với những gì được "sử dụng" để, tôi không hài lòng rằng phải mất nhiều, chủ yếu là bởi vì nó phá vỡ dòng chảy phát triển. Bản thân ứng dụng này khá nhỏ vào thời điểm này, vì vậy tôi cho rằng phần lớn thời gian liên quan đến các phụ thuộc được thêm vào, chứ không phải các lớp ứng dụng.

tôi giả sử vấn đề là quét classpath, nhưng tôi không chắc chắn làm thế nào để:

  • Xác nhận rằng là vấn đề (ví dụ: làm thế nào để "gỡ rối" Mùa xuân Boot)
  • Nếu nó thực sự là nguyên nhân , làm thế nào tôi có thể giới hạn nó, vì vậy nó được nhanh hơn? Ví dụ, nếu tôi biết rằng một số phụ thuộc hoặc gói không chứa bất cứ điều gì mà Spring nên được quét, có cách nào để hạn chế điều đó không?

Tôi giả định này:

sẽ đẩy nhanh tiến độ điều, nhưng nó thậm chí không triaged vào thời điểm này. Tôi thấy một số nỗ lực khác trong mùa xuân Boot chính nó, ví dụ .:

nhưng điều này có vẻ Tomcat cụ thể.

bài viết này:

mặc dù nhằm mục đích thử nghiệm hội nhập, đề nghị sử dụng lazy-init=true, tuy nhiên tôi không biết làm thế nào để áp dụng điều này cho tất cả các hạt cà phê trong mùa xuân Boot sử dụng cấu hình Java - bất kỳ con trỏ ở đây?

Bất kỳ đề xuất nào (khác) sẽ được hoan nghênh.

+0

bài viết mã của bạn. Thông thường chỉ gói phần mềm ứng dụng được xác định là được quét. Nếu bạn có các gói khác được định nghĩa cho '@ ComponentScan', các gói đó cũng được quét. Một điều nữa là đảm bảo rằng bạn chưa bật gỡ lỗi hoặc theo dõi ghi nhật ký vì thường ghi nhật ký chậm, rất chậm. –

+0

Nếu bạn sử dụng Hibernate nó cũng có xu hướng ăn thời gian đáng kể khi bắt đầu ứng dụng. –

+0

Tự động liên kết của Spring theo loại kết hợp với các hạt của nhà máy có khả năng làm chậm một khi bạn thêm nhiều đậu và phụ thuộc. –

Trả lời

-2

Với tôi, có vẻ như bạn đang sử dụng cài đặt cấu hình sai. Bắt đầu bằng cách kiểm tra myContainer và các xung đột có thể xảy ra. Để xác định ai đang sử dụng hầu hết các nguồn lực bạn phải kiểm tra bản đồ bộ nhớ (xem số lượng dữ liệu!) Cho mỗi phụ thuộc tại một thời điểm - và mất nhiều thời gian, cũng như ... (và đặc quyền SUDO). Nhân tiện: bạn có thường kiểm tra mã chống lại các phụ thuộc không?

-1

Chỉ có một cách được đảm bảo để giải quyết những gì đang xảy ra ở đây và đó là để lập hồ sơ ứng dụng của bạn và tìm các điểm nóng gây ra sự cố.

Tôi khuyên bạn nên sử dụng YourKit. Nó có tích hợp IDE rất tốt để bạn có thể cấu hình ứng dụng của mình từ bên trong Eclipse hoặc bất kỳ thứ gì.Xem ở đây

https://www.yourkit.com/docs/java/help/local_profiling.jsp

Bạn sẽ rất nhanh chóng có thể nhìn thấy những gì đang gây ra vấn đề, sau đó có thể gửi lại đây để giải pháp khả thi.

0

Bạn có thể thử thư viện của mình FastClasspathScanner. Tôi không biết liệu bạn có thể bắt Spring làm việc với nó hay không, nhưng nó quét đường dẫn lớp nhanh hơn nhiều so với Spring.

25

Khởi động mùa xuân thực hiện rất nhiều cấu hình tự động có thể không cần thiết. Vì vậy, bạn có thể muốn thu hẹp chỉ cấu hình tự động cần thiết cho ứng dụng của bạn. Để xem toàn bộ danh sách cấu hình tự động được bao gồm, chỉ cần chạy ghi nhật ký org.springframework.boot.autoconfigure ở chế độ DEBUG (logging.level.org.springframework.boot.autoconfigure=DEBUG trong application.properties). Một lựa chọn khác là để chạy ứng dụng khởi động mùa xuân với --debug tùy chọn: java -jar myproject-0.0.1-SNAPSHOT.jar --debug

Sẽ có một cái gì đó như thế này trong đầu ra:

========================= 
AUTO-CONFIGURATION REPORT 
========================= 

Kiểm tra danh sách này và chỉ bao gồm autoconfigurations bạn cần:

@Configuration 
@Import({ 
     DispatcherServletAutoConfiguration.class, 
     EmbeddedServletContainerAutoConfiguration.class, 
     ErrorMvcAutoConfiguration.class, 
     HttpEncodingAutoConfiguration.class, 
     HttpMessageConvertersAutoConfiguration.class, 
     JacksonAutoConfiguration.class, 
     ServerPropertiesAutoConfiguration.class, 
     PropertyPlaceholderAutoConfiguration.class, 
     ThymeleafAutoConfiguration.class, 
     WebMvcAutoConfiguration.class, 
     WebSocketAutoConfiguration.class, 
}) 
public class SampleWebUiApplication { 

Mã được sao chép từ this blog post.

+0

cách chạy org.springframework ở chế độ DEBUG? –

+0

bạn đã đo lường điều này ??? Nó nhanh hơn nhiều? Theo tôi, đây là một trường hợp ngoại lệ, quan trọng hơn nhiều để đảm bảo rằng bộ đệm ẩn của bối cảnh thử nghiệm Spring hoạt động – idmitriev

5

Như được mô tả trong câu hỏi/câu trả lời này, tôi nghĩ cách tiếp cận tốt nhất là thay vì chỉ thêm những người bạn nghĩ bạn cần, loại trừ các phụ thuộc bạn biết bạn không cần.

Xem: Minimise Spring Boot Startup Time

Nói tóm lại:

Bạn có thể xem những gì đang xảy ra dưới lớp chăn và cho phép gỡ lỗi đăng nhập đơn giản như cách xác định --debug khi khởi động ứng dụng từ dòng lệnh. Bạn cũng có thể chỉ định debug = true trong application.properties của mình.

Ngoài ra, bạn có thể thiết lập mức độ khai thác gỗ trong application.properties đơn giản như:

logging.level.org.springframework.web: DEBUG logging.level.org.hibernate: ERROR

Nếu bạn phát hiện một mô-đun được cấu hình tự động mà bạn không muốn, nó có thể bị tắt. Các tài liệu này có thể được tìm thấy ở đây: http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#using-boot-disabling-specific-auto-configuration

Một ví dụ sẽ trông giống như:

@Configuration 
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) 
public class MyConfiguration { 
} 
Các vấn đề liên quan