J'essaie de configurer un objet domaine @Configurable
(non géré par le conteneur de ressort).
J'ai ceci fonctionnant en ajoutant le -javaagent:path/to/spring-instrument.jar
comme argument de JVM mais ce n'est pas 100% clair pour moi si oui-javaagent DOIT être en place. Je suis en cela sur Tomcat 8. Je peux être mal interpréter les documentation, mais il semble que je peux être en mesure d'utiliser un autre mécanisme pour ce faire, dans cette ligne particulière:Tomcat 8, Spring Boot, @Configurable LoadTimeWeaving sans -javaagent?
Ne pas définir
TomcatInstrumentableClassLoader
plus surTomcat 8.0
et plus haute. Au lieu de cela, laissez Spring utiliser automatiquement la nouvelle fonctionnalité natifInstrumentableClassLoader
de Tomcat via la stratégieTomcatLoadTimeWeaver
.
Exemples de code ci-dessous:
@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");
}
}
Ainsi est-il un moyen d'obtenir ces objets @Configrable tissés sans préciser le -javaagent? Je serais intéressé d'apprendre si je peux accomplir cela lors du déploiement en tant que WAR sur un serveur Tomcat 8 autonome et/ou en utilisant le serveur Tomcat 8 intégré lors du lancement en tant que gros pot. En l'état, le déploiement sur le serveur Tomcat 8 autonome ne génère pas d'erreur mais la méthode getMyService()
ci-dessus renvoie null. Lancement comme un pot de graisse jette l'erreur suivante lors du démarrage:
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
Je suppose que la vraie question est comment puis-je Specify a custom LoadTimeWeaver
dans Tomcat 8? Rien ne semble se passer automatiquement comme le dit la documentation, mais encore une fois, je peux mal interpréter ce que cela signifie exactement. Qu'en est-il de la création de votre propre annotation @MyConfigurable?
J'ai le même problème en ce moment, l'avez-vous résolu? – alexanoid
@alexanoid malheureusement je n'ai pas – mjj1409