mybatis的source文件mysql.properties文件修改后,在不需要重启的情况下,重新加载properties文件创建连接池;
场景:项目换数据源或在启动的时候,做引导页,修改配置信息。
@Autowired
ConfigurableWebApplicationContext configurableWebApplicationContext;
@RequestMapping(value = "/setMysqlConfig", method = RequestMethod.POST)
public Result setMysqlConfig(@RequestBody MysqlConfig mysqlConfig, HttpServletRequest request) {
if (mysqlConfig == null) {
return ResultUtil.failed(ErrorCode.PARAMETER_ERROR);
}
//连接测试
boolean connect = bootPageService.connectEmsMysql(mysqlConfig);
if (!connect) {
return ResultUtil.failed(ErrorCode.BOOTPAGE_TEST_CONNECT_ERROR);
}
try {
//修改properties文件
bootPageService.setEmsMysalConfig(mysqlConfig);
} catch (Exception e) {
logger.error(e.getMessage(), e);
return ResultUtil.failed(ErrorCode.SYSTEM_EXCEPTION);
}
/** webSocket server close 省略**/
//重新加载元数据
XmlWebApplicationContext context = (XmlWebApplicationContext) WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());
context.refresh();
//重新load所有bean
configurableWebApplicationContext.refresh();
return ResultUtil.success(connect);
}
经尝试,只refresh元数据是不行的,还得重新refresh所有bean,两个refresh相当与重启项目