Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@76ebf212] was not registered for synchronization because synchronization is not active
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7c61b8bc] was not registered for synchronization because synchronization is not active
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6aa9548e] was not registered for synchronization because synchronization is not active
JDBC Connection [jdbc:mysql://localhost:3307/ge_test, UserName=root@localhost, MySQL Connector Java] will not be managed by Spring
JDBC Connection [jdbc:mysql://localhost:3307/ge_test, UserName=root@localhost, MySQL Connector Java] will not be managed by Spring
JDBC Connection [jdbc:mysql://localhost:3307/ge_test, UserName=root@localhost, MySQL Connector Java] will not be managed by Spring
控制臺提示,我每次執行SQL的時候都會Creating a new SqlSession,這樣是不是會嚴重的影像性能?我明明配置了事務,而且測驗過事務是有效的,為什么還提示我事務沒有交給spring管理呢?
事務配置代碼:
<!-- 事務管理器配置 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 事務傳播特性配置 -->
<tx:advice id="transactionAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="get*" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 配置哪些方法參與事務 -->
<aop:config proxy-target-class="true">
<aop:pointcut id="transactionxPointcut" expression="execution(* com.kwjq.web.service.*.*(..))" />
<aop:advisor advice-ref="transactionAdvice" pointcut-ref="transactionxPointcut" />
</aop:config>
親自測驗過,如果在Service里面執行2個dao方法,第一個執行完畢后,我手動拋出例外,是會回滾的。
請問各位,為什么會出現這樣的情況?
問題一、為什么每次都Creating a new SqlSession,會不會影響性能?
問題二、明明配置了事務,確提示事務沒有交給spring管理,求解。
謝謝各位大神,有滿意答案就結貼給分。
uj5u.com熱心網友回復:
大神們來幫我解決問題吧,自己頂起來uj5u.com熱心網友回復:
千萬不要讓帖子沉了,謝謝好心人uj5u.com熱心網友回復:
問題一、為什么每次都Creating a new SqlSession,會不會影響性能?那個是資訊,就是在一個資料庫連接上,啟動事務,創建一個物件來管理事務,就是在資料庫連接上發出transaction.start,物件來記錄相關資訊。對性能影響很少
問題二、明明配置了事務,確提示事務沒有交給spring管理,求解
是連接不是spring管理的(應該是應用服務器上建立的),事務還是spring管理。也是正常的
uj5u.com熱心網友回復:
納尼?都是正常的?資料庫連接是給spring進行管理的,我把資料庫連接池的代碼貼出來
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="https://bbs.csdn.net/topics/${jdbc.driver}" />
<property name="url" value="https://bbs.csdn.net/topics/${jdbc.url}" />
<property name="username" value="https://bbs.csdn.net/topics/${jdbc.username}" />
<property name="password" value="https://bbs.csdn.net/topics/${jdbc.password}" />
<!-- 初始化連接大小 -->
<property name="initialSize" value="https://bbs.csdn.net/topics/10"></property>
<!-- 連接池最大數量 -->
<property name="maxActive" value="https://bbs.csdn.net/topics/50"></property>
<!-- 連接池最大空閑 -->
<property name="maxIdle" value="https://bbs.csdn.net/topics/${jdbc.maxIdle}"></property>
<!-- 連接池最小空閑 -->
<property name="minIdle" value="https://bbs.csdn.net/topics/${jdbc.minIdle}"></property>
<!-- 獲取連接最大等待時間 -->
<property name="maxWait" value="https://bbs.csdn.net/topics/${jdbc.maxWait}"></property>
</bean>
uj5u.com熱心網友回復:
前面回答錯了你這個是spring沒有整合好,org.springframework.jdbc.datasource.DataSourceTransactionManager 應該用 org.springframework.jdbc.datasource.DataSourceTransactionManager
參考: http://www.mybatis.org/spring/zh/transactions.html
uj5u.com熱心網友回復:
不在狀態,錯誤不斷uj5u.com熱心網友回復:
很有可能你的mybatis-spring jar 沒引入或者版本不對應uj5u.com熱心網友回復:
改成 這個 execution(* com.kwjq.web.service.*.impl.*.*(..))uj5u.com熱心網友回復:
參考下:史上最簡單的spring+springMVC+mybaits整合SSM框架~Simple-SSM
uj5u.com熱心網友回復:
直接 springboot 啊uj5u.com熱心網友回復:
Creating a new SqlSession mybatis官方就是這么和spring整合的,SqlSession是對Connection的封裝,Connection都在池里呢,沒什么影響第二個就很迷了,大概是空閑連接,spring暫時不管?
uj5u.com熱心網友回復:
你參考下:史上最簡單的spring+springMVC+mybaits整合SSM框架~Simple-SSM
uj5u.com熱心網友回復:
問題一、為什么每次都Creating a new SqlSession,會不會影響性能?為什么上文有人說正常,每次都重新new一個sqlSession,后面的日志應該也是每次都重新查詢。這不是一級快取沒生效?還是我弄錯了呢
我覺得兩問題都不正常。
希望大神來掃盲。
uj5u.com熱心網友回復:
新版的 jdbc 支持異步互動,樓主嘗試 開啟同步互動,試一試。spring的事務管理器,一般情況下是支持 同步互動 模式的jdbc資料源的,異步互動模式的連接池,我還沒有玩過,不知道是否支持。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/58312.html
標籤:Java EE
