官方命令执行报错
docker exec showdoc php /var/www/html/index.php home/common/repasswd,没辙,就通过下边方式重置吧
1. 主要思路
showdoc 默认使用的 sqlite 数据库,重置密码,降维到修改数据库数据。
-
创建一个新用户,拿到新用户加密后的密码
-
修改管理员的密码
官方命令执行报错
docker exec showdoc php /var/www/html/index.php home/common/repasswd,没辙,就通过下边方式重置吧
showdoc 默认使用的 sqlite 数据库,重置密码,降维到修改数据库数据。
创建一个新用户,拿到新用户加密后的密码
修改管理员的密码
结合项目体验一把,虽然大部分业务场景是用不到的,但是提前踩踩坑、熟悉熟悉套路,还是有必要的。
spring-boot 版本 2.4.0
短链接项目 short-url
不同于官方提供的demo,以 order、order_item 这样的业务,根据 user_id (整数类型) 分库,order_id (整数类型) 分表;
short-url 项目很简单,只有一个表 dev_short_url,根据短链接字段url分库,根据主键ID分表。
依赖
官方提供了结合 Prometheus 的方案,如果想简单看下监控,可继续看下文。
@Api(tags = "监控-Caffeine")
@RestController
@RequestMapping("monitor/caffeine")
public class MonitorCaffeineController {
@Resource
private CacheManager caffeine;
@GetMapping("cacheNames")
@ApiOperation("所有缓存name")
public Collection`<String>` cacheNames() {
return caffeine.getCacheNames();
}
@GetMapping("stats")
@ApiOperation("根据缓存name查询缓存监控信息")
public Map`<String, Object>` stats(@RequestParam String cacheName) {
CaffeineCache caffeineCache = (CaffeineCache) caffeine.getCache(cacheName);
CacheStats stats = CacheStats.empty();
if (caffeineCache != null) {
stats = caffeineCache.getNativeCache().stats();
}
Map`<String, Object>` map = new HashMap<>(16);
map.put("请求次数", stats.requestCount());
map.put("命中次数", stats.hitCount());
map.put("未命中次数", stats.missCount());
map.put("加载成功次数", stats.loadSuccessCount());
map.put("加载失败次数", stats.loadFailureCount());
map.put("加载失败占比", stats.loadFailureRate());
map.put("加载总耗时", stats.totalLoadTime());
map.put("回收总次数", stats.evictionCount());
map.put("回收总权重", stats.evictionWeight());
return map;
}
}
系统 A 调用系统 B 执行数据同步,系统 B 返回了错误提示,系统 A 需要将前边保存的回滚掉,同时把错误信息向上抛。
@Service("noteService")
public class NoteServiceImpl implements NoteService {
@Resource
private SearchService searchService;
@Transactional(rollbackFor = Throwable.class)
@Override
public CommonResponse`<NoteEntity>` save(NoteEntity note) {
// 一系列 DB 操作
try {
searchService.sync(note);
} catch (Exception e) {
e.printStackTrace();
}
return CommonResponse.success(entity);
}
}
Spring MVC 渐渐远去了,但是遇到问题还是要 KILL 的
配置型事务
通过 AOP 为符合表达式的方法统一加上事务
注解式事务
直接在Service方法上加上事务
@Transactional(rollbackFor = Throwable.class)
看源码知道单例池就是一个 Map<beanName, object>
DefaultSingletonBeanRegistry#singletonObjects

Spring 源码学习,一方面提升读源码能力、向大师学习;一方面便于更深入地使用、拓展 Spring。
系统地学习下,更好地理解 Dubbo + ZK,Kafka + ZK 等等
是一种基于观察者模式的分布式服务管理框架,他负责存储和管理大家都关心的数据,然后接受观察者的注册,
一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的
反应,从而实现集群中类似Master/Slave管理模式
它是个类文件系统,每个
znode目录节点都可以正常地增加、删除,不一样的是znode可以保存数据。默认每个
znode只能保存1MB数据。如需扩展zkEnv.sh后边加上-Djute.maxbuffer=10240000。
bootstrap.yml或者bootstrap.properties中spring.cloud.nacos.config.server-addr=127.0.0.1:8848spring.cloud.nacos.config.file-extension=yaml
Swagger [2.10+)支持 Webflux。之前为了使用支持Webflux的Swagger,使用了快照版3.0.0-SNAPSHOT,从生产来讲还是不安全的。
<properties>
<swagger.version>2.10.5</swagger.version>
</properties>