Sto tentando di impostare un oggetto dominio @Configurable
(non gestito dal contenitore a molla).
L'ho ottenuto aggiungendo il -javaagent:path/to/spring-instrument.jar
come argomento JVM, ma non è chiaro al 100% se questo -javaagent DEVE essere in posizione. Io corro questo su Tomcat 8. I può essere una cattiva interpretazione del documentation ma sembra io possa essere in grado di utilizzare un altro meccanismo per ottenere questo risultato, in particolare questa linea:Tomcat 8, Spring Boot, @ Load Time Load configurabile senza -javaagent?
non definiscono
TomcatInstrumentableClassLoader
più suTomcat 8.0
e più alto. Invece, lascia che Spring utilizzi automaticamente la nuova funzionalità nativaInstrumentableClassLoader
di Tomcat tramite la strategiaTomcatLoadTimeWeaver
.
esempi di codice qui sotto:
@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");
}
}
Così, c'è un modo per ottenere questi oggetti @Configrable tessuti senza specificare il -javaagent? Sarei interessato all'apprendimento se riesco a ottenere ciò quando eseguo la distribuzione come WAR a un server Tomcat 8 autonomo e/o utilizzando il server Tomcat 8 incorporato quando si avvia come un contenitore "fat".
Allo stato attuale la distribuzione su Server standalone Tomcat 8 non genera un errore ma il metodo getMyService()
restituisce null. Avvio in un barattolo di grasso getta il seguente errore durante l'avvio:
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
Suppongo che la vera domanda è come faccio Specify a custom LoadTimeWeaver
in Tomcat 8? Nulla sembra accadere automaticamente come afferma la documentazione, ma di nuovo potrei interpretare male ciò che significa esattamente.
Ho lo stesso problema in questo momento, l'hai risolto? – alexanoid
@alexanoid sfortunatamente non l'ho fatto – mjj1409