IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Boot Java Discussion :

L'insertion de données en base ne marche pas


Sujet :

Spring Boot Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut L'insertion de données en base ne marche pas
    J'utilise Spring Boot et essaye d'insérer 35000 lignes en base Mysql


    Voici la classe principale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        @SpringBootApplication
        @EnableTransactionManagement
        public class DemoImmobilierBackApplication implements WebMvcConfigurer {
     
        	public static void main(String[] args) {
        		SpringApplication.run(DemoImmobilierBackApplication.class, args);
        	}
    Voici le service. J'appelle cette méthode en faisant une requête via postman (cette requête a un autre but, mais j'en profite pour insérer mes lignes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
        @Service
        public class ReferenceServiceImpl implements ReferenceService {
     
        	Logger logger = LoggerFactory.getLogger(ReferenceServiceImpl.class);
     
            @Autowired
            private ReferenceRepository referenceRepository;
     
     
            @Transactional
            public void loadDataBaseCodePostalNomCommune(Map<String,String> tokens) {
            	List<CodePostalNomCommune> list = new ArrayList<CodePostalNomCommune>();
                Iterator it = tokens.entrySet().iterator();
                while (it.hasNext()) {
                    Map.Entry pair = (Map.Entry)it.next();
                    list.add(new CodePostalNomCommune((String)pair.getKey(), (String)pair.getValue()));
                }
                referenceRepository.persistCodePostalNomCommune(list);
            }
        }
    Voici le repository
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
        @Repository
        public interface ReferenceRepository {
     
        	void persistCodePostalNomCommune(List<CodePostalNomCommune> list);
     
        }
        and 
     
        public class ReferenceRepositoryImpl implements ReferenceRepository {
     
        	Logger logger = LoggerFactory.getLogger(ReferenceRepositoryImpl.class);
     
            @PersistenceContext
            private EntityManager em;
     
     
            @Override
            @Transactional
            public void persistCodePostalNomCommune(List<CodePostalNomCommune> list) {
     
            	logger.info("List<CodePostalNomCommune> SIZE="+list.size());
            	int i = 0;
            	for (CodePostalNomCommune codePostalNomCommune : list) {
            	    em.persist(codePostalNomCommune);
            	    i++;
            	    if (i%20 == 0 ) {
            	    	em.flush();
            	    	em.clear();
     
            	    }
            	} 
        	}
        }
    Mais aucune ligne est insérée en base.

    J'ai vérifié que la méthode persistCodePostalNomCommune est bien appellée. Tout dans les logs et le temps mis par la requête indique que l'opération persist pour les 39000 ligne se déroule bien, mais quand j'inspecte la base, elle est vide.

    J'ai essayé aussi de d'executer au début de la méthode em.getTransaction().begin(); et à la fin em.getTransaction().commit() soit en laissant, soit en enlevant l'annotation @Transaction , mais cela me donne l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    J'ai trouvé l'erreur, la datasource était mal configuré. Dans la classe du main il faut rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        @Bean
        public DataSource dataSource() {
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
     
    	    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    	    dataSource.setUsername("root");
    	    dataSource.setPassword("password");
    	    dataSource.setUrl(
    	      "jdbc:mysql://localhost:3306/testdb?createDatabaseIfNotExist=true&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"); 
     
    	    return dataSource;
        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Serveur de reporing - Insertion de données sur base distante
    Par Oishiiii dans le forum Administration
    Réponses: 8
    Dernier message: 22/12/2010, 12h31
  2. [MySQL] problème d'insertion de données à une base avec le php
    Par bibaa dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 19/08/2010, 01h11
  3. Réponses: 2
    Dernier message: 19/06/2009, 17h40
  4. [MySQL] pas d'erreur mais l'insertion dans la base ne marche pas bien
    Par info_sara dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/05/2008, 14h55
  5. insertion de données dans Base de données Oracle 9
    Par hottnikks_79 dans le forum SQL
    Réponses: 2
    Dernier message: 16/03/2006, 00h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo