12

Tôi đang cố gắng thiết lập đối tượng miền @Configurable (không được quản lý bởi vùng chứa lò xo).
Tôi đã làm việc này bằng cách thêm -javaagent:path/to/spring-instrument.jar làm đối số JVM nhưng không rõ ràng 100% đối với tôi liệu có phải là không thích hợp này hay không. Tôi đang chạy trên Tomcat 8. Tôi có thể hiểu sai các documentation nhưng có vẻ như tôi có thể sử dụng một cơ chế khác để thực hiện điều này, đặc biệt là dòng này:Tomcat 8, Spring Boot, @Configurable LoadTimeWeaving mà không có -javaagent?

Đừng xác định TomcatInstrumentableClassLoader nữa trên Tomcat 8.0 và cao hơn. Thay vào đó, hãy để Spring tự động sử dụng cơ sở InstrumentableClassLoader gốc của Tomcat thông qua chiến lược TomcatLoadTimeWeaver.

Mẫu Mã dưới đây:

@SpringBootApplication 
@EnableLoadTimeWeaving 
public class TestApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(TestApplication.class, args); 
    } 
    @Bean 
    public MyService myService(){ 
     return new MyService(); 
    } 
} 

@Configurable 
public class MyDomainObject { 

    @Autowired 
    private MyService myService; 

    public MyService getMyService(){ 
     return myService; 
    } 
} 

public class MyService { 
    private static final Logger log = LoggerFactory.getLogger(MyService.class); 

    public void test(){ 
     log.info("test"); 
    } 
} 

Vậy là có một cách để có được các đối tượng này @Configrable dệt mà không chỉ định các -javaagent? Tôi muốn được quan tâm đến việc học nếu tôi có thể thực hiện điều này khi triển khai như WAR tới một máy chủ độc lập Tomcat 8 và/hoặc sử dụng máy chủ Tomcat 8 được nhúng khi khởi chạy như một bình 'chất béo'.

Vì nó đang triển khai cho máy chủ độc lập Tomcat 8 không ném lỗi nhưng phương thức getMyService() ở trên trả về giá trị rỗng. Tung ra như một lọ mỡ ném lỗi sau khi khởi động:

Caused by: java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar

Tôi cho rằng câu hỏi thực sự là làm cách nào để Specify a custom LoadTimeWeaver trong Tomcat 8? Không có gì có vẻ là tự động xảy ra như các tiểu bang tài liệu nhưng một lần nữa tôi có thể hiểu sai những gì có nghĩa là chính xác.

+1

Tôi có vấn đề tương tự ngay bây giờ, bạn đã giải quyết chưa? – alexanoid

+0

@alexanoid thật không may tôi đã không – mjj1409

Trả lời

-2

điều gì về cách tạo chú thích của riêng bạn @MyConfigurable? để bạn có thể làm những gì bạn thích khi phương pháp được gọi.

import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

@Target(ElementType.CONSTRUCTOR) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyConfigurable 
{} 
Các vấn đề liên quan