1、首先写pom.xml进行引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.68</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
2、将打包的build标签写入
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
3、创建两套环境,dev和test
spring:
profiles:
active: dev
-
dev环境
server:
port: 8000
spring:
redis:
host: 127.0.0.1
port: 6379
lettuce:
pool:
max-active: 128
max-idle: 10
min-idle: 2
max-wait: -1
main:
allow-circular-references: true
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/c4?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true
username: root
password: DXZDXZ4811
type: com.zaxxer.hikari.HikariDataSource
hikari:
minimum-idle: 8
maximum-pool-size: 32
auto-commit: true
idle-timeout: 30000
pool-name: DatebookHikariCP
max-lifetime: 1800000
connection-timeout: 10000
connection-test-query: SELECT 1
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.dxz.entity
global-config:
banner: false
db-config:
id-type: input
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
returnPageInfo: check
-
test环境
server:
port: 8000
spring:
redis:
host: redis
port: 6379
lettuce:
pool:
max-active: 128
max-idle: 10
min-idle: 2
max-wait: -1
main:
allow-circular-references: true
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql:3306/c4?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true
username: root
password: DXZDXZ4811
type: com.zaxxer.hikari.HikariDataSource
hikari:
minimum-idle: 8
maximum-pool-size: 32
auto-commit: true
idle-timeout: 30000
pool-name: DatebookHikariCP
max-lifetime: 1800000
connection-timeout: 10000
connection-test-query: SELECT 1
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.dxz.entity
global-config:
banner: false
db-config:
id-type: input
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
returnPageInfo: check
4、利用mybatis-plus的快速生成代码器进行快速生成代码
-
代码生成器
public class MyQuickCode {
public static void main(String[] args) {
AutoGenerator ag = new AutoGenerator();
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
System.out.println(projectPath);
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("fmdxz");
gc.setOpen(false);
gc.setFileOverride(true);
gc.setServiceName("%sService");
gc.setIdType(IdType.ID_WORKER_STR);
gc.setDateType(DateType.ONLY_DATE);
ag.setGlobalConfig(gc);
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/c4?useUnicode=true&characterEncoding=UTF-8" +
"&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull" +
"&allowMultiQueries=true");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("DXZDXZ4811");
dsc.setDbType(DbType.MYSQL);
ag.setDataSource(dsc);
PackageConfig pc = new PackageConfig();
pc.setModuleName(null);
pc.setParent("com.dxz");
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
ag.setPackageInfo(pc);
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("comments","url");
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
ag.setStrategy(strategy);
ag.execute();
}
}
5、将mybatis-plus的配置填写完成
6、将redis的配置写好
-
redis配置
/**
* @author Administrator
* @version 1.0
* @package com.dxz.config
* @class RedisConfig
* @date 2022/1/28 14:14
*/
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.lettuce.pool.max-active}")
private Integer maxActive;
@Value("${spring.redis.lettuce.pool.max-idle}")
private Integer maxIdle;
@Value("${spring.redis.lettuce.pool.min-idle}")
private Integer minIdle;
@Value("${spring.redis.lettuce.pool.max-wait}")
private Long maxWait;
/**
* @Description: 获取redis连接工厂
* @Author: fmdxz
* @Date: 2022/1/21
*/
@Bean
LettuceConnectionFactory redisConnectionFactory(){
//连接池的配置
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();//新建一个连接池配置
poolConfig.setMaxTotal(maxActive);
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(minIdle);
poolConfig.setMaxWaitMillis(maxWait);
//根据自己写的连接池的配置进行新建一个lettuce连接池配置
LettucePoolingClientConfiguration lettucePoolingClientConfiguration =
LettucePoolingClientConfiguration.builder().poolConfig(poolConfig).build();
//新建一个redis配置
RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration();
redisConfig.setHostName(host);
redisConfig.setPort(port);
//配置redis连接密码,若没有密码则可以直接注释
//redisConfig.setPassword(RedisPassword.of(password.toCharArray()));
//返回一个新的lettuce连接工厂
return new LettuceConnectionFactory(redisConfig,lettucePoolingClientConfiguration);
}
@Bean
public RedisTemplate<String,Object> myRedisTemplate(LettuceConnectionFactory redisConnectionFactory){
//新建一个template模板
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
//将上面创建好的lettuce工厂导入
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer());// key序列化
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());// value序列化
template.setHashKeySerializer(new GenericJackson2JsonRedisSerializer());// Hash key序列化
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());// Hash value序列化
return template;
}
}
7、含有日期和结果的工具类
-
日期工具类
@Component
public class DateUtil {
private static DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
protected static Logger logger = LoggerFactory.getLogger(DateUtil.class);
public static String parse(final Date date) {
if (date == null) {
return null;
}
return sdf.format(date);
}
public static String now() {
return sdf.format(new Date());
}
public static Date format(final String date) {
try {
return sdf.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
-
结果工具类
public abstract class ResultUtil {
private static JSONObject results = null;
public static JSONObject success() {
results = new JSONObject();
results.put("code", Constant.SUCCESS_CODE);
results.put("data", new JSONObject());
results.put("msg", "");
return results;
}
public static JSONObject success(final int code, final JSONObject data) {
results = new JSONObject();
results.put("code", code);
results.put("data", data);
results.put("msg", "");
return results;
}
public static JSONObject content(final JSONObject data) {
results = new JSONObject();
results.put("code", Constant.SUCCESS_CODE);
results.put("data", data);
results.put("msg", "");
return results;
}
public static JSONObject failure(final int code, final String msg) {
results = new JSONObject();
results.put("code", code);
results.put("data", new JSONObject());
results.put("msg", msg);
return results;
}
}
8、关于Redis的接口类和服务类
-
接口类
@Component
public class RedisMapper {
@Autowired
@Qualifier("myRedisTemplate")
private RedisTemplate<String,Object> redisTemplate;
public void set(String key,Object value){
try{
ValueOperations<String,Object> stringObjectValueOperations = redisTemplate.opsForValue();
stringObjectValueOperations.set(key,value);
}catch (Exception e){
throw new RuntimeException(e);
}
}
public void set(String key, Object value, long expired){
try{
ValueOperations<String,Object> stringObjectValueOperations = redisTemplate.opsForValue();
stringObjectValueOperations.set(key,value,expired, TimeUnit.SECONDS);
}catch (Exception e){
throw new RuntimeException(e);
}
}
public Object get(String key){
try{
ValueOperations<String,Object> stringObjectValueOperations = redisTemplate.opsForValue();
return stringObjectValueOperations.get(key);
}catch (Exception e){
throw new RuntimeException(e);
}
}
}
-
服务接口类
public interface RedisService {
void set(String key,Object value);
void set(String key,Object value,long expired);
<T> T get(String key);
}
-
服务实现类
@Service
public class RedisServiceImpl implements RedisService {
@Resource
RedisMapper redisMapper;
@Override
public void set(String key, Object value) {
redisMapper.set(key,value);
}
@Override
public void set(String key, Object value, long expired) {
redisMapper.set(key,value,expired);
}
@Override
public <T> T get(String key) {
Object o = redisMapper.get(key);
return (T) o;
}
}