4、 后台服务配制以及代码生成[木字楠博客]

2022-11-15 17:05:44 浏览数 (1)

文章目录
  • 1、Log4j2配制
    • 1.1、pom文件配制
    • 1.2、resource中添加log4j2.xml
    • 1.3、启动测试
    • 1.4、日志简单使用
  • 2、Swagger3引入
    • 2.1、依赖引入
    • 2.2、Swagger配制
    • 2.3、访问Swagger
  • 3、代码生成
    • 3.1、依赖引入
    • 3.2、生成代码
    • 3.3、开始生成代码
    • 3.4、代码结构
    • 3.5、swagger配制修改

1、Log4j2配制

1.1、pom文件配制

我们需要剔除掉spring Web模块中slf4j的日志部分,否则将会与slf4j2产生依赖冲突

代码语言:javascript复制
            <!-- 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

代码语言:javascript复制
<?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、日志简单使用

代码语言:javascript复制
/**
 * @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----------------------------------------------------------nt"  
                        "Application:'{}' is running! Access URLs:nt"  
                        "Local URL: thttp://localhost:{}nt"  
                        "Document:thttp://localhost:{}/doc.htmln"  
                        "----------------------------------------------------------",
                env.getProperty("spring.application.name"), env.getProperty("server.port"), env.getProperty("server.port"));
    }

}

2、Swagger3引入

2.1、依赖引入

代码语言:javascript复制
        <!--==============  接口管理  ==================-->
        <swagger.version>3.0.0</swagger.version>
        <knife4j.version>2.0.4</knife4j.version>
代码语言:javascript复制
            <!--==============  接口管理  ==================-->
            <!-- 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配制

代码语言:javascript复制
# custom Configuration
application:
  #Swagger Configuration
  swagger:
    isEnable: true
代码语言:javascript复制
/**
 * @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、依赖引入

代码语言:javascript复制
        <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、生成代码

代码语言:javascript复制
    /**
     * <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配制修改

代码语言:javascript复制
    @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 ={“”})即可显示对应接口

0 人点赞