0
votes

Repository de printemps - Obtenir NullPointerException

J'essaie d'enregistrer un objet avec les données de printemps JPA. Malheureusement, je reçois toujours une nullpointeexception, et je ne comprends pas pourquoi.

J'ai suivi ce tutoriel: https://www.callicoder.com/spring-boot-jpa-ibernate-postgresql-Restful-crud-api-example/ P>

Je n'ai pas besoin d'une API crud, alors j'ai laissé de côté les choses qui appartiennent. p>

i Obtenir l'erreur suivante: P>

java.lang.nullpointException p>

à com.niclas.elitedangerseapi.handler.systempopulousHandler.insertintodb à com.hniclas.elitedangerseapi.main.main.main (Main.java:19) [Main] Erreur C.N.E.H.SystempopoxuldHandler - NULL P> blockQuote>

update strong> p>

Je veux remplir ma base de données, mais quand je veux. À la fin, cela devrait être de sorte que chaque nuit un fichier soit téléchargé, puis stocké dans la base de données. Plus tard, je veux rendre les données accessibles via une API.Je veux exécuter cette méthode (SystemPopOplulollyHandler.insertinodb ()) au début et à toutes les heures x. P>

SystemPopulations.class P>

@SpringBootApplication
@EnableJpaRepositories
public class Main {
    public static void main( String[] args ) {
        SpringApplication.run( Main.class, args );

        SystemPopulatedHandler systemPopulatedHandler = new SystemPopulatedHandler();
        systemPopulatedHandler.insertIntoDB();
  }
}


1 commentaires

4 Réponses :


1
votes

Le problème est que vous créez SystemPopOuDrandler avec xxx

de cette façon de ressort ne pas injecter le référentiel dans votre classe car cela ne fonctionne que si le printemps crée la Classe.

Mais si vous souhaitez peupler une base de données au démarrage (au moins, il semble que vous essayiez de le faire), vous devriez vérifier la voie à la mouton (ou 85,5 dans cette documentation: https://docs.spring.io/spring-boot/docs /Current/reeference/html/howto-database-initialization.html )

Si vous ne pouvez pas utiliser de voie aérienne pour une raison quelconque, vous pouvez ajouter le code suivant à la classe principale: xxx

ajoutez le constructeur à la catégorie xxx

et retirez le @ Auto-attendu Annotation.

Mise à jour

Vous devez également ajouter les annotations manquantes comme mentionné par cette réponse: Httptps://stackoverflow.com/a/55767393/2248239

update 2 < / p>

Si vous souhaitez effectuer cette action périodiquement, vous pouvez utiliser la planification (comme dans ce guide https://spring.io/guides/gs/scheduling-tasks/ ) En fait, c'est assez facile:

Ne faites pas les modifications que j'ai mentionnées ci-dessus, à l'exception de l'ajout des annotations manquantes et faites simplement ce qui suit:

Ajouter @Component à SystemPopOuduLHandler

Ajouter @schedulled à insertionItoDB () Dans Systempopulatharler < p> et ajoutez @enablesCHEDULING à la classe principale

pour @scheduled Il suffit de lire le guide, il décrit ce que vous pouvez faire avec l'annotation.


3 commentaires

Merci pour votre réponse. Oui, je veux remplir ma base de données, mais alors quand je veux. À la fin, cela devrait être de sorte que chaque nuit un fichier soit téléchargé, puis stocké dans la base de données. Plus tard, je souhaite rendre les données accessibles via une API.Il cela est possible du tout parce que je souhaite remplir la base de données au début de l'application, puis à certains intervalles (tous les soirs). Je dois donc exécuter cette méthode au début et toutes les x heures.


@Stitzle J'ai ajouté une mise à jour pour répondre à votre exigence mentionnée


Merci beaucoup qui m'a beaucoup aidé.



0
votes

Ceci est dû au référentiel que vous avez câblé automatique n'est pas le câblage du haricot.

Veuillez annoncer votre référentiel avec @RePository Et dans la classe principale, spécifiez @ENABLYJPETORPOSITORY.

Voir les documents JPA de données de printemps pour plus de détails


2 commentaires

Merci pour votre réponse, mais cela ne pouvait pas résoudre mon problème.


Mais tu as raison. J'ai oublié les annotations.Je les a ajoutés au code source.



0
votes

Le problème est que vous instanciez la bean SystemPopOplollarler sans utiliser ApplicationContext ou BeansFactory, il n'est donc pas maintenu par le conteneur de COI.

Utiliser DI dans une application Springboot Tout ce dont vous avez besoin est de simplement System SystemPopulatoTlerdler dans votre contrôleur ou service, puis vous pouvez appeler la méthode insertintoDb (). p>

puisque vous utilisez un démarrage à ressort et l'exemple est si simple que vous n'avez pas besoin de configuration séparée pour les haricots. P>

@Controller
public class SystemPopulatedController {

    @Autowired
    private SystemPopulatedHandler systemPopulatedHandler;

    @RequestMapping("/")
    public void insertIntoDB() {

      systemPopulatedHandler.insertIntoDB();
    }

}


0 commentaires

0
votes

Merci beaucoup à vous tous. J'ai résolu le problème comme suit:

SystempopuloundRepository.class xxx xxx

"''

Main.class xxx


0 commentaires