当前位置:网站首页>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
边栏推荐
- Continue to help enterprises' digital transformation -tce has obtained the certification of the first batch of digital trusted service platforms in China
- Complete Guide to web application penetration testing
- 【leetcode】838. Push domino (Analog)
- Network security database penetration of secondary vocational group in 2022
- About pyqt5 to realize paging function (one window implements different interfaces)
- Architecture decryption from distributed to microservice: several common microservice architecture schemes
- High quality defect analysis: let yourself write fewer bugs
- Knowledge points of 2022 system integration project management engineer examination: ITSS information technology service
- 微服务系统设计——数据模型与系统架构设计
- ASP. Net hosting uploading file message 500 error in IIS
猜你喜欢

如何在 R 中使用 Fisher 的最小显着性差异 (LSD)

SAP license:sap s/4hana is the answer

He "painted" what a smart city should look like with his oars

微服务系统设计——接口文档管理设计

SAP license: ERP for supply chain management and Implementation

Leetcode weekly buckle 281

Flutter dart regular regexp matches non printing characters \cl\cj\cm\ck

Different JVM

Skills of writing test cases efficiently

Huitongda officially landed at the Hong Kong Stock Exchange: the gross profit margin continued to decline, and the book value of several shareholders still suffered losses
随机推荐
Bigdecimalavoiddoubleconstructorrule: do not directly use the double variable as a parameter to construct BigDecimal
SAP license: ERP for supply chain management and Implementation
Flutter dart regular regexp special characters $, () (IV)
Is it safe to open an account online? What should I do?
Rapidssl getting started SSL certificate
Redis series (3) - sentry highly available
He "painted" what a smart city should look like with his oars
Eight recommended microservice testing tools
Redis learning -- list of redis operations
Top ten popular codeless testing tools
How to select the best test cases for automation?
Bigdecimalavoiddoubleconstructorrule: do not directly use the double variable as a parameter to construct BigDecimal
Gateway solves cross domain access
Regression testing strategy for comprehensive quality assurance system
如何在 R 中执行稳健回归
Flutter dart regular regexp matches non printing characters \cl\cj\cm\ck
Does the wave of layoffs in Chinese enterprises in 2021 need to be "judged" by morality?
(Video + graphics) introduction to machine learning series - Chapter 11 support vector machines
[NLP] 3 papers on how Stanford team builds a better chat AI
High quality defect analysis: let yourself write fewer bugs