创建媒资管理工程,分为三个子模块

learning-online-content
├── learning-online-content-api
├── learning-online-content-model
└── learning-online-content-service

创建工程结构

learning-online-content-model模块的pom文件中添加如下依赖:

pom.xml
<dependencies>
<dependency>
<groupId>com.swx</groupId>
<artifactId>learning-online-base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>

learning-online-content-service模块的pom文件中添加如下依赖:

pom.xml
<dependencies>
<dependency>
<groupId>com.swx</groupId>
<artifactId>learning-online-content-model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.swx</groupId>
<artifactId>learning-online-message-sdk</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
</dependency>
<!-- Freemarker 模版技术 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!-- Feign远程调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
<!-- Feign支持文件传输 -->
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form</artifactId>
<version>3.8.0</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
</dependency>
<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>

learning-online-content-api模块的pom文件中添加如下依赖:

pom.xml
<dependencies>
<dependency>
<groupId>com.swx</groupId>
<artifactId>learning-online-content-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- log4j日志 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
</dependencies>

创建启动类,在learning-online-content-api工程的com.swx.content包下创建启动类ContentApplication,内容如下:

ContentApplication
@SpringBootApplication
@EnableTransactionManagement
@EnableFeignClients(basePackages = {"com.swx.content.client"})
public class ContentApplication {
public static void main(String[] args) {
SpringApplication.run(ContentApplication.class, args);
}
}

项目配置信息,在learning-online-content-api工程的resources下创建bootstrap.yml

bootstrap.yml
spring:
application:
name: content-api
cloud:
nacos:
discovery:
server-addr: xxx.xxx.xxx.xxx:8848
namespace: learning-online-dev
group: learning-online-project
config:
server-addr: xxx.xxx.xxx.xxx:8848
namespace: learning-online-dev
group: learning-online-project
file-extension: yaml
refresh-enabled: true
extension-configs:
- data-id: content-service-${spring.profiles.active}.yaml
group: learning-online-project
refresh: true
shared-configs:
- data-id: logging-${spring.profiles.active}.yaml
group: learning-online-common
refresh: true
- data-id: freemarker-config-${spring.profiles.active}.yaml
group: learning-online-common
refresh: true
- data-id: feign-${spring.profiles.active}.yaml
group: learning-online-common
refresh: true
- data-id: redis-${spring.profiles.active}.yaml
group: learning-online-common
refresh: true
profiles:
active: dev

日志配置,在learning-online-content-api工程的resources下创建log4j2-dev.xml

log4j2-dev.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="180" packages="">
<properties>
<property name="logdir">logs</property>
<property name="PATTERN">%date{YYYY-MM-dd HH:mm:ss,SSS} %level [%thread][%file:%line] - %msg%n%throwable</property>
</properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${PATTERN}"/>
</Console>

<RollingFile name="ErrorAppender" fileName="${logdir}/error.log"
filePattern="${logdir}/$${date:yyyy-MM-dd}/error.%d{yyyy-MM-dd-HH}.log" append="true">
<PatternLayout pattern="${PATTERN}"/>
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>

<RollingFile name="DebugAppender" fileName="${logdir}/info.log"
filePattern="${logdir}/$${date:yyyy-MM-dd}/info.%d{yyyy-MM-dd-HH}.log" append="true">
<PatternLayout pattern="${PATTERN}"/>
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>

<!--异步appender-->
<Async name="AsyncAppender" includeLocation="true">
<AppenderRef ref="ErrorAppender"/>
<AppenderRef ref="DebugAppender"/>
</Async>
</Appenders>

<Loggers>
<!--过滤掉spring和mybatis的一些无用的debug信息
<logger name="org.springframework" level="INFO">
</logger>
<logger name="org.mybatis" level="INFO">
</logger>-->
<logger name="cn.itcast.wanxinp2p.consumer.mapper" level="DEBUG">
</logger>

<logger name="springfox" level="INFO">
</logger>
<logger name="org.apache.http" level="INFO">
</logger>
<logger name="com.netflix.discovery" level="INFO">
</logger>

<logger name="RocketmqCommon" level="INFO" >
</logger>

<logger name="RocketmqRemoting" level="INFO" >
</logger>

<logger name="RocketmqClient" level="WARN">
</logger>

<logger name="org.dromara.hmily" level="WARN">
</logger>

<logger name="org.dromara.hmily.lottery" level="WARN">
</logger>

<logger name="org.dromara.hmily.bonuspoint" level="WARN">
</logger>

<!--OFF 0-->
<!--FATAL 100-->
<!--ERROR 200-->
<!--WARN 300-->
<!--INFO 400-->
<!--DEBUG 500-->
<!--TRACE 600-->
<!--ALL Integer.MAX_VALUE-->
<Root level="DEBUG" includeLocation="true">
<AppenderRef ref="AsyncAppender"/>
<AppenderRef ref="Console"/>
<AppenderRef ref="DebugAppender"/>
</Root>
</Loggers>
</Configuration>

基础代码

实体类

使用代码生成工具生成lo_content表的实体类,将其拷贝到learning-online-content-model工程的com.swx.content.model.po包下,暂时所需实体类如下:

  • CourseBase.java
  • CourseCategory.java
  • CourseMarket.java
  • CoursePublish.java
  • CoursePublishPre.java
  • CourseTeacher.java
  • Teachplan.java
  • TeachplanMedia.java

Mapper层

将代码生成的所有Mapper.java文件拷贝到learning-online-content-service工程下的com.swx.content.mapper包下。

将代码生成的所有Mapper.xml文件拷贝到learning-online-content-service工程下的resources/mapper目录下。

Service层

将代码生成的所有Service和ServiceImpl文件拷贝到learning-online-content-service工程下的com.swx.content.service包下。