@[toc]
1、Log4j2配制
1.1、pom文件配制
我们需要剔除掉spring Web模块中slf4j的日志部分,否则将会与slf4j2产生依赖冲突
<!-- Web模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot.version}</version>
<exclusions>
<exclusion>
<artifactId>logback-classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>${springboot.version}</version>
</dependency>
1.2、resource中添加log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- status:用来指定log4j本身的打印日志级别,monitorInterval:指定log4j自动重新配置的监测间隔时间 -->
<configuration status="WARN" monitorInterval="30">
<!-- 自己设置属性,后面通过${}来访问 -->
<properties>
<!--<property name="LOG_HOME">${web:rootDir}/logs</property>-->
<property name="LOG_HOME">/opt/logs</property>
<!--日志名称-->
<property name="LOG_NAME">nanjustar-server-logs</property>
<!--日志格式-->
<property name="LOG_FORMAT">[%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %t %c[%L] - %m %n</property>
<property name="LOG_FORMAT_CONSOLE">%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%-5level} [%t] %highlight{%c{1.}.%M(%L)}: %msg%n%throwable</property>
<!--备份目录- 根据年月建立文件夹 -->
<property name="BACKUP_HOME">${LOG_HOME}/$${date:yyyy-MM}</property>
<!--备份频率-->
<property name="BACK_HZ">%d{yyyy-MM-dd}</property>
</properties>
<appenders>
<!--控制台日志-->
<console name="console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="${LOG_FORMAT_CONSOLE}" disableAnsi="false" noConsoleNoAnsi="false"/>
</console>
</appenders>
<loggers>
<!--根日志配置-->
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="infoLog"/>
<appender-ref ref="warnLog"/>
<appender-ref ref="errorLog"/>
</root>
</loggers>
</configuration>
1.3、启动测试
1.4、日志简单使用
/**
* @author 木字楠
* @description 项目主启动类
* @date 2022/8/11
*/
@Slf4j
@SpringBootApplication
public class MuZiNanApplication {
public static void main(String[] args) {
ConfigurableEnvironment env = SpringApplication.run(MuZiNanApplication.class, args).getEnvironment();
log.info("\n----------------------------------------------------------\n\t" +
"Application:'{}' is running! Access URLs:\n\t" +
"Local URL: \thttp://localhost:{}\n\t" +
"Document:\thttp://localhost:{}/doc.html\n" +
"----------------------------------------------------------",
env.getProperty("spring.application.name"), env.getProperty("server.port"), env.getProperty("server.port"));
}
}
2、Swagger3引入
2.1、依赖引入
<!--============== 接口管理 ==================-->
<swagger.version>3.0.0</swagger.version>
<knife4j.version>2.0.4</knife4j.version>
<!--============== 接口管理 ==================-->
<!-- Swagger3依赖 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>${swagger.version}</version>
<exclusions>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--Swagger皮肤-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
2.2、Swagger配制
# custom Configuration
application:
#Swagger Configuration
swagger:
isEnable: true
/**
* @author 木字楠
* @version 1.0
*/
@Configuration
public class SwaggerConfig {
@Value("${application.swagger.isEnable}")
private boolean isEnable;
@Bean
public Docket createSecurityRestApi(){
return createRestApi("system","space.muzinan.controller.security");
}
/**
* 创建api
* @param groupName 分组名称
* @param basePackage 包路径
* @return Docket
*/
public Docket createRestApi(String groupName,String basePackage) {
return new Docket(DocumentationType.OAS_30)
.enable(isEnable)
.apiInfo(apiInfo())
.groupName(groupName)
.select()
.apis(RequestHandlerSelectors.basePackage(basePackage))
.paths(PathSelectors.any())
.build();
}
/**
* api简介信息
* @return ApiInfo
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("标题:木字楠博客系统后台接口文档")
.description("描述:木字楠博客系统后端接口服务...")
.contact(new Contact("楠橘星", "www.muzinan.space", "486356410@qq.com"))
.version("v1.0")
.build();
}
}
2.3、访问Swagger
3、代码生成
3.1、依赖引入
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
3.2、生成代码
/**
* <p>
* MySQL 生成演示
* </p>
*/
public static void main(String[] args) {
//1. 全局配置
GlobalConfig config = new GlobalConfig();
//是否支持AR模式
config.setActiveRecord(true)
.setAuthor("MuZiNan") //作者
.setOutputDir("D:\\Desktop\\Security") //生成路径
.setFileOverride(true)//是否文件覆盖,如果多次
.setServiceName("%sService") //设置生成的service接口名首字母是否为I
.setIdType(IdType.AUTO) //主键策略
.setBaseResultMap(true)
.setBaseColumnList(true)
.setDateType(DateType.ONLY_DATE)
.setSwagger2(true);
//2. 数据源配置
DataSourceConfig dsConfig = new DataSourceConfig();
dsConfig.setDbType(DbType.MYSQL)
.setUrl("jdbc:mysql://[ip]:[port]/blog?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true")
.setDriverName("com.mysql.cj.jdbc.Driver")
.setUsername("[用户名]")
.setPassword("[密码]");
//3.策略配置
StrategyConfig stConfig = new StrategyConfig();
stConfig.setCapitalMode(true) // 全局大写命名
.setNaming(NamingStrategy.underline_to_camel)// 数据库表映射到实体的命名策略
.setColumnNaming(NamingStrategy.underline_to_camel)
.setInclude("表名称") //生成的表
.setTablePrefix("表前缀")
.setControllerMappingHyphenStyle(true)
.setEntityLombokModel(true)
.setRestControllerStyle(true); // 表前缀
//4.包名策略
PackageConfig pkConfig = new PackageConfig();
pkConfig.setParent("space.muzinan")//父包名
.setController("controller")
.setEntity("entity")
.setService("business")
.setMapper("mapper")
.setServiceImpl("business.impl");
//5.整合配置
AutoGenerator ag = new AutoGenerator().setGlobalConfig(config)
.setDataSource(dsConfig)
.setStrategy(stConfig)
.setPackageInfo(pkConfig);
ag.execute();
}
3.3、开始生成代码
因为我们的项目是多模块项目,所以我们先暂且将所有代码生成在web模块。
生成完毕,我们手动将代码拖到对应模块
3.4、代码结构
web模块 => 存放Controller
Business模块 => 主要存放接口实现类
Mapper模块 => Mapper接口 以及 xml文件
api 模块 => 实体类、api接口
common 模块 => 工具类、配置类、枚举类、常量类...
3.5、swagger配制修改
@Bean
public Docket createSecurityRestApi() {
return createRestApi("security", "space.muzinan.controller.security");
}
@Bean
public Docket createSystemRestApi() {
return createRestApi("system", "space.muzinan.controller.system");
}
@Bean
public Docket createBlogRestApi() {
return createRestApi("blog", "space.muzinan.controller.blog");
}
添加以上配制之后swagger被区分为三个分组,在Controller上添加@Api(tags ={""})即可显示对应接口