以连续的两次访问数据库为例: //第一次 Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4474cc30] was not registered for synchronization because synchronization is not active JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@3881726d] will not be managed by Spring //select * from dual Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4474cc30] //第二次 Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@151d520e] was not registered for synchronization because synchronization is not active JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@3881726d] will not be managed by Spring //select * from dual Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@151d520e]
可以看到每次访问数据库仍然会新建一个SqlSession。dataSource配置已经确保无误。mybatis中也配置了。不知道还有没有其他需要配置的地方。
mysql-connector-java:6.0.5 druid:1.0.29 org.springframework:4.3.6.RELEASE mybatis-spring:1.3.1 mybatis :3.4.2 tomcat:8.5.11 jdk:8 谢谢
原提问者GitHub用户changdy
根据你提供的信息,每次访问数据库都会新建一个SqlSession
,即使已经配置了连接池。这可能是由于配置中存在一些问题导致的。
请确保按照以下建议进行配置和检查:
1. 确保正确配置了连接池。在Spring配置文件中,检查数据源(dataSource
)的相关配置项,确保它指向正确的连接池实例(例如Druid连接池)。确保连接池的相关配置(如最大连接数、最小连接数等)符合需求。
2. 检查MyBatis的配置。确认MyBatis的配置文件中是否正确配置了与连接池相关的属性。特别要注意SqlSessionFactoryBean
的dataSource
属性,它应该引用正确的连接池数据源。
3. 检查事务管理器的配置。如果你使用了事务,确保事务管理器(例如DataSourceTransactionManager
)被正确地配置,并且事务注解(@Transactional
)也被正确地应用在需要事务管理的方法上。
4. 检查代码中的错误。确保在访问数据库时,正确地使用了SqlSession
对象。遵循正确的MyBatis用法,包括正确的打开、使用和关闭SqlSession
。
如果以上方法都没有解决问题,建议查阅相关文档和社区资源,寻找类似问题和解决方案的建议。
使用MyBatis时,如果每次访问数据库都新建一个SqlSession,可能会导致资源的浪费和性能的下降。为了避免这个问题,您可以将SqlSession的创建和释放交给连接池管理,以便更好地利用连接资源。
如果您使用的是Druid连接池,可以通过配置SqlSessionFactory的DataSource属性,来将SqlSession的创建和释放交给Druid连接池管理。
参考这个,详见这个说明:https://www.pianshen.com/article/2747380017/
原回答者GitHub用户pauljy
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。