public class CoreApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(this.getClass()); }
若打包成war包,则需要继承 SpringBootServletInitializer 并重写configure()方法:打包成war的话,如果打包之后的文件中没有web.xml文件的话它可以自己加进去一个最简单的web.xml(只有根节点的定义,而没有子元素),防止因缺乏web.xml文件而部署失败
@SpringBootApplication @EnableTransactionManagement public class CoreApplication extends SpringBootServletInitializer { @Bean(initMethod = "init", destroyMethod = "close") @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return new DruidDataSource(); } @Bean public SqlSessionFactory sqlSessionFactoryBean() throws Exception { PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource()); sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:/mapper/*Mapper.xml")); return sqlSessionFactoryBean.getObject(); } @Bean public PlatformTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource()); }
Spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement 开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactional 便可。
@EnableTransactionManagement // 启动注解事务管理,等同于xml配置方式的 <tx:annotation-driven />,启动类中添加如下方法,(Debug测试—),就能知道自动注入的是 PlatformTransactionManager(平台事务管理) 接口的哪个实现类。通过添加@Bean,我们可以人为的指定使用哪个事务管理器,
在Spring容器中,我们手工注解@Bean 将被优先加载,框架不会重新实例化其他的 PlatformTransactionManager 实现类。
然后在Service中,被 @Transactional 注解的方法,将支持事务。如果注解在类上,则整个类的所有方法都默认支持事务。
还可通过@Bean(name = "txManager1"),@Bean(name = "txManager2")进行多事务的处理。
@MapperScan
使用@MapperScan可以指定要扫描的Mapper类的包的路径。
插曲:
springboot的启动类可以理解为spring容器的初始化,它与xml配置形式启动类似,配置好事务,配置好bean,配置好数据库等等。
public class ContentVo implements Serializable {}
实体类实现序列化接口。Serializable是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化。一个类只有实现了Serializable接口,它的对象才是可序列化的
什么情况下需要序列化:
1. 当你想把的内存中的对象写入到硬盘的时候。(即对象的持久化操作的时候)
2. 当你想用套接字在网络上传送对象的时候。
在进行Java的Socket编程的时候,你有时候可能要传输某一类的对象,那么也就要实现Serializable接口。最常见的你传输一个字符串,它是JDK里面的类,也实现了Serializable接口,这样做为的是将数据变为二进制来传输,所以可以在网络上传输。
3. 当你想通过RMI(远程调用接口)传输对象的时候。
通过远程的方法调用(RMI)去调用一个远程对象的方法,如在计算机A中调用另一台计算机B的对象的方法,那么你需要通过JNDI服务获取计算机B目标对象的引用,将对象从B传送到A,就需要实现序列化接口。(对象在计算机之间的传递调用)。