12

Ich versuche, ein @Configurable Domain-Objekt (nicht von der Feder Container verwaltet).
Ich habe dies funktioniert, indem ich die -javaagent:path/to/spring-instrument.jar als JVM-Argument hinzufügen, aber es ist nicht 100% klar für mich, ob oder nicht dieser -Javaagent muss vorhanden sein. Ich laufe dies auf Tomcat 8. Ich die documentation werden falsch interpretiert kann, aber es scheint ich in der Lage sein kann, einen anderen Mechanismus zu verwenden, um dies zu erreichen, insbesondere dieser Zeile:Tomcat 8, Spring Boot, @konfigurierbares LoadTimeWeaving ohne -Javaagent?

Sie TomcatInstrumentableClassLoader nicht definieren mehr auf Tomcat 8.0 und höher. Lassen Sie Spring stattdessen automatisch die neue systemeigene InstrumentableClassLoader-Funktion von Tomcat über die TomcatLoadTimeWeaver-Strategie verwenden.

Codebeispiele unter:

@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"); 
    } 
} 

So ist es eine Möglichkeit, diese @Configrable Objekte gewebt zu erhalten, ohne die -javaagent Angabe? Ich wäre daran interessiert zu erfahren, ob ich dies erreichen kann, wenn ich als WAR auf einem Standalone Tomcat 8-Server und/oder den eingebetteten Tomcat 8-Server als "fetter" Krug starte.

Wie es steht Bereitstellung zu Stand Alone Tomcat 8 Server wirft keinen Fehler, aber die getMyService() Methode oben gibt null zurück. Starten wie ein fettes jar den folgenden Fehler während des Startvorgangs führt:

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

Ich nehme an, die wirkliche Frage ist, wie kann ich Specify a custom LoadTimeWeaver in Tomcat 8? Nichts scheint automatisch zu geschehen, wie die Dokumentation sagt, aber ich kann falsch interpretieren, was genau das bedeutet.

+1

Ich habe das gleiche Problem jetzt, haben Sie es gelöst? – alexanoid

+0

@alexanoid habe ich leider nicht – mjj1409

Antwort

-2

Was ist mit der Erstellung Ihrer eigenen Annotation @MyConfigurable? so können Sie tun, was auch immer Sie mögen, wenn Methoden aufgerufen werden.

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 
{} 
Verwandte Themen