springboot+mybatis+mysql项目
大致上的代码结构是
@RestController
class ApiClass{Logger logger = LoggerFactory.getLogger("log");
@Autowired
ApiService apiService;
@RequestMapping(value = "/api")
public String doApi{
logger.info("HTTP 请求 ");
String result = apiService.doService();
。。。
return ResponseUtil.jsonSuccess(result);
}
}
@Service
class ApiService{@Transactional
String doService(){
logger.debug("测试 1 处");
。。。
return "xxxx";
}
}
我有三个运行环境
1 本地IDE
2 测试机器
3 部署机器
其中在3的部署环境下:
第一次请求
2017-10-12 16:24:22,407 INFO - HTTP 请求
2017-10-12 16:26:02,943 DEBUG - 测试 1 处
以后的请求:
2017-10-12 17:28:48,323 INFO - HTTP 请求
2017-10-12 17:28:48,324 DEBUG - 测试 1 处
第一次请求从 controller 跳转到 service 都花了1分半多 而之后的请求没这样
打的spring日志如下:中间的线条是我加的
2017-10-13 11:28:00,825 [http-nio-8070-exec-1] DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - Creating new transaction with name [com.eversec.centertool.modules.woapi.service.WoApiService.getActivityVo]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly; ''
2017-10-13 11:29:41,342 [http-nio-8070-exec-1] DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - Acquired Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@5d05f6d3]]] for JDBC transaction
2017-10-13 11:29:41,347 [http-nio-8070-exec-1] DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Setting JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@5d05f6d3]]] read-only
2017-10-13 11:29:41,347 [http-nio-8070-exec-1] DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - Switching JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@5d05f6d3]]] to manual commit
而在本地IDE运行的话,第一次请求正常,延时在0.3秒,之后请求正常
在测试linux机器上,第一次请求大概要花0.6秒,之后请求正常
本地IDE和linux机器用的是同一数据库
部署机用的是另一个数据库
而在部署机上,第一次请求竟然要1分半多,之后请求正常
而部署机器上的其他服务没这个问题
为何这么奇怪?