@GetMapping("/info")
public String info(Article article) throws Exception {
return ParamsConfig.toJson(article);
}
// 添加一个敏感词然后再去观察是否生效 http://localhost:8080/add
// 观察【猫】这个词被过滤了 http://localhost:8080/info?content=%E7%8E%8B%E5%AE%89%E7%9F%B3%E6%9C%89%E4%B8%80%E5%8F%AA%E7%8C%ABtomcat%E6%B1%A4%E5%A7%86%E5%87%AF%E7%89%B9&see=1&size=6
// 嵌套敏感词处理 http://localhost:8080/info?content=%E7%8E%8B%E7%8C%AB%E5%AE%89%E7%9F%B3%E6%9C%89%E4%B8%80%E5%8F%AA%E7%8C%ABtomcat%E6%B1%A4%E5%A7%86%E5%87%AF%E7%89%B9&see=1&size=6
// 多层嵌套敏感词 http://localhost:8080/info?content=%E7%8E%8B%E7%8E%8B%E7%8C%AB%E5%AE%89%E7%9F%B3%E5%AE%89%E7%9F%B3%E6%9C%89%E4%B8%80%E5%8F%AA%E7%8C%ABtomcat%E6%B1%A4%E5%A7%86%E5%87%AF%E7%89%B9&see=1&size=6
@GetMapping("/add")
public String add() throws Exception {
Long id = 3L;
if (null == sensitiveWordsMapper.selectById(id)) {
System.err.println("插入一个敏感词:" + sensitiveWordsMapper.insert(new SensitiveWords(id, "猫")));
// 插入一个敏感词 , 刷新算法引擎敏感词
SensitiveWordsProcessor.reloadSensitiveWords();
}
return "ok";
}
// 测试访问下面地址观察控制台( 请求json参数 )
// idea 执行 resources 目录 TestJson.http 文件测试
@PostMapping("/json")
public String json(@RequestBody Article article) throws Exception {
return ParamsConfig.toJson(article);
}
}
2.5 DDL 数据结构自动维护
解决升级表结构初始化 , 版本发布更新 SQL 维护问题 , 目前支持 MySQL、PostgreSQL 。
@Component
public class PostgresDdl implements IDdl {
/**
* 执行 SQL 脚本方式
*/
@Override
public List<String> getSqlFiles() {
return Arrays.asList(
// 内置包方式
"db/tag-schema.sql",
// 文件绝对路径方式
"D:\db\tag-data.sql"
);
}
}
不仅仅可以固定执行 , 也可以动态执行!!
ddlScript.run(new StringReader("DELETE FROM user;n" +
"INSERT INTO user (id, username, password, sex, email) VALUESn" +
"(20, 'Duo', '123456', 0, 'Duo@baomidou.com');"));
它还支持多数据源执行!!!
@Component
public class MysqlDdl implements IDdl {
@Override
public void sharding(Consumer<IDdl> consumer) {
// 多数据源指定 , 主库初始化从库自动同步
String group = "mysql";
ShardingGroupProperty sgp = ShardingKey.getDbGroupProperty(group);
if (null != sgp) {
// 主库
sgp.getMasterKeys().forEach(key -> {
ShardingKey.change(group + key);
consumer.accept(this);
});
// 从库
sgp.getSlaveKeys().forEach(key -> {
ShardingKey.change(group + key);
consumer.accept(this);
});
}
}
/**
* 执行 SQL 脚本方式
*/
@Override
public List<String> getSqlFiles() {
return Arrays.asList("db/user-mysql.sql");
}
}
2.6 动态多数据源主从自由切换
@Sharding 注解使数据源不限制随意使用切换 , 你可以在 mapper 层添加注解 , 按需求指哪打哪!!
@Mapper
@Sharding("mysql")
public interface UserMapper extends BaseMapper<User> {
@Sharding("postgres")
Long selectByUsername(String username);
}
你也可以自定义策略统一调兵遣将
@Component
public class MyShardingStrategy extends RandomShardingStrategy {
/**
* 决定切换数据源 key {@link ShardingDatasource}
*
* @param group 动态数据库组
* @param invocation {@link Invocation}
* @param sqlCommandType {@link SqlCommandType}
*/
@Override
public void determineDatasourceKey(String group, Invocation invocation, SqlCommandType sqlCommandType) {
// 数据源组 group 自定义选择即可 , keys 为数据源组内主从多节点 , 可随机选择或者自己控制
this.changeDatabaseKey(group, sqlCommandType, keys -> chooseKey(keys, invocation));
}
推荐阅读
- 化妆|杨幂又在引领潮流!松紧发带+乐福鞋,成为一周标配
- 学会了MybatisPlus,代码开发效率提高了10倍
- 江疏影|新时代律政俏佳人上线!刘敏涛江疏影携手搞事业《女士的法则》大爽文来袭
- SpringBoot整合MybatisPlus基本的增删改查,保姆级教程
- SpringBoot整合MybatisPlus数据自动填充
- MybatisPlus中实体类属性对应枚举类实现
- 用了MybatisPlus后,我很久没有手写sql了
- 上饶又一网红打卡地,首家搞事情的辰色酒馆
- iPhone|iPhone 14细节曝光 摄像头留遗憾:苹果供应商近10亿元搞事
- 梦到喜欢的人离婚了,然后和自己在一起了 梦到离婚的人又在一起
