Spring重新学习一

»Spring

目录:

双十一买了一本精通Spring4.x企业应用开发实战开始重新系统的学习Spring,期间遇到很多的磕磕绊绊

一是好久没接触Spring了(之前实习没有使用Spring)

二是原先对Spring的源码以及机制没有很好的掌握

导致照着书写个最基本的helloworld都搞了好几个小时(也有可能是书里没有讲的很清楚~),这里简单说说遇到的问题。

代码地址

Spring配置的问题

命名空间导入问题

书里是使用注解+Spring的xx-context.xml来设置Spring的基本配置,在写xml的时候,需要设置前面的<beans xmlns=“” >这种命名空间(是这么叫的吗?),一开始不知道去哪里倒入这个,因为以前学习的时候是用的eclipse,现在用idea一瞬间就懵了,百度了之后发现,在下面使用标签的时候,可以自动导入命名空间,这点还是很方便 image

pom依赖问题

这里遇到的问题是,导入mysql连接的时候,一开始是用的5.x.x版本,导致启动的时候报错,说不能连接到数据库。百度了好久,才发现我本地装的mysql是8.x.x,于是讲jdbc-connector版本换成跟mysql版本一致,就解决了。

还有书中所用的Spring版本4.2.1在github上说有漏洞,升级为4.3.18即可

测试过程中的问题

书中说TestNG相比JUnit有重大的改进(还没研究),于是使用TestNG进行测试。

测试过程中发现在往数据库写入数据的时候一直写不进去,而且控制台也没有显示报错,在mysql中发现自增id一致在增长,但是就是没有数据,而且从控制台中发现其一直在进行事务回滚,就算是进行查找,你自己没有配置事务,他也会显示说Began Transaction Rolled back,百度了之后说是继承了AbstractTransactionalTestNGSpringContextTests这个类之后,默认是会自动回滚事务,这其中好像是因为有个这个注解,他默认是true导致事务回滚

@Deprecated
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface TransactionConfiguration {

    /**
     * Whether <em>test-managed transactions</em> should be rolled back by default.
     */
    boolean defaultRollback() default true;

}

要想提交,可以在方法上加一个@Rollback(false),但是这样的话并不是说,你的事务就不回回滚,当插入失败的时候,该回滚还是会回滚,只是他这个测试框架的回滚就取消了,猜测用这个测试框架的时候,应该在原来的基础上增加了一个事务。 image

在IDEA中将普通maven项目变为web项目

发现工程中没有webapp目录,进入project-structs,将添加web,并且修改图中两处就可以添加webapp了 image