Printemps de démarrage des problèmes de performances

Je suis en train d'intégrer le Printemps dans une assez grande application avec des milliers de classes, et je suis en train de vivre d'énormes retards de départ de mon conteneur car de composant de balayage.

J'ai déjà réduit le nombre de répertoires spécifiés dans le "base-package", au minimum afin de réduire les pertes de temps lors de l'analyse de pertinence des répertoires, mais la classe de chemin de numérisation d'une partie de l'initialisation encore faut environ 1 à 2 minutes.

Alors, est-il un moyen d'optimiser le processus de numérisation ? J'ai pensé à stocker les candidats des classes de chemin d'accès dans un fichier et de le rendre le récipient de les obtenir à partir du fichier au lieu de les balayer le chemin de classe à chaque démarrage, mais je ne sais pas vraiment par où commencer, ou si cela est encore possible.

Tout conseils sont appréciés. Merci à l'avance.

Modifier: Chargement de la fève de définitions forme d'un fichier xml généré automatiquement, réduit le Printemps, temps de chauffe de 9~10 secondes, ce qui confirme que le reflet de l'api utilisée pour le Printemps de l'composants de chemin de classe de la numérisation est la principale source de démarrage des retards.

Comme pour la génération du fichier xml voici le code, car il pourrait être utile pour quelqu'un avec les mêmes problèmes.

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
public class ConfigurationWriter {
public ArrayList<String> beanDefinitions = new ArrayList<String>();
public ConfigurationWriter() {
//the context loaded with old fashioned way (classpath scanning)
ApplicationContext context = SpringContainerServiceImpl.getInstance().getContext();
String[] tab = context.getBeanDefinitionNames();
for (int i = 0; i < tab.length - 6; i++) {
Class clazz = context.getType(tab[i]);
String scope = context.isPrototype(tab[i]) ? "prototype" : "singleton";
String s = "<bean id=\"" + tab[i] + "\" class=\"" + clazz.getName() + "\" scope=\"" + scope + "\"/>";
beanDefinitions.add(s);
}
//Collections.addAll(beanDefinitions, tab);
}
@SuppressWarnings("restriction")
public void generateConfiguration() throws FileNotFoundException {
File xmlConfig = new File("D:\\dev\\svn\\...\\...\\src\\test\\resources\\springBoost.xml");
PrintWriter printer = new PrintWriter(xmlConfig);
generateHeader(printer);
generateCorpse(printer);
generateTail(printer);
printer.checkError();
}
@SuppressWarnings("restriction")
private void generateCorpse(PrintWriter printer) {
for (String beanPath : beanDefinitions) {
printer.println(beanPath);
}
}
@SuppressWarnings("restriction")
private void generateHeader(PrintWriter printer) {
printer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
printer.println("<beans xmlns=\"http://www.springframework.org/schema/beans\"");
printer.println("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"");
printer.println("xmlns:context=\"http://www.springframework.org/schema/context\"");
printer.println("xsi:schemaLocation=\"");
printer.println("http://www.springframework.org/schema/mvc");
printer.println("http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd");
printer.println("http://www.springframework.org/schema/beans");
printer.println("http://www.springframework.org/schema/beans/spring-beans-3.0.xsd");
printer.println("http://www.springframework.org/schema/context");
printer.println("http://www.springframework.org/schema/context/spring-context-3.0.xsd\"");
printer.println("default-lazy-init=\"true\">");
}
@SuppressWarnings("restriction")
private void generateTail(PrintWriter printer) {
//printer.println("<bean class=\"com.xxx.frmwrk.spring.processors.xxxBeanFactoryPostProcessor\"/>");
printer.println("<bean class=\"com.xxx.frmwrk.spring.processors.xxxPostProcessor\"/>");
printer.println("</beans>");
}
}
  • Combien (en %) des classes dans les répertoires sont des Beans Spring?
  • Je ne suis pas vraiment sûr (c'est un très gros projet) , mais ce que j'ai vu je crois que c'est autour de 90 à 100%, étant donné que le xml et des fichiers de propriétés sont isolés dans des endroits séparés)
  • Pouah, sentez-vous la douleur. Juste hérité d'un 3600 bean Spring monstre avec 425 config xml de. 9min à tourner sur... sur une très bonne journée. Merci pour vos messages! Je croise les doigts et va ajouter toutes les pépites découvertes.
  • comment résoudre ce pour @Autowire des trucs?!
  • Ce qui confirme encore une fois que la réflexion est vraiment une opération coûteuse et doit toujours être mis en cache.... ou est-il juste de Printemps liés à la réflexion? Où doit-on déposer un bug? Oracle ou le Printemps? 😉
InformationsquelleAutor Mehdi | 2011-05-10