当前位置:网站首页>Conception de systèmes de micro - services - construction de sous - services
Conception de systèmes de micro - services - construction de sous - services
2022-06-24 18:36:00 【Zhuang XiaoYan】
Résumé
Analyse des besoins et conception du modèle et conception de l'architecture du système,Nous avons une meilleure compréhension de la structure globale du projet,Le reste du travail est basé sur la conception,Retirer le cadre du projet,Remplis - le de chair et de sang..Construire un module de sous - service dans le système.
Un.、Construire le squelette de l'ensemble du projet
Le nom du projet convenu est parking-project ,Établissement Maven Projets,packaging Comment Pour pom,Pour gérer tous les modules.In parking-project Dans le cadre du projet, les modules fonctionnels sont établis successivement. maven module Sous - projets.Adoption IDEOutils.Par Maven Project Formulaire créer un parent,Pour gérer les fonctions du sous - module.


Je vois.,Le Sous - module automatise parent project Set to parking-project Projet parent.En raison de l'adoption Spring Boot Comment construire un sous - projet,Sélectionner ici packaging De la manière suivante: jar .Il suffit de créer des sous - modules en continu,Le résultat final est le suivant::

Brève introduction aux fonctions des modules suivants :
- parking-base-serv,pom Projets, Il contient deux sous - modules :parking-admin,parking-gateway.
- parking-admin, Surveiller le fonctionnement du sous - projet .
- parking-gateway, Sous - service passerelle ,Coopération JWT Session de mise en œuvre、 Fonctions telles que le droit d'inspection .
- parking-carwash, Service de lavage de voiture ,Connexion park-carwash Base de données.
- parking-card, Sous - service intégral ,Connexion park-card Base de données.
- parking-charging, Sous - service de facturation ,Connexion parking-charging Dépôt
- parking-finance, Sous - services financiers ,Connexion parking-finance Dépôt.
- parking-member, Sous - service des membres ,Connexion park-member Dépôt.
- parking-resource, Sous - service ressources ,Connexion park-resource Dépôt.
- parking-message, Sous - service de messagerie ,Connexion park-message Dépôt,Avec rocketmq Stocker les données du message
- parking-common, Stocker des classes d'outils communes ,Paquet physique, etc..
2.、 Créer un sous - service des membres
2.1 Introduction spring-boot-starter-parent Dépendance
Chaque sous - module est un Spring Boot Projets, Si elle est introduite dans un sous - module , Cela peut causer beaucoup de travail en double , Et la version ne doit pas être tenue à jour uniformément , Il est facile d'avoir plusieurs versions du chaos ,Alors... Spring Boot La version de exige une maintenance globale unifiée . Chaque sous - projet doit être construit en jar Exécution du fichier, La configuration de l'élément parent est déjà dépendante dans l'élément enfant ,Par sous - projet pom.xml Les fichiers ont tous ces dépendances :
<parent>
<groupId>com.mall.parking.root</groupId>
<artifactId>parking-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>Si, comme d'habitude ,Réutiliser parent Comment introduire spring-boot-starter-parent Dépendance, Apparemment contre un seul pom Il n'y a qu'un seul fichier parent Critères d'étiquetage, La compilation échouera .
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>Pour résoudre ce problème,Adopté ici parking-project Dans le projet parent avec depencyMangement Comment introduire spring-boot-starter-parent,Dépendances des sous - projets parent La configuration parent est suffisante.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>Il y a des petits partenaires qui peuvent proposer directement dans le projet root pom Adoption parent Comment introduire, Le Sous - module passe directement par maven La dépendance peut, Cette méthode fonctionne indépendamment Spring Boot Pas de problème avec le projet . Par la suite, il a été introduit de la même manière Spring Cloud Ou Spring Cloud Alibaba ,Un parent L'étiquetage ne répond manifestement pas à ce besoin ,Avec dependencyManagement Pour éviter ce problème .
2.2 Introduction MBG Plug - in
MBG Les plug - ins peuvent être générés automatiquement mapper Interface、mapper xml Configuration、 Classe d'entité correspondante , Le rôle principal est de développer rapidement , Évitez l'écriture inutile de code .
In pom Dépendances de configuration moyennes MBG Plug - in pour:
<build>
<finalName>parking-member-service</finalName>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
<configuration>
<!-- mybatis Profil utilisé pour générer le Code -->
<configurationFile>src/test/resources/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>In src/test/resource Écrire dans le Répertoire generatorConfig.xml Documentation,Configuration MBG Plug - in Éléments de configuration de base requis .
<generatorConfiguration>
<!-- Local mysql Position de conduite -->
<classPathEntry location="/Users/apple/.m2/repository/mysql/mysql-connector-java/5.1.42/mysql-connector-java-5.1.42.jar" />
<context id="mysqlTables" targetRuntime="MyBatis3">
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/park-member?useUnicode=true" userId="root"
password="root">
<property name="useInformationSchema" value="true"/>
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- Générer model Emplacement du fichier de classe d'entité -->
<javaModelGenerator targetPackage="com.mall.parking.member.entity" targetProject="src/test/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- Générer mapper.xml Emplacement du profil -->
<sqlMapGenerator targetPackage="mybatis.mapper" targetProject="src/test/resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- Générer mapper Emplacement du fichier d'interface -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.mall.parking.member.mapper" targetProject="src/test/java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- Nom du tableau correspondant à la classe d'entité à générer , Plusieurs classes d'entités copient plusieurs copies de cette configuration -->
<table tableName="member" domainObjectName="Member">
<generatedKey column="tid" sqlStatement="SELECT REPLACE(UUID(), '-', '')"/>
</table>
<table tableName="vehicle" domainObjectName="Vehicle">
<generatedKey column="tid" sqlStatement="SELECT REPLACE(UUID(), '-', '')"/>
</table>
<table tableName="month_card" domainObjectName="MonthCard">
<generatedKey column="tid" sqlStatement="SELECT REPLACE(UUID(), '-', '')"/>
</table>
</context>
</generatorConfiguration>Une fois la configuration terminée,Nom du projet” parking-member “ Clic droit supérieur,Sélectionnez dans le menu contextuel" Run As " —>" Maven build… ",In Goals Entrez la commande suivante dans la colonne :
mybatis-generator:generateUne fois la commande exécutée avec succès, Trouver le fichier correspondant dans le répertoire correspondant ,Et puis copy À src/java Sous le répertoire correspondant,Encore. test Suppression des fichiers générés dans le répertoire .
- 1.4 Avant la version,MBG Le plug - in a généré xml Documentation,Est le mode d'ajout,Au lieu de couvrir, Facile à former des étiquettes dupliquées .
- MBG Ne génère pas controller/service Code lié au calque ,Doit être fait manuellement.
2.3 Introduction Lombok,Code simplifié
Parce que la phase de compilation va utiliser lombok,Il faut donc IDE Installation moyenne lombok Plug - in,Pour compiler correctement.
2.4 Notes de journal
Si tu ne veux pas écrire à chaque fois,Les notes peuvent être utilisé[email protected] imprimer le journal.
private final Logger logger = LoggerFactory.getLogger(Nom actuel de la classe.class);2.5 IntroductionMyBatisDépendance
Introduction plus efficace MyBatis,Ici starter Comment introduire, Toujours à la racine pom.xml Maintenir la version du composant dans le fichier .
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>In application.properties Configuration de la connexion à la base de données dans le fichier de configuration ,Spring Boot 2.x La version par défaut est HikariCP En tant que JDBC Pool de connexion.
mybatis.type-aliases-package=com.mall.parking.member.entity
#Remplacer si nécessaire Druid Pool de connexion, Les éléments de configuration suivants doivent être ajoutés :
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#use new driver replace deprecated driver:com.mysql.jdbc.Driver.
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/park_member?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = rootFaire mapper Les fichiers d'interface peuvent être scannés par le système , Passage dans la classe principale @mapperscanNotes,Ou directementmapper Fichier d'interface plus @mapperNotes.
2.6 Vérifier si le cadre a réussi
@RestController
@RequestMapping("member")
@Slf4j
public class MemberController {
@Autowired
MemberService memberService;
@RequestMapping("/list")
public List<Member> list() {
List<Member> members = memberService.list();
log.debug("query member list = " + members);
return members;
}
}
MemberServiceImpl Catégorie de mise en œuvre
@Service
public class MemberServiceImpl implements MemberService {
@Autowired
MemberMapper memberMapper;
@Override
public List<Member> list() {
MemberExample example = new MemberExample();
List<Member> members = memberMapper.selectByExample(example);
return members;
}
}Lancement du projet, Afficher le journal de succès après le succès :
2019-12-30 16:45:13.496 INFO 9784 --- [ main] c.mall.parking.member.MemberApplication : Started MemberApplication in 6.52 seconds (JVM running for 7.753)Ouvre. Postman Plug - in, Vérifier si la méthode est correcte ,Les opérations sont les suivantes:

2.7 Configuration multi - environnement
La recherche et le développement quotidiens de produits impliquent nécessairement un déploiement multiple ,Comme l'environnement de développement、Environnement d'essai、Environnement de production, etc., Cela exige que le déploiement du code réponde aux exigences de plusieurs environnements . Par modification manuelle ,Non seulement il est sujet aux erreurs, Et gaspiller les coûts de main - d'oeuvre , La construction automatisée doit être combinée pour améliorer la précision .Spring Boot Fournit une base de données profile Configuration multi - environnement pour, Plusieurs profils peuvent être ajoutés à chaque projet de microservice ,Par exemple:
- application.properties/yml Configuration commune de base
- application-dev.properties/yml Configuration de l'environnement de développement
- application-test.properties/yml Configuration de l'environnement d'essai
- application-pro.properties/yml Configuration de l'environnement de production
Dans le profil public application.properties Moyenne,Via la configuration spring.profiles.active = dev Pour décider quelle configuration activer , Ou au démarrage du paquet Build , Ajouter des commandes pour activer différentes configurations d'environnement : java -jar parking-member.jar --spring.profiles.active=devJusqu'ici.,Le premier est simple Spring Boot La construction du module est terminée ,La prochaine étape park-member Le codage de la fonction d'affaires normale du module est terminé .
Référence du blog
边栏推荐
- Skills of writing test cases efficiently
- 【leetcode】838. Push domino (Analog)
- Ultimate Guide: comprehensive analysis of log analysis architecture of Enterprise Cloud native PAAS platform
- Easygbs video platform TCP active mode streaming exception repair
- Ten excellent business process automation tools for small businesses
- Digital transformation informatization data planning and technology planning
- The country has made a move! Launch network security review on HowNet
- 解决执行MapReduce程序控制台没有日志信息WARN Please initialize the log4j system properly
- Why are more and more people studying for doctors? Isn't it more and more difficult to graduate a doctor?
- Two micro service interviews where small companies suffer losses
猜你喜欢

Exception: Gradle task assembleDebug failed with exit code 1

SDL: cannot play audio after upgrading openaudio to openaudiodevice

Business leaders compete for CIO roles

(Video + graphics) introduction to machine learning series - Chapter 11 support vector machines
Millions of dollars worth of NFT were stolen in the attack, and Google issued an emergency warning to 3.2 billion users worldwide | February 21 global network security hotspot
[golang] leetcode intermediate - jumping game & different paths

2022 network security C module of the secondary vocational group scans the script of the surviving target aircraft (municipal, provincial and national)

ASP. Net hosting uploading file message 500 error in IIS

Vite+web3:报错出现ReferenceError: process is not defined

SAP license: ERP for supply chain management and Implementation
随机推荐
Flutter dart regular regexp special characters $, () (IV)
DOM (document object model)
Two micro service interviews where small companies suffer losses
Knowledge points of 2022 system integration project management engineer examination: ITSS information technology service
The country has made a move! Launch network security review on HowNet
Restcloud ETL extracting dynamic library table data
Do you know CMDB?
EasyNVR使用Onvif探测设备失败,显示“无数据”是什么原因?
Selection (031) -cool_ How long can secret be accessed?
SAP license:sap s/4hana is the answer
How do yaml files and zmail collide with the spark of the framework, and how can code and data be separated gracefully?
Digital transformation informatization data planning and technology planning
Can the money invested in financial products be withdrawn at any time?
如何在 R 中使用 Fisher 的最小显着性差异 (LSD)
Overall planning and construction method of digital transformation
13 skills necessary for a competent QA Manager
Seven strategies for successfully integrating digital transformation
Network security database penetration of secondary vocational group in 2022
About pyqt5 to realize paging function (one window implements different interfaces)
Selection (033) - what is the output of the following code?