1、spring-persist-tx.xml
xml version="1.0" encoding="UTF-8"?>
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
name="dataSource" ref="dataSource"/>
ref="txAdvice" pointcut-ref="txPointcut"/>
transaction-manager="txManager">
method name="get*" read-only="true"/>
method name="find*" read-only="true"/>
method name="query*" read-only="true"/>
method name="count*" read-only="true"/>
method name="save*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
method name="update*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
method name="remove*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
method name="batch*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
2、spring-persist-mybatis.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:property-placeholder location="classpath:jdbc.properties">context:property-placeholder>
<bean id="dataSource" class="com.aliba.druid.pool.DruidDataSource">
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
<property name="url" value="${jdbc.url}"/>
<property name="driverClassName" value="${jdbc.driver}"/>
bean>
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis-config.xml">property>
<property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml">property>
<property name="dataSource" ref="dataSource">property>
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<props>
<prop key="dialect">mysqlprop>
<prop key="reasonable">trueprop>
props>
property>
bean>
array>
property>
bean>
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.atguigu.crowd.mapper">property>
bean>
beans>
3、测试类(其中除了testTx方法,其他测试方法都成功了)
package com.atguigu.crowd;
import com.atguigu.crowd.entity.Admin;
import com.atguigu.crowd.mapper.AdminMapper;
import com.atguigu.crowd.service.api.AdminService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
/**
* @author 123
* date 2022-09-18
*/
// 在类上标记必要的注解,spring整合junit
// 指定Spirng给Junit提供的运行器类
@RunWith(SpringJUnit4ClassRunner.class)
// 加载Spring配置文件的注解
@ContextConfiguration(locations = {"classpath:spring-persist-mybatis.xml", "classpath:spring-persist-tx.xml"})
public class CrowdTest {
@Autowired
private DataSource dataSource;
@Autowired
private AdminMapper adminMapper;
@Autowired(required = false)
private AdminService adminService;
@Test
public void testConnection() throws SQLException {
Connection connection = dataSource.getConnection();
System.out.println(connection);
}
@Test
public void testTx() {
Admin admin = new Admin(null, "jerry", "123456", "杰瑞", "jerry@qq.com", null);
adminService.saveAdmin(admin);
}
@Test
public void testInertAdmin() {
Admin admin = new Admin(null, "nn", "123123", "汤姆", "tom@qq.com", null);
int count = adminMapper.insert(admin);
// 如果实际开发中,所有想查看数值的地方都用sysout方式打印,会给项目上线运行带来问题!
// sysout本质上是一个IO的操作,通常IO的操作是比较小号性能的。如果项目中sysout很多,对性能的影响就很大了
// 若使用日志系统,那么通过日志级别就能批量的控制信息的打印
System.out.println("受影响的行数:" + count);
}
}
22:23:16,080 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
22:23:16,080 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
22:23:16,080 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/E:/tool/JetBrains/IdeaProjects/atcrowdfunding001-admin-parent/atcrowdfunding002-admin-webui/target/classes/logback.xml]
22:23:16,291 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
22:23:16,299 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
22:23:16,314 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
22:23:16,374 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
22:23:16,375 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
22:23:16,378 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.atguigu.crowd.mapper] to DEBUG
22:23:16,378 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
22:23:16,381 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@3f2a3a5 - Registering current configuration as safe fallback point
[22:23:16.557] [INFO ] [main] [org.springframework.test.context.support.DefaultTestContextBootstrapper]
[Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]]
[22:23:16.581] [INFO ] [main] [org.springframework.test.context.support.DefaultTestContextBootstrapper]
[Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@32d2fa64, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@1d8d30f7, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@3e57cd70, org.springframework.test.context.support.DirtiesContextTestExecutionListener@9a7504c, org.springframework.test.context.transaction.TransactionalTestExecutionListener@2c039ac6, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@587d1d39]]
[22:23:16.694] [INFO ] [main] [org.springframework.beans.factory.xml.XmlBeanDefinitionReader]
[Loading XML bean definitions from class path resource [spring-persist-mybatis.xml]]
[22:23:16.902] [INFO ] [main] [org.springframework.beans.factory.xml.XmlBeanDefinitionReader]
[Loading XML bean definitions from class path resource [spring-persist-tx.xml]]
[22:23:17.054] [INFO ] [main] [org.springframework.context.support.GenericApplicationContext]
[Refreshing org.springframework.context.support.GenericApplicationContext@150c158: startup date [Sun Oct 02 22:23:17 CST 2022]; root of context hierarchy]
[22:23:19.221] [INFO ] [main] [com.aliba.druid.pool.DruidDataSource]
[{dataSource-1} inited]
com.mysql.jdbc.JDBC4Connection@21fd5faa
[22:23:19.809] [INFO ] [Thread-1] [org.springframework.context.support.GenericApplicationContext]
[Closing org.springframework.context.support.GenericApplicationContext@150c158: startup date [Sun Oct 02 22:23:17 CST 2022]; root of context hierarchy]
[22:23:19.815] [INFO ] [Thread-1] [com.aliba.druid.pool.DruidDataSource]
[{dataSource-1} closed]
Process finished with exit code 0
1、删除target,重新生成。无效。
2、重新敲一遍spring-persist-tx.xml。无效
哪位朋友遇到过类似的问题呀,求解 ~
问题解决啦 最后发现是servise写的有问题
那个地方有报错啊?这不很正常吗?
[22:23:19.221] [INFO ] [main] [com.aliba.druid.pool.DruidDataSource] [{dataSource-1} inited]
这么看呢