赞
踩
近日一个项目使用了shardingsphere后出现 java.lang.UnsupportedOperationException: Cannot support database type 'MySQL'
,
重点是在dev-pre环境中无法出现这个问题,而是在prod环境中会发生,且prod也不是100%发生,
当流量过大时会发生这个问题,这个项目之前没有引入查询DB的操作,近日因为需求引入了DB查询,前同事写代码随便乱入各种多线程,虽然最终问题得以解决,还是因为怀疑乱用多线程导致。
Spring Boot项目在 main 方法启动时,增加一个 NewInstanceServiceLoader.register(SQLParserConfiguration.class);
@SpringBootApplication
@EnableAsync
@EnableScheduling
@MapperScan(basePackages = {"XXXXXXX"})
@EnableAutoConfiguration(exclude = {ElasticsearchAutoConfiguration.class, RestClientAutoConfiguration.class})
public class StartEngine {
public static void main(String[] args) {
NewInstanceServiceLoader.register(SQLParserConfiguration.class);
SpringApplication.run(StartEngine.class, args);
}
}
非spring boot项目使用
@component @slf4j public class ApplicationStartedListener implements ApplicationListener { @OverRide public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) { onApplicationStarted(applicationStartedEvent); } @SneakyThrows private void onApplicationStarted(ApplicationStartedEvent event) { String applicationName = event.getApplicationContext().getApplicationName(); log.info("应用【{}】已启动....", applicationName); NewInstanceServiceLoader.register(SQLParserConfiguration.class); log.info("已加载{}", "SQLParserConfiguration"); } }
总之,加上 NewInstanceServiceLoader.register(SQLParserConfiguration.class);
这个就对了。
主要参考这两个issues:
这里还提到了使用多线程API parallelStream 也会导致这个问题等等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。