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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 4、 后台服务配制以及代码生成[木字楠博客]

@[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 ={""})即可显示对应接口

在这里插入图片描述

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL 数据库 Windows
若依代码生成详细教程
我觉得若依官方的代码生成教程过于简单,网上的教程很多连个效果图都没有。 本文要达到的效果如下:[学生管理] 下有个 [学生信息] 菜单,里面可以增删改查。
5162 0
若依代码生成详细教程
|
4月前
|
小程序 API 容器
ProFlow 流程编辑器框架问题之查看ProFlow的开源地址和官网链接如何解决
ProFlow 流程编辑器框架问题之查看ProFlow的开源地址和官网链接如何解决
128 0
|
5月前
|
开发框架 前端开发 JavaScript
若依怎样看开发文档,域名搜这个就行ruoyi.vip,建链接点击在线文档,有前端手册和后端手册,若依文档里有项目扩展,项目扩展有大量的开源的软件
若依怎样看开发文档,域名搜这个就行ruoyi.vip,建链接点击在线文档,有前端手册和后端手册,若依文档里有项目扩展,项目扩展有大量的开源的软件
|
6月前
|
NoSQL Java Redis
若依如何使用(基本环境的配置)
若依如何使用(基本环境的配置)
|
7月前
|
小程序 JavaScript Java
阅读小程序|基于微信阅读网站小程序的系统设计与实现(源码+数据库+文档)
阅读小程序|基于微信阅读网站小程序的系统设计与实现(源码+数据库+文档)
95 0
【博客项目】—用户修改功能(十一)
【博客项目】—用户修改功能(十一)
|
7月前
|
开发工具 数据安全/隐私保护 Python
基于Python开发的图片批量处理器(源码+可执行程序+程序配置说明书+程序使用说明书)
基于Python开发的图片批量处理器(源码+可执行程序+程序配置说明书+程序使用说明书)
118 0
|
小程序 程序员 开发工具
微信web开发者工具无法打开的六种解决方法
微信web开发者工具无法打开的六种解决方法
979 0
|
数据库 数据安全/隐私保护
5、后台基础权限框架搭建实现[木字楠博客]
5、后台基础权限框架搭建实现[木字楠博客]
89 0
5、后台基础权限框架搭建实现[木字楠博客]
|
数据安全/隐私保护
修改vscode caipeiyu.writeCnblog ,简化博客发布
修改vscode caipeiyu.writeCnblog ,简化博客发布 1. 安装caipeiyu.writeCnblog vscode的博客园文章发布插件WriteCnblog : https://marketplace.
1140 0