经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring Boot » 查看文章
【SpringBoot】还不会SpringBoot项目模块分层?来这手把手教你
来源:cnblogs  作者:JavaDog程序狗  时间:2023/3/15 8:53:59  对本文有异议

前言

??缘由

经常看到网上很多优秀的开源项目中,代码简洁,模块分层完美。反观自己代码层级混乱,,却不知如何整理分层。此文手把手教你一步一步创建模块,左手右手一个慢动作。结合本人实际开发及个人项目中分层思路的分享,大神请勿喷

??本文阅读时长

约25分钟

??主要目标

  1. 熟练掌握SpringBoot项目分层思路,丝滑拆分模块
  2. 熟悉代码层级依赖,规范化管理模块分布
  3. 手把手实战学习,理论实践相结合

?????试用人群

  1. 对于Springboot熟悉但是不知道合理分层小白
  2. 有自己分层思路可以互相分享学习

??快速链接

公众号:JavaDog程序狗
在公众号,发送【分层】 ,无任何套路即可获得

在这里插入图片描述
或访问https://blog.javadog.net/archives/boot-module

??水图

下图反面教材,传统单体应用,结构臃肿

在这里插入图片描述

下图分层截选自本人的一个小项目,模块清晰,分工明确

在这里插入图片描述

我们要实现的小栗子的分层

在这里插入图片描述

正文

??1.IDEA新建项目

起名第一步,一个好名字,说不定是个好的开始

假如我们的项目是个聊天相关的项目,英文对应chat,所以定义项目名为chat-boot,其他的以此效仿

点击New->project

在这里插入图片描述

选择Maven项目,并选择合适JDK版本,点击Next

在这里插入图片描述

录入项目名称,并填写GAV坐标,点击Finish

在这里插入图片描述

删除无用文件及目录,如src目录和*.iml文件

在这里插入图片描述

删除后项目目录

在这里插入图片描述

修改pom.xml中依赖,增加spring-boot-starter-parent

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.3.1.RELEASE</version>
  5. </parent>

在这里插入图片描述


??2.创建子模块-dependencies(依赖层)

右击项目chat-boot,new ->Moudle新建模块chat-boot-dependencies

在这里插入图片描述

选择对应Module SDK版本,本人选择jdk1.8

在这里插入图片描述

填写子模块名 chat-boot-dependencies,然后检查对应GAV,点击Finish

在这里插入图片描述

生成子模块chat-boot-dependencies如下图

在这里插入图片描述

删除chat-boot-dependencies下无用文件及目录,如src目录,删除无用目录如下

在这里插入图片描述

完善chat-boot-dependencies下pom.xml依赖, 常用依赖放入,作为依赖主体,以下是本狗常用依赖,可酌情选择;记得把packaging改为pom

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>chat-boot</artifactId>
  7. <groupId>net.javadog.chat</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>chat-dependencies</artifactId>
  12. <packaging>pom</packaging>
  13. <properties>
  14. <maven.compiler.source>8</maven.compiler.source>
  15. <maven.compiler.target>8</maven.compiler.target>
  16. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  17. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  18. <mysql-connector-java.version>8.0.17</mysql-connector-java.version>
  19. <druid.version>1.1.21</druid.version>
  20. <mybatis-plus.version>3.4.1</mybatis-plus.version>
  21. <fastjson.version>1.2.75</fastjson.version>
  22. <hutool.version>5.5.8</hutool.version>
  23. <lombok.versin>1.18.12</lombok.versin>
  24. <easypoi.version>4.2.0</easypoi.version>
  25. <springfox-swagger2.version>2.9.2</springfox-swagger2.version>
  26. <springfox-swagger-ui.version>2.9.2</springfox-swagger-ui.version>
  27. <knife4j.version>2.0.4</knife4j.version>
  28. <weixin.version>4.4.5.B</weixin.version>
  29. <shiro.version>1.3.2</shiro.version>
  30. <jwt.version>3.2.0</jwt.version>
  31. </properties>
  32. <dependencyManagement>
  33. <dependencies>
  34. <!--mybatis-plus-->
  35. <dependency>
  36. <groupId>com.baomidou</groupId>
  37. <artifactId>mybatis-plus-boot-starter</artifactId>
  38. <version>${mybatis-plus.version}</version>
  39. </dependency>
  40. <!-- 数据库驱动,可根据自己需要自行删减,默认使用mysql -->
  41. <dependency>
  42. <groupId>mysql</groupId>
  43. <artifactId>mysql-connector-java</artifactId>
  44. <version>${mysql-connector-java.version}</version>
  45. </dependency>
  46. <!--数据库连接池-->
  47. <dependency>
  48. <groupId>com.alibaba</groupId>
  49. <artifactId>druid</artifactId>
  50. <version>${druid.version}</version>
  51. </dependency>
  52. <!--fastjson-->
  53. <dependency>
  54. <groupId>com.alibaba</groupId>
  55. <artifactId>fastjson</artifactId>
  56. <version>${fastjson.version}</version>
  57. </dependency>
  58. <!--hutool-->
  59. <dependency>
  60. <groupId>cn.hutool</groupId>
  61. <artifactId>hutool-all</artifactId>
  62. <version>${hutool.version}</version>
  63. </dependency>
  64. <!--lombok-->
  65. <dependency>
  66. <groupId>org.projectlombok</groupId>
  67. <artifactId>lombok</artifactId>
  68. <version>${lombok.versin}</version>
  69. </dependency>
  70. <!--swagger2-->
  71. <dependency>
  72. <groupId>io.springfox</groupId>
  73. <artifactId>springfox-swagger2</artifactId>
  74. <version>${springfox-swagger2.version}</version>
  75. </dependency>
  76. <!--swagger-ui-->
  77. <dependency>
  78. <groupId>io.springfox</groupId>
  79. <artifactId>springfox-swagger-ui</artifactId>
  80. <version>${springfox-swagger-ui.version}</version>
  81. </dependency>
  82. <!-- swagger接口文档 -->
  83. <dependency>
  84. <groupId>com.github.xiaoymin</groupId>
  85. <artifactId>knife4j-spring-boot-starter</artifactId>
  86. <version>${knife4j.version}</version>
  87. </dependency>
  88. <!--easypoi导入导出-->
  89. <dependency>
  90. <groupId>cn.afterturn</groupId>
  91. <artifactId>easypoi-base</artifactId>
  92. <version>${easypoi.version}</version>
  93. </dependency>
  94. <!--WxJava - 微信开发 Java SDK-->
  95. <dependency>
  96. <groupId>com.github.binarywang</groupId>
  97. <artifactId>weixin-java-miniapp</artifactId>
  98. <version>${weixin.version}</version>
  99. </dependency>
  100. <!--整合Shiro安全框架-->
  101. <dependency>
  102. <groupId>org.apache.shiro</groupId>
  103. <artifactId>shiro-spring</artifactId>
  104. <version>${shiro.version}</version>
  105. </dependency>
  106. <!--集成jwt实现token认证-->
  107. <dependency>
  108. <groupId>com.auth0</groupId>
  109. <artifactId>java-jwt</artifactId>
  110. <version>${jwt.version}</version>
  111. </dependency>
  112. </dependencies>
  113. </dependencyManagement>
  114. </project>

??重点

此处用的标签是 dependencyManagement

dependencyManagement只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。


??3.创建子模块-main(主启动层)

右击项目chat-boot,new ->Moudle新建模块chat-boot-main

在这里插入图片描述

选择对应Module SDK版本,本狗选择jdk1.8,点击Next

在这里插入图片描述

填写子模块名 chat-boot-main,然后检查对应GAV,点击Finish

在这里插入图片描述

生成子模块chat-boot-main如下图

在这里插入图片描述

完善chat-boot-main模块下pom.xml中依赖

  1. 引入必要依赖
  2. 完善profiles标签中环境相关
  3. 配置build标签中插件
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>chat-boot</artifactId>
  7. <groupId>net.javadog.chat</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>chat-boot-main</artifactId>
  12. <properties>
  13. <maven.compiler.source>8</maven.compiler.source>
  14. <maven.compiler.target>8</maven.compiler.target>
  15. </properties>
  16. <dependencyManagement>
  17. <dependencies>
  18. <dependency>
  19. <groupId>net.javadog.chat</groupId>
  20. <artifactId>chat-boot-dependencies</artifactId>
  21. <version>1.0-SNAPSHOT</version>
  22. <type>pom</type>
  23. <scope>import</scope>
  24. </dependency>
  25. </dependencies>
  26. </dependencyManagement>
  27. <dependencies>
  28. <!-- web -->
  29. <dependency>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-starter-web</artifactId>
  32. </dependency>
  33. <!--lombok-->
  34. <dependency>
  35. <groupId>org.projectlombok</groupId>
  36. <artifactId>lombok</artifactId>
  37. </dependency>
  38. <!--swagger2-->
  39. <dependency>
  40. <groupId>io.springfox</groupId>
  41. <artifactId>springfox-swagger2</artifactId>
  42. </dependency>
  43. <!--swagger-ui-->
  44. <dependency>
  45. <groupId>io.springfox</groupId>
  46. <artifactId>springfox-swagger-ui</artifactId>
  47. </dependency>
  48. <!-- swagger接口文档 -->
  49. <dependency>
  50. <groupId>com.github.xiaoymin</groupId>
  51. <artifactId>knife4j-spring-boot-starter</artifactId>
  52. </dependency>
  53. </dependencies>
  54. <build>
  55. <finalName>chat</finalName>
  56. <plugins>
  57. <plugin>
  58. <groupId>org.springframework.boot</groupId>
  59. <artifactId>spring-boot-maven-plugin</artifactId>
  60. <executions>
  61. <execution>
  62. <goals>
  63. <goal>repackage</goal>
  64. </goals>
  65. </execution>
  66. </executions>
  67. <configuration>
  68. <fork>true</fork>
  69. </configuration>
  70. </plugin>
  71. </plugins>
  72. <resources>
  73. <resource>
  74. <directory>src/main/webapp</directory>
  75. <filtering>false</filtering>
  76. </resource>
  77. <resource>
  78. <directory>src/main/resources</directory>
  79. <filtering>true</filtering>
  80. </resource>
  81. <resource>
  82. <directory>src/main/java</directory>
  83. <includes>
  84. <include>**/*.xml</include>
  85. </includes>
  86. </resource>
  87. </resources>
  88. </build>
  89. <profiles>
  90. <profile>
  91. <id>local</id>
  92. <properties>
  93. <spring.active>local</spring.active>
  94. </properties>
  95. <activation>
  96. <activeByDefault>true</activeByDefault>
  97. </activation>
  98. </profile>
  99. <profile>
  100. <id>dev</id>
  101. <properties>
  102. <spring.active>dev</spring.active>
  103. </properties>
  104. </profile>
  105. <profile>
  106. <id>prod</id>
  107. <properties>
  108. <spring.active>prod</spring.active>
  109. </properties>
  110. </profile>
  111. </profiles>
  112. </project>

??重点

  • 配置引入依赖chat-boot-dependencies,用作此模块依赖引入
  1. <dependencyManagement>
  2. <dependencies>
  3. <dependency>
  4. <groupId>net.javadog.chat</groupId>
  5. <artifactId>chat-boot-dependencies</artifactId>
  6. <version>1.0-SNAPSHOT</version>
  7. <type>pom</type>
  8. <scope>import</scope>
  9. </dependency>
  10. </dependencies>
  11. </dependencyManagement>
  • 配置build标签用于完善插件plugins,其中包含maven-compiler-plugin和maven-resources-plugin
  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-compiler-plugin</artifactId>
  6. <version>3.1</version>
  7. <configuration>
  8. <source>${java.version}</source>
  9. <target>${java.version}</target>
  10. </configuration>
  11. </plugin>
  12. <plugin>
  13. <groupId>org.apache.maven.plugins</groupId>
  14. <artifactId>maven-resources-plugin</artifactId>
  15. <version>2.6</version>
  16. <configuration>
  17. <delimiters>
  18. <delimiter>@</delimiter>
  19. </delimiters>
  20. <useDefaultDelimiters>false</useDefaultDelimiters>
  21. </configuration>
  22. </plugin>
  23. </plugins>
  24. <resources>
  25. <resource>
  26. <directory>src/main/webapp</directory>
  27. <filtering>false</filtering>
  28. </resource>
  29. <resource>
  30. <directory>src/main/resources</directory>
  31. <filtering>true</filtering>
  32. </resource>
  33. <resource>
  34. <directory>src/main/java</directory>
  35. <includes>
  36. <include>**/*.xml</include>
  37. </includes>
  38. </resource>
  39. </resources>
  40. </build>
  • 配置profiles环境变量标签,用于方便打包切换,本狗设置了 local、dev、prod三种环境
  1. <profiles>
  2. <profile>
  3. <id>local</id>
  4. <properties>
  5. <spring.active>local</spring.active>
  6. </properties>
  7. <activation>
  8. <activeByDefault>true</activeByDefault>
  9. </activation>
  10. </profile>
  11. <profile>
  12. <id>dev</id>
  13. <properties>
  14. <spring.active>dev</spring.active>
  15. </properties>
  16. </profile>
  17. <profile>
  18. <id>prod</id>
  19. <properties>
  20. <spring.active>prod</spring.active>
  21. </properties>
  22. </profile>
  23. </profiles>

操作可在IDEA右上角方便切换环境
在这里插入图片描述
??切记一定主动Reload一下Maven依赖
??切记一定主动Reload一下Maven依赖
??切记一定主动Reload一下Maven依赖
在这里插入图片描述

在chat-boot-main模块中加入启动类,在src/main/java下右键New=>Java Class

在这里插入图片描述

录入启动类名ChatApplication

在这里插入图片描述

完善ChatApplication启动类代码

  1. package net.javadog.chat;
  2. import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.springframework.boot.SpringApplication;
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;
  6. import org.springframework.boot.web.servlet.ServletComponentScan;
  7. import org.springframework.context.ConfigurableApplicationContext;
  8. import org.springframework.core.env.Environment;
  9. import springfox.documentation.swagger2.annotations.EnableSwagger2;
  10. import java.net.InetAddress;
  11. import java.net.UnknownHostException;
  12. /**
  13. * @author: hdx
  14. * @Date: 2023-01-28 11:24
  15. * @version: 1.0
  16. **/
  17. @SpringBootApplication
  18. @ServletComponentScan
  19. @Slf4j
  20. @EnableSwagger2
  21. @EnableKnife4j
  22. public class ChatApplication {
  23. public static void main(String[] args) throws UnknownHostException {
  24. // 启动类
  25. ConfigurableApplicationContext application = SpringApplication.run(ChatApplication.class, args);
  26. // 打印基础信息
  27. info(application);
  28. }
  29. static void info(ConfigurableApplicationContext application) throws UnknownHostException {
  30. Environment env = application.getEnvironment();
  31. String ip = InetAddress.getLocalHost().getHostAddress();
  32. String port = env.getProperty("server.port");
  33. String active = env.getProperty("spring.profiles.active");
  34. String contextPath = env.getProperty("server.servlet.context-path");
  35. if (contextPath == null) {
  36. contextPath = "";
  37. }
  38. log.info("\n----------------------------------------------------------\n\t" +
  39. "欢迎访问 \thttps://blog.javadog.net\n\t" +
  40. "示例程序【" + active + "】环境已启动! 地址如下:\n\t" +
  41. "Local: \t\thttp://localhost:" + port + contextPath + "\n\t" +
  42. "External: \thttp://" + ip + ':' + port + contextPath + '\n' +
  43. "Swagger文档: \thttp://" + ip + ":" + port + contextPath + "/doc.html\n" +
  44. "----------------------------------------------------------");
  45. }
  46. }

配置application.yml文件

在这里插入图片描述
application.yml

  1. #============================#
  2. # server 配置
  3. #============================#
  4. server:
  5. port: 82
  6. max-http-header-size: 10240
  7. servlet:
  8. context-path: /chat/v1
  9. #============================#
  10. # spring 配置
  11. #============================#
  12. spring:
  13. application:
  14. # 应用名
  15. name: chat
  16. profiles:
  17. active: @spring.active@
  18. servlet:
  19. multipart:
  20. max-request-size: 100MB
  21. max-file-size: 100MB
  22. jackson:
  23. time-zone: GMT+8
  24. date-format: yyyy-MM-dd HH:mm:ss.SSS
  25. locale: zh_CN
  26. serialization:
  27. # 格式化输出
  28. indent_output: false
  29. main:
  30. allow-circular-references: true
  31. #解决swagger版本路径不兼容问题
  32. mvc:
  33. pathmatch:
  34. matching-strategy: ant_path_matcher
  35. #============================#
  36. # mybatisplus 配置
  37. #============================#
  38. mybatis-plus:
  39. mapper-locations: classpath:mapper/*.xml
  40. configuration:
  41. map-underscore-to-camel-case: true
  42. cache-enabled: true
  43. lazy-loading-enabled: true
  44. multiple-result-sets-enabled: true
  45. log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
  46. global-config:
  47. banner: false
  48. db-config:
  49. id-type: assign_id
  50. table-underline: true
  51. enable-sql-runner: true
  52. #数据库类型
  53. db-type: MYSQL
  54. configuration-properties:
  55. prefix:
  56. #如果数据库为postgresql,则需要配置为blobType: BINARY
  57. blobType: BLOB
  58. #如果数据库为oracle或mssql,则需要配置为boolValue: 1
  59. boolValue: true
  60. #============================#
  61. # logging 配置
  62. #============================#
  63. logging:
  64. level:
  65. root: info
  66. file:
  67. path: /root/javadog/chat/logs/${spring.application.name}/
  68. name: ${spring.application.name}
  69. logback:
  70. rollingpolicy:
  71. max-history: 7
  72. max-file-size: 10MB
  73. #============================#
  74. # file 配置
  75. #============================#
  76. file:
  77. # 静态附件前缀
  78. static-prefix: attach
  79. # 上传的文件对外暴露的访问路径
  80. access-path-pattern: /${file.static-prefix}/**
  81. # 文件上传目录
  82. upload-folder: /root/javadog/chat/
  83. # 文件上传最大
  84. max-post-size: 10

application-local.yml

  1. #服务配置
  2. server:
  3. port: 8001
  4. max-http-header-size: 10240
  5. # Mysql数据库
  6. spring:
  7. datasource:
  8. driver-class-name: com.mysql.cj.jdbc.Driver
  9. url: jdbc:mysql://localhost:3306/chat-boot?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT&nullCatalogMeansCurrent=true
  10. username: root
  11. password: root
  12. redis:
  13. host: localhost
  14. port: 6379
  15. password:

application-dev.yml

  1. #服务配置
  2. server:
  3. port: 7001
  4. max-http-header-size: 10240
  5. # mybatisplus 配置
  6. mybatis-plus:
  7. configuration:
  8. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

application-prod.yml

  1. #服务配置
  2. server:
  3. port: 8005

??顺便加一下logback-spring.xml 日志文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <configuration scan="true" scanPeriod="60 seconds" debug="false">
  3. <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
  4. <conversionRule conversionWord="wex"
  5. converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
  6. <conversionRule conversionWord="wEx"
  7. converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
  8. <property name="CONSOLE_LOG_PATTERN"
  9. value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
  10. <property name="FILE_LOG_PATTERN"
  11. value="${FILE_LOG_PATTERN:-%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
  12. <springProperty scope="context" name="application.name" source="spring.application.name" defaultValue="javadog"/>
  13. <springProperty scope="context" name="logging.path" source="logging.file.path" defaultValue="logs"/>
  14. <springProperty scope="context" name="logging.file.max-size" source="logging.logback.rollingpolicy.max-size"
  15. defaultValue="10MB"/>
  16. <springProperty scope="context" name="logging.file.max-history" source="logging.logback.rollingpolicy.max-history"
  17. defaultValue="30"/>
  18. <contextName>${application.name}</contextName>
  19. <springProfile name="dev,prod">
  20. <!--输出到控制台-->
  21. <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
  22. <encoder>
  23. <pattern>${CONSOLE_LOG_PATTERN}</pattern>
  24. </encoder>
  25. </appender>
  26. <root level="info">
  27. <appender-ref ref="console"/>
  28. </root>
  29. </springProfile>
  30. <springProfile name="dev,test,prod">
  31. <!--输出到文件-->
  32. <appender name="file-info" class="ch.qos.logback.core.rolling.RollingFileAppender">
  33. <file>${logging.path}/info/${application.name}-info.log</file>
  34. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  35. <fileNamePattern>${logging.path}/info/${application.name}-info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  36. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  37. <maxFileSize>${logging.file.max-size}</maxFileSize>
  38. </timeBasedFileNamingAndTriggeringPolicy>
  39. <!--只保留最近n天的日志-->
  40. <maxHistory>${logging.file.max-history}</maxHistory>
  41. </rollingPolicy>
  42. <!-- 追加方式记录日志 -->
  43. <append>true</append>
  44. <encoder>
  45. <pattern>${FILE_LOG_PATTERN}</pattern>
  46. </encoder>
  47. </appender>
  48. <appender name="file-warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
  49. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  50. <level>warn</level>
  51. <onMatch>ACCEPT</onMatch>
  52. <onMismatch>DENY</onMismatch>
  53. </filter>
  54. <file>${logging.path}/warn/${application.name}-warn.log</file>
  55. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  56. <fileNamePattern>${logging.path}$/warn/${application.name}-warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  57. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  58. <maxFileSize>${logging.file.max-size}</maxFileSize>
  59. </timeBasedFileNamingAndTriggeringPolicy>
  60. <!--只保留最近n天的日志-->
  61. <maxHistory>${logging.file.max-history}</maxHistory>
  62. </rollingPolicy>
  63. <encoder>
  64. <pattern>${FILE_LOG_PATTERN}</pattern>
  65. </encoder>
  66. </appender>
  67. <appender name="file-error" class="ch.qos.logback.core.rolling.RollingFileAppender">
  68. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  69. <level>error</level>
  70. <onMatch>ACCEPT</onMatch>
  71. <onMismatch>DENY</onMismatch>
  72. </filter>
  73. <file>${logging.path}/error/${application.name}-error.log</file>
  74. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  75. <fileNamePattern>${logging.path}/error/${application.name}-error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  76. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  77. <maxFileSize>${logging.file.max-size}</maxFileSize>
  78. </timeBasedFileNamingAndTriggeringPolicy>
  79. <!--只保留最近n天的日志-->
  80. <maxHistory>${logging.file.max-history}</maxHistory>
  81. </rollingPolicy>
  82. <encoder>
  83. <pattern>${FILE_LOG_PATTERN}</pattern>
  84. </encoder>
  85. </appender>
  86. <root level="INFO">
  87. <appender-ref ref="file-info"/>
  88. <appender-ref ref="file-warn"/>
  89. <appender-ref ref="file-error"/>
  90. </root>
  91. </springProfile>
  92. </configuration>

启动一下项目试试,启动如下证明成功。如果报错少依赖请再拉一下Maven依赖!!!

在这里插入图片描述
在这里插入图片描述


??4.创建子模块-module(模块层)

右击项目chat-boot,new ->Moudle新建模块chat-boot-module

在这里插入图片描述

填写子模块名 chat-boot-module,然后检查对应GAV,点击Finish

在这里插入图片描述

生成子模块chat-boot-module如下图

在这里插入图片描述

删除chat-boot-module下无用文件及目录,如src目录,删除无用目录如下

在这里插入图片描述

自此外部大框架初步搭建成功

在这里插入图片描述

完善chat-boot-module下pom.xml依赖,如lombok,web等必要依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>chat-boot</artifactId>
  7. <groupId>net.javadog.chat</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>chat-boot-module</artifactId>
  12. <packaging>pom</packaging>
  13. <modules>
  14. <module>chat-boot-common</module>
  15. <module>chat-boot-controller</module>
  16. <module>chat-boot-dao</module>
  17. <module>chat-boot-dto</module>
  18. <module>chat-boot-entity</module>
  19. <module>chat-boot-service</module>
  20. </modules>
  21. <properties>
  22. <maven.compiler.source>8</maven.compiler.source>
  23. <maven.compiler.target>8</maven.compiler.target>
  24. </properties>
  25. <dependencyManagement>
  26. <dependencies>
  27. <dependency>
  28. <groupId>net.javadog.chat</groupId>
  29. <artifactId>chat-boot-dependencies</artifactId>
  30. <version>${project.parent.version}</version>
  31. <type>pom</type>
  32. <scope>import</scope>
  33. </dependency>
  34. </dependencies>
  35. </dependencyManagement>
  36. <dependencies>
  37. <!-- web -->
  38. <dependency>
  39. <groupId>org.springframework.boot</groupId>
  40. <artifactId>spring-boot-starter-web</artifactId>
  41. </dependency>
  42. <!--WxJava - 微信开发 Java SDK-->
  43. <dependency>
  44. <groupId>com.github.binarywang</groupId>
  45. <artifactId>weixin-java-miniapp</artifactId>
  46. </dependency>
  47. <!--lombok-->
  48. <dependency>
  49. <groupId>org.projectlombok</groupId>
  50. <artifactId>lombok</artifactId>
  51. </dependency>
  52. <!--hutool-->
  53. <dependency>
  54. <groupId>cn.hutool</groupId>
  55. <artifactId>hutool-all</artifactId>
  56. </dependency>
  57. <!--swagger2-->
  58. <dependency>
  59. <groupId>io.springfox</groupId>
  60. <artifactId>springfox-swagger2</artifactId>
  61. </dependency>
  62. <!--swagger-ui-->
  63. <dependency>
  64. <groupId>io.springfox</groupId>
  65. <artifactId>springfox-swagger-ui</artifactId>
  66. </dependency>
  67. <!--整合Knife4j-->
  68. <dependency>
  69. <groupId>com.github.xiaoymin</groupId>
  70. <artifactId>knife4j-spring-boot-starter</artifactId>
  71. </dependency>
  72. <!--整合Shiro安全框架-->
  73. <dependency>
  74. <groupId>org.apache.shiro</groupId>
  75. <artifactId>shiro-spring</artifactId>
  76. </dependency>
  77. <!--jwt-->
  78. <dependency>
  79. <groupId>com.auth0</groupId>
  80. <artifactId>java-jwt</artifactId>
  81. </dependency>
  82. <!--mybatis-plus-->
  83. <dependency>
  84. <groupId>com.baomidou</groupId>
  85. <artifactId>mybatis-plus-boot-starter</artifactId>
  86. </dependency>
  87. <dependency>
  88. <groupId>mysql</groupId>
  89. <artifactId>mysql-connector-java</artifactId>
  90. </dependency>
  91. </dependencies>
  92. </project>

一定要重新拉取依赖!
一定要重新拉取依赖!
一定要重新拉取依赖!

在这里插入图片描述


??5.创建chat-boot-module模块下对应功能分层

目前本狗分为如下6层

  • common-共通层
  • controller-控制器层
  • dao-数据持久层
  • dto-数据传输对象层
  • entity-实体层
  • service-业务逻辑层

依次按照上述添加模块方式进行新增子模块,本狗如下示例一个,其余都如法炮制

右击项目chat-boot-module,new ->Moudle新建模块chat-boot-common

一定看清楚父模块是否正确
一定看清楚父模块是否正确
一定看清楚父模块是否正确

在这里插入图片描述

确认父级模块后,点击Finish,生成chat-boot-common模块

在这里插入图片描述

依次按照上述方法,新建其他模块

chat-boot-controller模块

在这里插入图片描述

chat-boot-dao模块
在这里插入图片描述

chat-boot-dto模块
在这里插入图片描述

chat-boot-entity模块
在这里插入图片描述

chat-boot-service模块
在这里插入图片描述

总体模块雏形基本完成

在这里插入图片描述

??6.实际流程填充

  • 模拟正常前端请求后台服务调用过程,进行实际代码补充

在chat-boot-entity下新建实体类User,在src/main/java下右键New=>Java Class,录入包名及类名

在这里插入图片描述

  1. package net.javadog.chat.entity;
  2. import lombok.Data;
  3. /**
  4. * @author: hdx
  5. * @Date: 2023-01-28 14:26
  6. * @version: 1.0
  7. **/
  8. @Data
  9. public class User {
  10. private Long id;
  11. private String username;
  12. private String idCard;
  13. }

在chat-boot-dto下新建目request和response,分别代表请求传输对象和返回传输对象,并分别在目录下创建UserRequest.java和UserResponse.java

在这里插入图片描述

  1. package net.javadog.chat.request;
  2. import lombok.Data;
  3. /**
  4. * @author: hdx
  5. * @Date: 2023-01-28 14:59
  6. * @version: 1.0
  7. **/
  8. @Data
  9. public class UserRequest {
  10. private Long id;
  11. private String username;
  12. }
  1. package net.javadog.chat.response;
  2. import lombok.Data;
  3. /**
  4. * @author: hdx
  5. * @Date: 2023-01-28 14:59
  6. * @version: 1.0
  7. **/
  8. @Data
  9. public class UserResponse {
  10. private Long id;
  11. private String username;
  12. }

在chat-boot-dao下修改chat-boot-dao模块下修改pom.xml文件依赖,引入chat-boot-entity;并增对应UserMapper.java
在这里插入图片描述

  1. package net.javadog.chat.mapper;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import net.javadog.chat.entity.User;
  4. /**
  5. * 用户mapper
  6. *
  7. * @author: hdx
  8. * @Date: 2023-01-10 11:43
  9. * @version: 1.0
  10. **/
  11. public interface UserMapper extends BaseMapper<User> {
  12. }
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>chat-boot-module</artifactId>
  7. <groupId>net.javadog.chat</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>chat-boot-dao</artifactId>
  12. <properties>
  13. <maven.compiler.source>8</maven.compiler.source>
  14. <maven.compiler.target>8</maven.compiler.target>
  15. </properties>
  16. <dependencies>
  17. <dependency>
  18. <groupId>net.javadog.chat</groupId>
  19. <artifactId>chat-boot-entity</artifactId>
  20. <version>${project.parent.version}</version>
  21. </dependency>
  22. </dependencies>
  23. </project>

在chat-boot-service下新建目录service和impl,并在对应目录下新建UserService.java和UserServiceImpl.java,并修改chat-boot-service模块下修改pom.xml文件依赖,引入chat-boot-dto,chat-boot-dao

在这里插入图片描述

  1. package net.javadog.chat.service;
  2. import com.baomidou.mybatisplus.extension.service.IService;
  3. import net.javadog.chat.entity.User;
  4. /**
  5. * 用户接口
  6. *
  7. * @author: hdx
  8. * @Date: 2023-01-10 11:53
  9. * @version: 1.0
  10. **/
  11. public interface UserService extends IService<User> {
  12. }
  1. package net.javadog.chat.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import net.javadog.chat.entity.User;
  4. import net.javadog.chat.mapper.UserMapper;
  5. import net.javadog.chat.service.UserService;
  6. import org.springframework.stereotype.Service;
  7. /**
  8. * 用户接口实现类
  9. *
  10. * @author: hdx
  11. * @Date: 2023-01-10 11:55
  12. * @version: 1.0
  13. **/
  14. @Service
  15. public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
  16. }
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>chat-boot-module</artifactId>
  7. <groupId>net.javadog.chat</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>chat-boot-service</artifactId>
  12. <properties>
  13. <maven.compiler.source>8</maven.compiler.source>
  14. <maven.compiler.target>8</maven.compiler.target>
  15. </properties>
  16. <dependencies>
  17. <dependency>
  18. <groupId>net.javadog.chat</groupId>
  19. <artifactId>chat-boot-dao</artifactId>
  20. <version>${project.parent.version}</version>
  21. </dependency>
  22. <dependency>
  23. <groupId>net.javadog.chat</groupId>
  24. <artifactId>chat-boot-dto</artifactId>
  25. <version>${project.parent.version}</version>
  26. </dependency>
  27. </dependencies>
  28. </project>

在chat-boot-controller创建UserController.java,并修改chat-boot-controller模块下修改pom.xml文件依赖,引入chat-boot-dto,chat-boot-service

在这里插入图片描述

  1. package net.javadog.chat.controller;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import io.swagger.annotations.Api;
  4. import io.swagger.annotations.ApiOperation;
  5. import net.javadog.chat.entity.User;
  6. import net.javadog.chat.request.UserRequest;
  7. import net.javadog.chat.response.UserResponse;
  8. import net.javadog.chat.service.UserService;
  9. import org.springframework.web.bind.annotation.*;
  10. import javax.annotation.Resource;
  11. /**
  12. * 用户控制器
  13. *
  14. * @author: hdx
  15. * @Date: 2022-12-07 15:48
  16. * @version: 1.0
  17. **/
  18. @Api(tags = "用户控制器")
  19. @RestController
  20. @RequestMapping("/user")
  21. public class UserController {
  22. @Resource
  23. private UserService userService;
  24. @ApiOperation(value = "用户详情", notes = "用户详情")
  25. @GetMapping
  26. public UserResponse detail(UserRequest userRequest){
  27. UserResponse userResponse = new UserResponse();
  28. User user = userService.getById(userRequest.getId());
  29. BeanUtil.copyProperties(user, userResponse);
  30. return userResponse;
  31. }
  32. }

??重要补充
1.切记修改chat-boot-main下的pom.xml依赖,将chat-boot-controller模块加入
2.切记修改chat-boot-main下的pom.xml依赖,将chat-boot-dao模块加入
3.切记修改启动类ChatApplication中加入@MapperScan注解

在这里插入图片描述

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>chat-boot</artifactId>
  7. <groupId>net.javadog.chat</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>chat-boot-main</artifactId>
  12. <properties>
  13. <maven.compiler.source>8</maven.compiler.source>
  14. <maven.compiler.target>8</maven.compiler.target>
  15. </properties>
  16. <dependencyManagement>
  17. <dependencies>
  18. <dependency>
  19. <groupId>net.javadog.chat</groupId>
  20. <artifactId>chat-boot-dependencies</artifactId>
  21. <version>1.0-SNAPSHOT</version>
  22. <type>pom</type>
  23. <scope>import</scope>
  24. </dependency>
  25. </dependencies>
  26. </dependencyManagement>
  27. <dependencies>
  28. <!-- web -->
  29. <dependency>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-starter-web</artifactId>
  32. </dependency>
  33. <!--lombok-->
  34. <dependency>
  35. <groupId>org.projectlombok</groupId>
  36. <artifactId>lombok</artifactId>
  37. </dependency>
  38. <!--swagger2-->
  39. <dependency>
  40. <groupId>io.springfox</groupId>
  41. <artifactId>springfox-swagger2</artifactId>
  42. </dependency>
  43. <!--swagger-ui-->
  44. <dependency>
  45. <groupId>io.springfox</groupId>
  46. <artifactId>springfox-swagger-ui</artifactId>
  47. </dependency>
  48. <!-- swagger接口文档 -->
  49. <dependency>
  50. <groupId>com.github.xiaoymin</groupId>
  51. <artifactId>knife4j-spring-boot-starter</artifactId>
  52. </dependency>
  53. <!-- controller -->
  54. <dependency>
  55. <groupId>net.javadog.chat</groupId>
  56. <artifactId>chat-boot-controller</artifactId>
  57. <version>${project.parent.version}</version>
  58. </dependency>
  59. <!-- dao -->
  60. <dependency>
  61. <groupId>net.javadog.chat</groupId>
  62. <artifactId>chat-boot-dao</artifactId>
  63. <version>${project.parent.version}</version>
  64. </dependency>
  65. </dependencies>
  66. <build>
  67. <plugins>
  68. <plugin>
  69. <groupId>org.apache.maven.plugins</groupId>
  70. <artifactId>maven-compiler-plugin</artifactId>
  71. <version>3.1</version>
  72. <configuration>
  73. <source>${java.version}</source>
  74. <target>${java.version}</target>
  75. </configuration>
  76. </plugin>
  77. <plugin>
  78. <groupId>org.apache.maven.plugins</groupId>
  79. <artifactId>maven-resources-plugin</artifactId>
  80. <version>2.6</version>
  81. <configuration>
  82. <delimiters>
  83. <delimiter>@</delimiter>
  84. </delimiters>
  85. <useDefaultDelimiters>false</useDefaultDelimiters>
  86. </configuration>
  87. </plugin>
  88. </plugins>
  89. <resources>
  90. <resource>
  91. <directory>src/main/webapp</directory>
  92. <filtering>false</filtering>
  93. </resource>
  94. <resource>
  95. <directory>src/main/resources</directory>
  96. <filtering>true</filtering>
  97. </resource>
  98. <resource>
  99. <directory>src/main/java</directory>
  100. <includes>
  101. <include>**/*.xml</include>
  102. </includes>
  103. </resource>
  104. </resources>
  105. </build>
  106. <profiles>
  107. <profile>
  108. <id>local</id>
  109. <properties>
  110. <spring.active>local</spring.active>
  111. </properties>
  112. <activation>
  113. <activeByDefault>true</activeByDefault>
  114. </activation>
  115. </profile>
  116. <profile>
  117. <id>dev</id>
  118. <properties>
  119. <spring.active>dev</spring.active>
  120. </properties>
  121. </profile>
  122. <profile>
  123. <id>prod</id>
  124. <properties>
  125. <spring.active>prod</spring.active>
  126. </properties>
  127. </profile>
  128. </profiles>
  129. </project>

在这里插入图片描述

  1. package net.javadog.chat;
  2. import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.mybatis.spring.annotation.MapperScan;
  5. import org.springframework.boot.SpringApplication;
  6. import org.springframework.boot.autoconfigure.SpringBootApplication;
  7. import org.springframework.boot.web.servlet.ServletComponentScan;
  8. import org.springframework.context.ConfigurableApplicationContext;
  9. import org.springframework.core.env.Environment;
  10. import springfox.documentation.swagger2.annotations.EnableSwagger2;
  11. import java.net.InetAddress;
  12. import java.net.UnknownHostException;
  13. /**
  14. * @author: hdx
  15. * @Date: 2023-01-28 11:24
  16. * @version: 1.0
  17. **/
  18. @SpringBootApplication
  19. @ServletComponentScan
  20. @Slf4j
  21. @EnableSwagger2
  22. @EnableKnife4j
  23. @MapperScan(basePackages = {"net.javadog.chat.mapper"})
  24. public class ChatApplication {
  25. public static void main(String[] args) throws UnknownHostException {
  26. // 启动类
  27. ConfigurableApplicationContext application = SpringApplication.run(ChatApplication.class, args);
  28. // 打印基础信息
  29. info(application);
  30. }
  31. static void info(ConfigurableApplicationContext application) throws UnknownHostException {
  32. Environment env = application.getEnvironment();
  33. String ip = InetAddress.getLocalHost().getHostAddress();
  34. String port = env.getProperty("server.port");
  35. String active = env.getProperty("spring.profiles.active");
  36. String contextPath = env.getProperty("server.servlet.context-path");
  37. if (contextPath == null) {
  38. contextPath = "";
  39. }
  40. log.info("\n----------------------------------------------------------\n\t" +
  41. "欢迎访问 \thttps://blog.javadog.net\n\t" +
  42. "示例程序【" + active + "】环境已启动! 地址如下:\n\t" +
  43. "Local: \t\thttp://localhost:" + port + contextPath + "\n\t" +
  44. "External: \thttp://" + ip + ':' + port + contextPath + '\n' +
  45. "Swagger文档: \thttp://" + ip + ":" + port + contextPath + "/doc.html\n" +
  46. "----------------------------------------------------------");
  47. }
  48. }

??7.示例DB更新

  • 模拟正常前端请求后台服务调用过程,进行实际代码补充

在这里插入图片描述

  1. DROP TABLE IF EXISTS `user`;
  2. CREATE TABLE `user` (
  3. `id` bigint(20) NOT NULL COMMENT 'id',
  4. `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
  5. `id_card` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '身份证',
  6. PRIMARY KEY (`id`) USING BTREE
  7. ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
  8. -- ----------------------------
  9. -- Records of user
  10. -- ----------------------------
  11. INSERT INTO `user` VALUES (1, 'JavaDog', '123123');

??8.访问测试

浏览器访问http://localhost:8001/chat/v1/user?id=1

测试成功如下图所示

在这里插入图片描述

总结

以上示例只是简单示范分层思路,其中代码逻辑实现方式有很多种,大家选取适用自己就好,希望自己的思路能对大家有帮助

如遇缺少依赖情况,一定要重新拉取依赖!
在这里插入图片描述

写在最后

此生两悔,悔遇见你,更悔未早遇见你,珍惜当下拥有,勿念昔日美好。

JavaDog 狗屋地址
个人博客 https://blog.javadog.net
公众号 https://mp.weixin.qq.com/s/_vgnXoQ8FSobD3OfRAf5gw
CSDN https://blog.csdn.net/baidu_25986059
掘金 https://juejin.cn/user/2172290706716775
知乎 https://www.zhihu.com/people/JavaDog
简书 https://www.jianshu.com/u/1ff9c6bdb916
gitee https://gitee.com/javadog-net
GitHub https://github.com/javadog-net

原文链接:https://www.cnblogs.com/javadog-net/p/17216199.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号