
两个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.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
-
- <groupId>com.yemagroupId>
- <artifactId>YMRootartifactId>
- <version>1.0-SNAPSHOTversion>
- <packaging>pompackaging>
-
- <modules>
- <module>yema-commonmodule>
- <module>yema-terminal-bootmodule>
- modules>
-
- <properties>
- <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
- <maven.compiler.source>8maven.compiler.source>
- <maven.compiler.target>8maven.compiler.target>
- properties>
-
-
- <parent>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-parentartifactId>
- <version>2.3.4.RELEASEversion>
- <relativePath/>
- parent>
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>com.yemagroupId>
- <artifactId>yema-commonartifactId>
- <version>1.0-SNAPSHOTversion>
- dependency>
- dependencies>
- dependencyManagement>
-
- project>
yema-terminal-boot的pom.xml
- "1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <artifactId>YMRootartifactId>
- <groupId>com.yemagroupId>
- <version>1.0-SNAPSHOTversion>
- parent>
- <modelVersion>4.0.0modelVersion>
-
- <artifactId>yema-terminal-bootartifactId>
-
- <dependencies>
- <dependency>
- <groupId>com.yemagroupId>
- <artifactId>yema-commonartifactId>
- dependency>
- dependencies>
-
- <build>
- <finalName>ym-terminal-bootfinalName>
- <plugins>
- <plugin>
-
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-maven-pluginartifactId>
- plugin>
- plugins>
- build>
- 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.0" encoding="UTF-8"?>
-
- <configuration status="DEBUG" monitorinterval="60">
-
- <Properties>
-
-
-
-
- <property name="LOG_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}(%F:%L) - %msg%n" />
-
- <property name="LOG_FILE_PATH" value="/XLogs/terminal" />
- <property name="FILE_NAME" value="terminalFile" />
- Properties>
-
-
- <Appenders>
-
-
- <Console name="Console" target="SYSTEM_OUT">
- <PatternLayout pattern="${LOG_PATTERN}"/>
- Console>
-
-
-
- <File name="XLogs" fileName="${LOG_FILE_PATH}/xlogs.log" append="false">
- <PatternLayout pattern="${LOG_PATTERN}"/>
-
- <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
- File>
-
-
-
-
-
- <RollingFile name="RollingFileInfo" fileName="${LOG_FILE_PATH}/info.log" filePattern="${LOG_FILE_PATH}/logs/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.zip">
-
- <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
- <PatternLayout pattern="${LOG_PATTERN}"/>
- <Policies>
-
- <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
- <SizeBasedTriggeringPolicy size="10MB"/>
- Policies>
-
- <DefaultRolloverStrategy max="15"/>
- RollingFile>
-
-
- <RollingFile name="RollingFileWarn" fileName="${LOG_FILE_PATH}/warn.log" filePattern="${LOG_FILE_PATH}/logs/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.zip">
-
- <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
- <PatternLayout pattern="${LOG_PATTERN}"/>
- <Policies>
-
- <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
- <SizeBasedTriggeringPolicy size="10MB"/>
- Policies>
-
- <DefaultRolloverStrategy max="15"/>
- RollingFile>
-
-
- <RollingFile name="RollingFileError" fileName="${LOG_FILE_PATH}/error.log" filePattern="${LOG_FILE_PATH}/logs/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.zip">
-
- <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
- <PatternLayout pattern="${LOG_PATTERN}"/>
- <Policies>
-
- <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
- <SizeBasedTriggeringPolicy size="10MB"/>
- Policies>
-
- <DefaultRolloverStrategy max="15"/>
- RollingFile>
-
- Appenders>
-
-
-
-
-
-
-
-
-
-
-
- <loggers>
-
-
- <Logger name="org.springframework" level="info" additivity="false">
- <AppenderRef ref="Console"/>
- Logger>
- <logger name="com.spring" level="INFO"/>
- <logger name="org.mybatis" level="info" additivity="false">
- <AppenderRef ref="Console"/>
- logger>
-
- <root level="info">
- <appender-ref ref="Console"/>
- <appender-ref ref="XLogs"/>
- <appender-ref ref="RollingFileInfo"/>
- <appender-ref ref="RollingFileWarn"/>
- <appender-ref ref="RollingFileError"/>
- root>
- loggers>
-
- configuration>
yema-common的pom.xml
- "1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <artifactId>YMRootartifactId>
- <groupId>com.yemagroupId>
- <version>1.0-SNAPSHOTversion>
- parent>
- <modelVersion>4.0.0modelVersion>
-
- <artifactId>yema-commonartifactId>
-
- <properties>
- <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
- <maven.compiler.source>8maven.compiler.source>
- <maven.compiler.target>8maven.compiler.target>
- properties>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- <exclusions>
- <exclusion>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-loggingartifactId>
- exclusion>
- exclusions>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-testartifactId>
- <scope>testscope>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-thymeleafartifactId>
- dependency>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-log4j2artifactId>
- dependency>
-
- <dependency>
- <groupId>com.microsoft.sqlservergroupId>
- <artifactId>mssql-jdbcartifactId>
- <scope>runtimescope>
- dependency>
-
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- dependency>
-
- <dependency>
- <groupId>com.alibabagroupId>
- <artifactId>fastjsonartifactId>
- <version>1.2.73version>
- dependency>
-
- <dependency>
- <groupId>org.apache.commonsgroupId>
- <artifactId>commons-lang3artifactId>
- dependency>
-
- <dependency>
- <groupId>com.alibabagroupId>
- <artifactId>druidartifactId>
- <version>1.2.8version>
- dependency>
- <dependency>
- <groupId>org.slf4jgroupId>
- <artifactId>slf4j-log4j12artifactId>
- dependency>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>8.0.25version>
- dependency>
-
- <dependency>
- <groupId>com.baomidougroupId>
- <artifactId>mybatis-plus-boot-starterartifactId>
- <version>3.3.2version>
- dependency>
-
- <dependency>
- <groupId>com.baomidougroupId>
- <artifactId>mybatis-plus-extensionartifactId>
- <version>3.4.2version>
- dependency>
-
-
-
- <dependency>
- <groupId>io.jsonwebtokengroupId>
- <artifactId>jjwt-apiartifactId>
- <version>0.11.5version>
- dependency>
- <dependency>
- <groupId>io.jsonwebtokengroupId>
- <artifactId>jjwt-implartifactId>
- <version>0.11.5version>
- <scope>runtimescope>
- dependency>
- <dependency>
- <groupId>io.jsonwebtokengroupId>
- <artifactId>jjwt-jacksonartifactId>
- <version>0.11.5version>
- <scope>runtimescope>
- dependency>
-
-
-
- <dependency>
- <groupId>org.apache.httpcomponentsgroupId>
- <artifactId>httpclientartifactId>
- <version>4.5.13version>
- dependency>
- <dependency>
- <groupId>org.apache.httpcomponents.client5groupId>
- <artifactId>httpclient5artifactId>
- <version>5.2.3version>
- dependency>
-
-
- <dependency>
- <groupId>com.sun.jerseygroupId>
- <artifactId>jersey-clientartifactId>
- <version>1.19.4version>
- dependency>
-
- <dependency>
- <groupId>commons-iogroupId>
- <artifactId>commons-ioartifactId>
- <version>2.11.0version>
- dependency>
-
- <dependency>
- <groupId>net.coobirdgroupId>
- <artifactId>thumbnailatorartifactId>
- <version>0.4.8version>
- dependency>
-
-
- <dependency>
- <groupId>com.baidu.aipgroupId>
- <artifactId>java-sdkartifactId>
- <version>4.12.0version>
- dependency>
-
- dependencies>
- project>
(前提是首先你得排查下注解以及扫描以及mapper.xml中的namespace引用是否正确)
这是没有扫描到对应的mapper.xml。原因是mybatis-plus 3.1.2 版本后,里面已经设置默认扫描位置为:classpath*:mapper/**/*.xml,见配置文件:MybatisPlusProperties

所以在springboot的yml中要配置成
- mybatis-plus:
- mapper-locations: classpath*:mapper/*.xml
- type-aliases-package: com.yema
- configuration:
- log-impl: org.apache.ibatis.logging.log4j2.Log4j2Impl #开启sql日志
- # log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl #关闭sql日志
- default-enum-type-handler: com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler
- call-setters-on-nulls: true #设置值为null时字段也返回给前端
- cache-enabled: true #开启缓存
- lazy-loading-enabled: true #开启懒加载
- aggressive-lazy-loading: false #关闭立即加载
- jdbc-type-for-null: null #因为mybatis对所有的null都映射的是原生Jdbc的OTHER类型,oracle不能正确处理,所以修改jdbcTypeForNull的值为null
- map-underscore-to-camel-case: true #开启驼峰转换,就是数据库的字段是student_id 对应 实体类属性 studentId
原因是在springboot对应的module(yema-terminal-boot)的pom.xml中缺少
- <build>
- <finalName>ym-terminal-bootfinalName>
- <plugins>
- <plugin>
-
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-maven-pluginartifactId>
- plugin>
- plugins>
- build>