• maven聚合工程整合springboot+mybatisplus遇到的问题


    前言(可以直接跳过看下面解决方法)

    项目结构

    两个module:

    yema-terminal-boot 是springboot项目,子包有:controller、service、dao 等等。属于经典三层架构。那么,该module可以理解为是一个单体项目,采用MVC软件设计模式+三层体系的编程思想构建而成

    yema-common 的作用,就是存放一些公用的资源,任何公用的都放这里,除了常用自定义工具类,还包括接口!然后该module的pom.xml文件中定义了整个项目所需要的依赖jar包。这样做,yema-terminal-boot 的pom.xml中只需要依赖 yema-common 即可。

    为什么这样设计两个module?

    也许,市面上的Maven聚合工程,挺多人是这样弄的,比如:

    yema-terminal-boot

    yema-service

    yema-dao

    yema-common

    这样也可以,就是有个问题。当我再次新建一个module作为另一个单体项目时,那么这个单体项目的业务层和持久层,都得写yema-service、yema-dao 中。当业务多了,项目经手的程序员多了,可能会出现乱调用现象。就是说yema-service 中的某个接口,其实是只服务于其中一个单体项目,另一个单体项目是不能用的。但是却调用了,虽然功能也实现了,但给以后埋下了个地雷。

    而我目前这种只用两个module,就是为了强制规范。是这个项目的就这个项目里写,不要偷懒去复用。虽然工作量多了点,但以后排查与修改问题就好很多。(我就接手了这种项目,生产支付调用问题,发现多个springboot启动类调用到,头皮发麻,改一下,要测试多个项目)

    整合

    父pom.xml

    1. "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. <modelVersion>4.0.0modelVersion>
    6. <groupId>com.yemagroupId>
    7. <artifactId>YMRootartifactId>
    8. <version>1.0-SNAPSHOTversion>
    9. <packaging>pompackaging>
    10. <modules>
    11. <module>yema-commonmodule>
    12. <module>yema-terminal-bootmodule>
    13. modules>
    14. <properties>
    15. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    16. <maven.compiler.source>8maven.compiler.source>
    17. <maven.compiler.target>8maven.compiler.target>
    18. properties>
    19. <parent>
    20. <groupId>org.springframework.bootgroupId>
    21. <artifactId>spring-boot-starter-parentartifactId>
    22. <version>2.3.4.RELEASEversion>
    23. <relativePath/>
    24. parent>
    25. <dependencyManagement>
    26. <dependencies>
    27. <dependency>
    28. <groupId>com.yemagroupId>
    29. <artifactId>yema-commonartifactId>
    30. <version>1.0-SNAPSHOTversion>
    31. dependency>
    32. dependencies>
    33. dependencyManagement>
    34. project>

    yema-terminal-boot的pom.xml

    1. "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>YMRootartifactId>
    7. <groupId>com.yemagroupId>
    8. <version>1.0-SNAPSHOTversion>
    9. parent>
    10. <modelVersion>4.0.0modelVersion>
    11. <artifactId>yema-terminal-bootartifactId>
    12. <dependencies>
    13. <dependency>
    14. <groupId>com.yemagroupId>
    15. <artifactId>yema-commonartifactId>
    16. dependency>
    17. dependencies>
    18. <build>
    19. <finalName>ym-terminal-bootfinalName>
    20. <plugins>
    21. <plugin>
    22. <groupId>org.springframework.bootgroupId>
    23. <artifactId>spring-boot-maven-pluginartifactId>
    24. plugin>
    25. plugins>
    26. build>
    27. project>

    yema-terminal-boot的resources下的log4j2.xml

    注意:需要在yml中配置。成功后,日志保存在该项目所在磁盘根目录下,实在找不到,全局搜XLogs目录

    #配置日志
    logging.level.com.yema: info
    logging.config: classpath:log4j2.xml
    logging.file.encoding: UTF-8
    1. "1.0" encoding="UTF-8"?>
    2. <configuration status="DEBUG" monitorinterval="60">
    3. <Properties>
    4. <property name="LOG_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}(%F:%L) - %msg%n" />
    5. <property name="LOG_FILE_PATH" value="/XLogs/terminal" />
    6. <property name="FILE_NAME" value="terminalFile" />
    7. Properties>
    8. <Appenders>
    9. <Console name="Console" target="SYSTEM_OUT">
    10. <PatternLayout pattern="${LOG_PATTERN}"/>
    11. Console>
    12. <File name="XLogs" fileName="${LOG_FILE_PATH}/xlogs.log" append="false">
    13. <PatternLayout pattern="${LOG_PATTERN}"/>
    14. <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
    15. File>
    16. <RollingFile name="RollingFileInfo" fileName="${LOG_FILE_PATH}/info.log" filePattern="${LOG_FILE_PATH}/logs/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.zip">
    17. <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
    18. <PatternLayout pattern="${LOG_PATTERN}"/>
    19. <Policies>
    20. <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
    21. <SizeBasedTriggeringPolicy size="10MB"/>
    22. Policies>
    23. <DefaultRolloverStrategy max="15"/>
    24. RollingFile>
    25. <RollingFile name="RollingFileWarn" fileName="${LOG_FILE_PATH}/warn.log" filePattern="${LOG_FILE_PATH}/logs/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.zip">
    26. <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
    27. <PatternLayout pattern="${LOG_PATTERN}"/>
    28. <Policies>
    29. <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
    30. <SizeBasedTriggeringPolicy size="10MB"/>
    31. Policies>
    32. <DefaultRolloverStrategy max="15"/>
    33. RollingFile>
    34. <RollingFile name="RollingFileError" fileName="${LOG_FILE_PATH}/error.log" filePattern="${LOG_FILE_PATH}/logs/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.zip">
    35. <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
    36. <PatternLayout pattern="${LOG_PATTERN}"/>
    37. <Policies>
    38. <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
    39. <SizeBasedTriggeringPolicy size="10MB"/>
    40. Policies>
    41. <DefaultRolloverStrategy max="15"/>
    42. RollingFile>
    43. Appenders>
    44. <loggers>
    45. <Logger name="org.springframework" level="info" additivity="false">
    46. <AppenderRef ref="Console"/>
    47. Logger>
    48. <logger name="com.spring" level="INFO"/>
    49. <logger name="org.mybatis" level="info" additivity="false">
    50. <AppenderRef ref="Console"/>
    51. logger>
    52. <root level="info">
    53. <appender-ref ref="Console"/>
    54. <appender-ref ref="XLogs"/>
    55. <appender-ref ref="RollingFileInfo"/>
    56. <appender-ref ref="RollingFileWarn"/>
    57. <appender-ref ref="RollingFileError"/>
    58. root>
    59. loggers>
    60. configuration>

    yema-common的pom.xml

    1. "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>YMRootartifactId>
    7. <groupId>com.yemagroupId>
    8. <version>1.0-SNAPSHOTversion>
    9. parent>
    10. <modelVersion>4.0.0modelVersion>
    11. <artifactId>yema-commonartifactId>
    12. <properties>
    13. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    14. <maven.compiler.source>8maven.compiler.source>
    15. <maven.compiler.target>8maven.compiler.target>
    16. properties>
    17. <dependencies>
    18. <dependency>
    19. <groupId>org.springframework.bootgroupId>
    20. <artifactId>spring-boot-starter-webartifactId>
    21. <exclusions>
    22. <exclusion>
    23. <groupId>org.springframework.bootgroupId>
    24. <artifactId>spring-boot-starter-loggingartifactId>
    25. exclusion>
    26. exclusions>
    27. dependency>
    28. <dependency>
    29. <groupId>org.springframework.bootgroupId>
    30. <artifactId>spring-boot-starter-testartifactId>
    31. <scope>testscope>
    32. dependency>
    33. <dependency>
    34. <groupId>org.springframework.bootgroupId>
    35. <artifactId>spring-boot-starter-thymeleafartifactId>
    36. dependency>
    37. <dependency>
    38. <groupId>org.springframework.bootgroupId>
    39. <artifactId>spring-boot-starter-log4j2artifactId>
    40. dependency>
    41. <dependency>
    42. <groupId>com.microsoft.sqlservergroupId>
    43. <artifactId>mssql-jdbcartifactId>
    44. <scope>runtimescope>
    45. dependency>
    46. <dependency>
    47. <groupId>org.projectlombokgroupId>
    48. <artifactId>lombokartifactId>
    49. dependency>
    50. <dependency>
    51. <groupId>com.alibabagroupId>
    52. <artifactId>fastjsonartifactId>
    53. <version>1.2.73version>
    54. dependency>
    55. <dependency>
    56. <groupId>org.apache.commonsgroupId>
    57. <artifactId>commons-lang3artifactId>
    58. dependency>
    59. <dependency>
    60. <groupId>com.alibabagroupId>
    61. <artifactId>druidartifactId>
    62. <version>1.2.8version>
    63. dependency>
    64. <dependency>
    65. <groupId>org.slf4jgroupId>
    66. <artifactId>slf4j-log4j12artifactId>
    67. dependency>
    68. <dependency>
    69. <groupId>mysqlgroupId>
    70. <artifactId>mysql-connector-javaartifactId>
    71. <version>8.0.25version>
    72. dependency>
    73. <dependency>
    74. <groupId>com.baomidougroupId>
    75. <artifactId>mybatis-plus-boot-starterartifactId>
    76. <version>3.3.2version>
    77. dependency>
    78. <dependency>
    79. <groupId>com.baomidougroupId>
    80. <artifactId>mybatis-plus-extensionartifactId>
    81. <version>3.4.2version>
    82. dependency>
    83. <dependency>
    84. <groupId>io.jsonwebtokengroupId>
    85. <artifactId>jjwt-apiartifactId>
    86. <version>0.11.5version>
    87. dependency>
    88. <dependency>
    89. <groupId>io.jsonwebtokengroupId>
    90. <artifactId>jjwt-implartifactId>
    91. <version>0.11.5version>
    92. <scope>runtimescope>
    93. dependency>
    94. <dependency>
    95. <groupId>io.jsonwebtokengroupId>
    96. <artifactId>jjwt-jacksonartifactId>
    97. <version>0.11.5version>
    98. <scope>runtimescope>
    99. dependency>
    100. <dependency>
    101. <groupId>org.apache.httpcomponentsgroupId>
    102. <artifactId>httpclientartifactId>
    103. <version>4.5.13version>
    104. dependency>
    105. <dependency>
    106. <groupId>org.apache.httpcomponents.client5groupId>
    107. <artifactId>httpclient5artifactId>
    108. <version>5.2.3version>
    109. dependency>
    110. <dependency>
    111. <groupId>com.sun.jerseygroupId>
    112. <artifactId>jersey-clientartifactId>
    113. <version>1.19.4version>
    114. dependency>
    115. <dependency>
    116. <groupId>commons-iogroupId>
    117. <artifactId>commons-ioartifactId>
    118. <version>2.11.0version>
    119. dependency>
    120. <dependency>
    121. <groupId>net.coobirdgroupId>
    122. <artifactId>thumbnailatorartifactId>
    123. <version>0.4.8version>
    124. dependency>
    125. <dependency>
    126. <groupId>com.baidu.aipgroupId>
    127. <artifactId>java-sdkartifactId>
    128. <version>4.12.0version>
    129. dependency>
    130. dependencies>
    131. project>

    整合遇到的问题

    1、Invalid bound statement (not found)

    (前提是首先你得排查下注解以及扫描以及mapper.xml中的namespace引用是否正确)

    这是没有扫描到对应的mapper.xml。原因是mybatis-plus 3.1.2 版本后,里面已经设置默认扫描位置为:classpath*:mapper/**/*.xml,见配置文件:MybatisPlusProperties

    所以在springboot的yml中要配置成

    1. mybatis-plus:
    2. mapper-locations: classpath*:mapper/*.xml
    3. type-aliases-package: com.yema
    4. configuration:
    5. log-impl: org.apache.ibatis.logging.log4j2.Log4j2Impl #开启sql日志
    6. # log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl #关闭sql日志
    7. default-enum-type-handler: com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler
    8. call-setters-on-nulls: true #设置值为null时字段也返回给前端
    9. cache-enabled: true #开启缓存
    10. lazy-loading-enabled: true #开启懒加载
    11. aggressive-lazy-loading: false #关闭立即加载
    12. jdbc-type-for-null: null #因为mybatis对所有的null都映射的是原生Jdbc的OTHER类型,oracle不能正确处理,所以修改jdbcTypeForNull的值为null
    13. map-underscore-to-camel-case: true #开启驼峰转换,就是数据库的字段是student_id 对应 实体类属性 studentId

    2、Maven打包后没有没有BOOT-INF等目录

    原因是在springboot对应的module(yema-terminal-boot)的pom.xml中缺少

    1. <build>
    2. <finalName>ym-terminal-bootfinalName>
    3. <plugins>
    4. <plugin>
    5. <groupId>org.springframework.bootgroupId>
    6. <artifactId>spring-boot-maven-pluginartifactId>
    7. plugin>
    8. plugins>
    9. build>

  • 相关阅读:
    【AGC】AGC鉴权认证模式获取clientToken的方法
    LLM 技术图谱(LLM Tech Map)& Kubernetes (K8s) 与AIGC的结合应用
    HTTPS/HTTP2
    mysql5.6 修改密码
    安装ubuntu 18
    对思维进化的理解
    性能提升3-4倍!贝壳基于Flink + OceanBase的实时维表服务
    【蓝桥杯选拔赛真题48】Scratch购物程序 少儿编程scratch蓝桥杯选拔赛真题讲解
    HTML+CSS鲜花网页制作 DW静态网页设计 简单的个人网页制作
    Foxit PDF SDK 5.9.6 for ActiveX Crack
  • 原文地址:https://blog.csdn.net/smile_life_/article/details/139270041