Maison > Java > javaDidacticiel > Comment résoudre le délai d'exécution SQL de la configuration Springboot mybatis

Comment résoudre le délai d'exécution SQL de la configuration Springboot mybatis

WBOY
Libérer: 2023-05-15 18:10:25
avant
3000 Les gens l'ont consulté

Lorsque certains SQL sont bloqués pour des raisons inconnues, afin de ne pas affecter le fonctionnement du service d'arrière-plan, nous souhaitons ajouter une limite de temps d'exécution au SQL et lancer une exception après le délai d'attente pour garantir que le thread d'arrière-plan ne sera pas bloqué en raison d'une congestion SQL.

1. Configuration globale YML

Une source de données unique est OK, mais elle échouera lors de l'utilisation de plusieurs sources de données

Comment résoudre le délai dexécution SQL de la configuration Springboot mybatis

2. La configuration de la classe de configuration Java

lève avec succès une exception de délai d'attente.

 import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 
import javax.sql.DataSource;
 
@Configuration
@MapperScan(basePackages = "top.oldmoon.bill.mapper", sqlSessionFactoryRef = "sqlSessionFactory")
public class DBConfiguration {
 
    @Primary
    @Bean(name = "dataSource")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource gfDataSource() {
        DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
        return dataSource;
    }
 
    @Primary
    @Bean(name = "sqlSessionFactory")
    public SqlSessionFactory gfSqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
 
        factoryBean.setDataSource(dataSource);
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/*.xml"));
 
        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
        configuration.setDefaultStatementTimeout(1); // 设置sql执行超时时间::(秒)
        factoryBean.setConfiguration(configuration);
        SqlSessionFactory sqlSessionFactory = factoryBean.getObject();
        return sqlSessionFactory;
    }
 
    @Primary
    @Bean(name = "transactionManager")
    public DataSourceTransactionManager gfTransactionManager(@Qualifier("dataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
 
    @Primary
    @Bean(name = "sqlSessionTemplate")
    public SqlSessionTemplate gfSqlSessionTemplate(
            @Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
        return sqlSessionTemplate;
    }
}
Copier après la connexion

Vendredi 12 mars 15:56:31 CST 2021--方法开始执行!!
2021-03-12 15:56:38.508 ERREUR 24484 --- [nio-8111-exec-3] o.api.advice .ExceptionHandlerAdvice      : 未知异常:
### Erreur lors de l'interrogation de la base de données.  Cause : com.mysql.cj.jdbc.exceptions.MySQLTimeoutException : instruction annulée en raison d'un délai d'attente ou d'une demande du client
### L'erreur peut exister dans le fichier [E:space-persionalgitoldmoon-frameoldmoon-app-billoutproductionresourcesmybatisUserMapper.xml]
## # L'erreur peut impliquer defaultParameterMap
### L'erreur s'est produite lors de la définition des paramètres
### SQL : select * from V_BGD_PWGM_PB_21
### Cause : com.mysql.cj.jdbc.exceptions.MySQLTimeoutException : instruction annulée en raison d'un délai d'attente ou demande du client
 ; Relevé annulé en raison d'un délai d'attente ou d'une demande du client ; L'exception imbriquée est com.mysql.cj.jdbc.exceptions.MySQLTimeoutException : instruction annulée en raison d'un délai d'attente ou d'une demande du client
org.springframework.dao.QueryTimeoutException : 
### Erreur lors de l'interrogation de la base de données.  Cause : com.mysql.cj.jdbc.exceptions.MySQLTimeoutException : instruction annulée en raison d'un délai d'attente ou d'une demande du client
### L'erreur peut exister dans le fichier [E:space-persionalgitoldmoon-frameoldmoon-app-billoutproductionresourcesmybatisUserMapper.xml]
## # L'erreur peut impliquer defaultParameterMap
### L'erreur s'est produite lors de la définition des paramètres
### SQL : select * from V_BGD_PWGM_PB_21
### Cause : com.mysql.cj.jdbc.exceptions.MySQLTimeoutException : instruction annulée en raison d'un délai d'attente ou demande du client
 ; Relevé annulé en raison d'un délai d'attente ou d'une demande du client ; L'exception imbriquée est com.mysql.cj.jdbc.exceptions.MySQLTimeoutException : déclaration annulée en raison d'un délai d'attente ou d'une demande du client
    sur org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:76)
    sur org.springframework.jdbc .support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)
    sur org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79)
    sur org.mybatis.spring.MyBatisExceptionTranslator.trans lateExceptionIfPossible(MyBatisExceptionTranslator.java:73 )
    sur org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
    sur com.sun.proxy.$Proxy63.selectList(Source inconnue)
    sur org.mybatis.spring.SqlSessionTemplate.selectList(S qlSessionModèle .java:230)
    sur org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:139)
    sur org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:76)
    sur org.apache .ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
    at com.sun.proxy.$Proxy69.testTimeOut(Source inconnue)
    at top.oldmoon.bill.service.impl.UserServiceImpl.testTimeOut(UserServiceImpl.java :32)
    sur top.oldmoon.bill.contoller.UserController.testTimeOut(UserController.java:64)
    sur sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sur sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java : 62)
    sur sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    sur java.lang.reflect.Method.invoke(Method.java:498)
    sur org.springframework.web.method.support.InvocableHandlerMethod. doInvoke(InvocableHandlerMethod.java:197)
    sur org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)
    sur org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle ( ServletInvocableHandlerMethod.java:106)
    sur org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)
    sur org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter. handleInternal(RequestMappingHandlerAdapter.java:808)
    sur org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    sur org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java: 1061)
    sur org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961)
    sur org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    sur org.springframework.web. servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    sur javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
    sur org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    sur javax.servlet.http.HttpServlet.service(HttpServlet .java:733)
    sur org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    sur org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    sur org.apache .tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    sur org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    sur org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166)
    sur com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
    sur org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
sur org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    sur org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    sur org.springframework.web.filter.OncePerRequestFilter .doFilter(OncePerRequestFilter.java:119)
    sur org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    sur org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
sur org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
    sur org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    sur org.apache.catalina.core.ApplicationFilterChain .internalDoFilter(ApplicationFilterChain.java:193)
    sur org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    sur org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
sur org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    sur org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    sur org.apache.catalina.core.ApplicationFilterChain .doFilter(ApplicationFilterChain.java:166)
    sur org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    sur org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
sur org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
    sur org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
    sur org.apache.catalina.valves.ErrorReportValve .invoke(ErrorReportValve.java:92)
    sur org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    sur org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
sur org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
    sur org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    sur org.apache.coyote.AbstractProtocol$ConnectionHandler.process (AbstractProtocol.java:888)
    sur org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
    sur org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java :49)
    sur java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    sur java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    sur org.apache.tomcat.util .threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
Causé par : com.mysql.cj.jdbc.exceptions.MySQLTimeoutException : instruction annulée en raison pour un délai d'attente ou une demande du client
    sur com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:113)
    sur com.mysql.cj.jdbc.StatementImpl.checkCancelTimeout(StatementImpl.java:2191)
    sur com .mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1028)
    sur com.mysql.cj.NativeSession.execSQL(NativeSession.java:1075)
    sur com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal (ClientPreparedStatement.java:930)
at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370)
at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3409)
at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)
at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3407)
at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)
at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:498)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:63)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:326)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
... 61 more

{
    "resultCode": "2",
    "resultMsg": "未知异常,请联系管理员!",
    "token": null,
    "resultInfo": "\r\n### Error querying database.  Cause: com.mysql.cj.jdbc.exceptions.MySQLTimeoutException: Statement cancelled due to timeout or client request\r\n### The error may exist in file [E:\\space-persional\\git\\oldmoon-frame\\oldmoon-app-bill\\out\\production\\resources\\mybatis\\UserMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: select * from V_BGD_PWGM_PB_21\r\n### Cause: com.mysql.cj.jdbc.exceptions.MySQLTimeoutException: Statement cancelled due to timeout or client request\n; Statement cancelled due to timeout or client request; nested exception is com.mysql.cj.jdbc.exceptions.MySQLTimeoutException: Statement cancelled due to timeout or client request"
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal