1、非数据库连接池使用时,数据库连接用户名使用${username},现象是连接数据使用的用户名是当前pc端在用用户名,比如我当前使用的用户是dell
原因:配置的用户名的key不能直接使用username,因为在XML中获取用户名使用 ${username}获取的是计算机的账号名称。可以修改为 jdbc.username或其他的名称即可
2、事务管理出现异常,事务不回滚
(1)、容器启动,打开声明是事务:
<!-- 配置基于注解的声明式事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
(2)、代码如下
@Transactional
@Override
public User queryByUserInfo(User user) throws Exception{
userDao.addUser(user);
throw new Exception("11111");
//throw new RuntimeException("11111");
}
(3)、现象:事务未回滚,数据入库正常
(4)、原因:Spring事务回滚与异常,Spring被事务管理的方法,需要抛出非检查异常,即运行期异常才能进行回滚
3、Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e90dc4] was not registered for synchronization because synchronization is not active JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@57e1a67c] will not be managed by Spring
现象:事务没有被管理,出现异常事务没有被回滚
怀疑:对于日志中的not比较敏感,从not下手
更改事务管理方式:AOP声明拦截和注解式事务声明
对比差异:
注解式操作现象:
Creating a new SqlSession
Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@730a533f]
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@611ee9e2] will be managed by Spring
找到区别引起的原因,aop事务配置有问题,果然当前调用方法不符合pointcut规则
个人原因:想当然的怀疑了自己最不懂的,<aop:pointcut expression="execution(* com.fulin.service.impl.*.*(..))" id="daoMethod"/>
一致在怀疑表达式的正确性,掩盖了如下配置