发表于: 2017-11-06 20:22:43
1 800
day16
今日完成
1,学习了下spring事务回滚
首先在applicationContext.xml文件中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mydb" />
<property name="username" value="root" />
<property name="password" value="612049" />
</bean>
</beans>
测试类
public class TestSpringJunit extends BaseJunit4Test {
@Test
@Transactional
@Rollback
public void insertTest(){
User u=new User();
u.setName("哇哈哈");
//u.setId(1);
u.setAge(22);
SqlSession sqlSession = MyBatisUtil.getSqlSession(false);
userMapper userMapper = sqlSession.getMapper(userMapper.class);
userMapper.addUser(u);
//关闭session
sqlSession.close();
}
}
现在在执行单元测试时回自动回滚操作,不会真的在数据库中insert数据。
2,
Log4j是高度可配置的,并可通过在运行时的外部文件配置。它根据记录的优先级别,并提供机制,以指示记录信息到许多的目的地,诸如:数据库,文件,控制台,UNIX系统日志等。
Log4j中有三个主要组成部分:
- loggers: 负责捕获记录信息。(日志信息的优先级)
- appenders : 负责发布日志信息,以不同的首选目的地。(日志信息的输出目的地指定了日志将打印到控制台还是文件中)
- layouts: 负责格式化不同风格的日志信息。(日志信息的输出格式)
不同级别的含义
trace: 是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。
debug: 调试么,我一般就只用这个作为最低级别,trace压根不用。是在没办法就用eclipse或者idea的debug功能就好了么。
info: 输出一下你感兴趣的或者重要的信息,这个用的最多了。
warn: 有些信息不是错误信息,但是也要给程序员的一些提示,类似于eclipse中代码的验证不是有error 和warn(不算错误但是也请注意,比如以下depressed的方法)。
error: 错误信息。用的也比较多。
fatal: 级别比较高了。重大错误,这种级别你可以直接停止程序了,是不应该出现的错误么!不用那么紧张,其实就是一个程度的问题。
Log4j API设计为分层结构,其中每一层提供了不同的对象,对象执行不同的任务。这使得设计灵活,根据将来需要来扩展。有两种类型可用在Log4j的框架对象。
核心对象: 框架的强制对象和框架的使用。
支持对象: 框架和支持体核心对象,可选的对象执行另外重要的任务。
1,核心对象:
Logger对象:
顶级层的Logger,它提供Logger对象。Logger对象负责捕获日志信息及它们存储在一个空间的层次结构。
布局对象:该层提供其用于格式化不同风格的日志信息的对象。布局层提供支持Appender对象到发布日志信息之前。
布局对象的发布方式是人类可读的及可重复使用的记录信息的一个重要的角色。
Appender对象:
下位层提供Appender对象。Appender对象负责发布日志信息,以不同的首选目的地,如数据库,文件,控制台,UNIX系统日志等。
2,
支持对象:
log4j框架的其他重要的对象起到日志框架的一个重要作用:
Level对象:
级别对象定义的任何记录信息的粒度和优先级。有记录的七个级别在API中定义:OFF, DEBUG, INFO, ERROR, WARN, FATAL 和 ALL
Filter对象:
过滤对象用于分析日志信息及是否应记录或不用这些信息做出进一步的决定。
一个appender对象可以有与之关联的几个Filter对象。如果日志记录信息传递给特定Appender对象,都和特定Appender相关的Filter对象批准的日志信息,然后才能发布到所连接的目的地。
对象渲染器:
ObjectRenderer对象是一个指定提供传递到日志框架的不同对象的字符串表示。这个对象所使用的布局对象来准备最后的日志信息。
日志管理:
日志管理对象管理的日志框架。它负责从一个系统级的配置文件或配置类读取初始配置参数。
遇到的困难
1,异常
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in URL [file:/F:/IdeaProjects/mybatisDemo/target/classes/applicationContext.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'dataSource' available
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'dataSource' available
根据No bean named 'dataSource' available可看出,忘记配置数据源了,如下
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mydb" />
<property name="username" value="root" />
<property name="password" value="612049" />
</bean>
2,开始时事务回滚不起作用,看了下测试代码,我觉得好像是自动提交事务设置成true的原因,改为false就成功了。
明日计划
学习查看日志和debug模式
收获
学习了spring事务回滚的操作,简单了解了日志
评论