Création d'un serveur TCP pour se connecter aux appareils intelligents, puis besoin de stocker des informations clés telles que le positionnement envoyé par l'appareil en temps réel dans la base de données.
Afin d'envisager la possibilité de fournir une interface de repos avec le monde extérieur à l'avenir, le serveur TCP est intégré au framework SpringBoot, bien sûr, il s'agit également d'utiliser le framework mybatis pour accéder aux données le plus rapidement possible, puis résolvez divers problèmes tels que comment démarrer et comment se déconnecter, puis dans Lors du traitement des messages du serveur TCP, vous devez écrire dans la base de données, appeler directement la couche DAO, compiler et signaler les erreurs.
Appelez plutôt la couche Service, compilez normalement, exécutez jusqu'au lieu appelant, signalez une exception de pointeur nul, suivez l'emplacement de l'exception et constatez que le service est vide, c'est-à-dire la couche de service injectée via @Autowired par le contrôleur précédent la couche échoue.
@Component public class ServerHandler extends IoHandlerAdapter { @Autowired protected HealthDataService healthDataService; private static ServerHandler serverHandler ; @PostConstruct //通过@PostConstruct实现初始化bean之前进行的操作 public void init() { serverHandler = this; serverHandler.healthDataService = this.healthDataService; // 初使化时将已静态化的testService实例化 } //测试调用 public void test(){ serverHandler .healthDataService.<你的service层方法>; }
Chargez la classe qui doit appeler la couche Service de Spring via l'annotation @Component pour le composant
obtenez également l'objet Bean de la couche Service ; via @Autowired ;
Déclarez une variable statique pour la classe afin de faciliter le stockage de l'objet bean à l'étape suivante ;
Point clé : via l'annotation @PostConstruct, initialisez l'objet statique et sa variable membre statique healthDataService lors de l'initialisation. Le principe est d'obtenir l'objet bean de la couche service, de le stocker de manière statique pour éviter qu'il ne soit libéré.
Ces pièges :
Quand j'ai commencé à appeler, j'ai toujours pensé que c'était très simple. Dans le passé, j'écrivais une configuration pour springmvc, marquais l'objet comme un bean, puis je pouvais appeler les beans du. Conteneur Spring IOC à volonté. Mais c'est SpringBoot, je suppose qu'il y a encore une différence. J'ai essayé les trois premières pages d'aide de Baidu, mais cela a échoué. Y compris :
1) Déclarez la classe d'outils en tant que composant Spring, tel que @controller @compent, etc., et ajoutez le package où se trouve la classe d'outils dans le paramètre du package d'analyse automatique Spring invalide
2) créez un fichier ; nouveau service ; invalide ;
Je souhaite appeler la méthode B d'un autre service dans la méthode A d'un service. Une annotation est également ajoutée, mais lorsqu'une exception est levée dans la méthode B, l'instruction d'insertion dans A peut toujours être exécutée avec succès.
@Transactional(isolation= Isolation.DEFAULT,propagation= Propagation.REQUIRED)
Je suis perplexe Après avoir recherché des informations pertinentes, le problème réside toujours dans la configuration de l'annotation @Transaction, et la restauration des exceptions doit être configurée.
@Transactional(isolation= Isolation.DEFAULT,propagation= Propagation.REQUIRED,rollbackFor = Exception.class)
De cette façon, lorsqu'une exception est levée dans la méthode B, l'opération dans A sera également annulée et la transaction jouera un rôle de contrôle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!