这里写目录标题
一级目录二级目录三级目录
一 旧项目1拥有配置文件众多2pom依赖版本比较杂乱
二 新项目1 更新SpringBoot的pom依赖2新增spring boot启动类,加载原先的xml配置文件1@SpringBootApplication2@MapperScan("baobaobaobao.dao")3@EnableTransactionManagement4@ImportResource5@componentscan
3SpringBoot的默认日志框架4 SpringBoot的配置文件application.properties5SpringBoot的配置类
一级目录
二级目录
三级目录
一 旧项目
公司一个项目在开发中使用某些功能的时候,受限于spring低版本的限制,故索性将整个模块升级为spring boot,在这里做个记录,希望能帮助到有相同场景的朋友。
整个改造过程非常简单,耗时大概在2个小时左右,主要解决项目中的各种版本冲突,我们SSM变化为使用SpringBoot统一版本。
1拥有配置文件众多
2pom依赖版本比较杂乱
<?xml version
="1.0" encoding
="UTF-8"?>
<project xmlns
="http://maven.apache.org/POM/4.0.0"
xmlns
:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xsi
:schemaLocation
="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion
>
<groupId>org
.example
</groupId
>
<artifactId>ssm
</artifactId
>
<version>1.0-SNAPSHOT
</version
>
<packaging>war
</packaging
>
<properties>
<project
.build
.sourceEncoding
>UTF
-8</project
.build
.sourceEncoding
>
<maven
.compiler
.source
>1.8</maven
.compiler
.source
>
<maven
.compiler
.target
>1.8</maven
.compiler
.target
>
</properties
>
<dependencies>
<!-- spring4
.3.2 -->
<!-- spring
-context
-->
<dependency>
<groupId>org
.springframework
</groupId
>
<artifactId>spring
-context
</artifactId
>
<version>4.3.2.RELEASE
</version
>
</dependency
>
<!-- spring
-core
-->
<dependency>
<groupId>org
.springframework
</groupId
>
<artifactId>spring
-core
</artifactId
>
<version>4.3.2.RELEASE
</version
>
</dependency
>
<!-- spring
-beans
-->
<dependency>
<groupId>org
.springframework
</groupId
>
<artifactId>spring
-beans
</artifactId
>
<version>4.3.2.RELEASE
</version
>
</dependency
>
<!-- https
://mvnrepository
.com
/artifact
/org
.springframework
/spring
-aop
-->
<dependency>
<groupId>org
.springframework
</groupId
>
<artifactId>spring
-aop
</artifactId
>
<version>4.3.2.RELEASE
</version
>
</dependency
>
<!-- https
://mvnrepository
.com
/artifact
/org
.springframework
/spring
-aspects
-->
<dependency>
<groupId>org
.springframework
</groupId
>
<artifactId>spring
-aspects
</artifactId
>
<version>4.3.2.RELEASE
</version
>
</dependency
>
<!--使用AspectJ方式注解需要相应的包
-->
<dependency>
<groupId>org
.aspectj
</groupId
>
<artifactId>aspectjrt
</artifactId
>
<version>1.6.11</version
>
</dependency
>
<!--使用AspectJ方式注解需要相应的包
-->
<dependency>
<groupId>org
.aspectj
</groupId
>
<artifactId>aspectjweaver
</artifactId
>
<version>1.6.11</version
>
</dependency
>
<!-- mysql
-->
<dependency>
<groupId>mysql
</groupId
>
<artifactId>mysql
-connector
-java
</artifactId
>
<version>5.1.6</version
>
</dependency
>
<!--数据源druid
-->
<dependency>
<groupId>com
.alibaba
</groupId
>
<artifactId>druid
</artifactId
>
<version>1.1.3</version
>
</dependency
>
<!--mybitis
-->
<dependency>
<groupId>org
.mybatis
</groupId
>
<artifactId>mybatis
</artifactId
>
<version>3.4.5</version
>
</dependency
>
<!--spring事务
-->
<dependency>
<groupId>org
.springframework
</groupId
>
<artifactId>spring
-tx
</artifactId
>
<version>4.3.2.RELEASE
</version
>
</dependency
>
<!--springJDBC
-->
<dependency>
<groupId>org
.springframework
</groupId
>
<artifactId>spring
-jdbc
</artifactId
>
<version>4.3.2.RELEASE
</version
>
</dependency
>
<!--mybitis
-spring插件包
-->
<dependency>
<groupId>org
.mybatis
</groupId
>
<artifactId>mybatis
-spring
</artifactId
>
<version>1.3.2</version
>
</dependency
>
<dependency>
<groupId>com
.github
.pagehelper
</groupId
>
<artifactId>pagehelper
</artifactId
>
<version>5.1.2</version
>
</dependency
>
<dependency>
<groupId>junit
</groupId
>
<artifactId>junit
</artifactId
>
<version>4.12</version
>
<scope>compile
</scope
>
</dependency
>
<dependency>
<groupId>org
.springframework
</groupId
>
<artifactId>spring
-expression
</artifactId
>
<version>4.3.2.RELEASE
</version
>
</dependency
>
<dependency>
<groupId>log4j
</groupId
>
<artifactId>log4j
</artifactId
>
<version>1.2.17</version
>
</dependency
>
<dependency>
<groupId>javax
.servlet
</groupId
>
<artifactId>javax
.servlet
-api
</artifactId
>
<version>3.0.1</version
>
<scope>provided
</scope
>
</dependency
>
<!-- 配置jsp
-->
<dependency>
<groupId>javax
.servlet
.jsp
</groupId
>
<artifactId>javax
.servlet
.jsp
-api
</artifactId
>
<version>2.2.1</version
>
<scope>provided
</scope
>
</dependency
>
<!-- spring web
-->
<dependency>
<groupId>org
.springframework
</groupId
>
<artifactId>spring
-web
</artifactId
>
<version>4.3.2.RELEASE
</version
>
</dependency
>
<!-- spring webmvc
-->
<dependency>
<groupId>org
.springframework
</groupId
>
<artifactId>spring
-webmvc
</artifactId
>
<version>4.3.2.RELEASE
</version
>
</dependency
>
<!--data
-->
<dependency>
<groupId>com
.fasterxml
.jackson
.core
</groupId
>
<artifactId>jackson
-databind
</artifactId
>
<version>2.9.0</version
>
</dependency
>
<!-- https
://mvnrepository
.com
/artifact
/com
.fasterxml
.jackson
.core
/jackson
-core
-->
<dependency>
<groupId>com
.fasterxml
.jackson
.core
</groupId
>
<artifactId>jackson
-core
</artifactId
>
<version>2.9.0</version
>
</dependency
>
<!-- https
://mvnrepository
.com
/artifact
/com
.fasterxml
.jackson
.core
/jackson
-annotations
-->
<dependency>
<groupId>com
.fasterxml
.jackson
.core
</groupId
>
<artifactId>jackson
-annotations
</artifactId
>
<version>2.9.0</version
>
</dependency
>
<dependency>
<groupId>org
.mybatis
.generator
</groupId
>
<artifactId>mybatis
-generator
-core
</artifactId
>
<version>1.4.0</version
>
</dependency
>
</dependencies
>
<build>
<!-- 配置tomcat插件,web端
-->
<plugins>
<plugin>
<groupId>org
.apache
.tomcat
.maven
</groupId
>
<artifactId>tomcat7
-maven
-plugin
</artifactId
>
<version>2.2</version
>
<configuration>
<!-- 配置项目的请求路径
-->
<path>/mvc
</path
>
<!-- 配置服务器端口号
-->
<port>9091</port
>
</configuration
>
</plugin
>
<!-- mybatis
-generator反向工程
-->
<plugin>
<groupId>org
.mybatis
.generator
</groupId
>
<artifactId>mybatis
-generator
-maven
-plugin
</artifactId
>
<version>1.4.0</version
>
<configuration>
<!-- 在控制台打印执行日志
-->
<verbose>true</verbose
>
<!-- 重复生成时会覆盖之前的文件
-->
<overwrite>true</overwrite
>
<configurationFile>src
/main
/resources
/generatorConfig
.xml
</configurationFile
>
</configuration
>
<dependencies>
<dependency>
<groupId>mysql
</groupId
>
<artifactId>mysql
-connector
-java
</artifactId
>
<version>5.1.6</version
>
</dependency
>
</dependencies
>
</plugin
>
</plugins
>
</build
>
</project
>
二 新项目
1 更新SpringBoot的pom依赖
<?xml version
="1.0" encoding
="UTF-8"?>
<project xmlns
="http://maven.apache.org/POM/4.0.0"
xmlns
:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xsi
:schemaLocation
="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion
>
<parent>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-starter
-parent
</artifactId
>
<version>2.0.0.RELEASE
</version
>
</parent
>
<groupId>org
.example
</groupId
>
<artifactId>SpringBOOT
</artifactId
>
<version>1.0-SNAPSHOT
</version
>
<properties>
<project
.build
.sourceEncoding
>UTF
-8</project
.build
.sourceEncoding
>
<maven
.compiler
.source
>1.8</maven
.compiler
.source
>
<maven
.compiler
.target
>1.8</maven
.compiler
.target
>
</properties
>
<dependencies>
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-starter
-web
</artifactId
>
</dependency
>
<dependency>
<groupId>org
.mybatis
.spring
.boot
</groupId
>
<artifactId>mybatis
-spring
-boot
-starter
</artifactId
>
<version>1.2.2</version
>
</dependency
>
<!-- https
://mvnrepository
.com
/artifact
/com
.github
.pagehelper
/pagehelper
-spring
-boot
-starter
-->
<dependency>
<groupId>com
.github
.pagehelper
</groupId
>
<artifactId>pagehelper
-spring
-boot
-starter
</artifactId
>
<version>1.2.3</version
>
</dependency
>
<!-- https
://mvnrepository
.com
/artifact
/mysql
/mysql
-connector
-java
-->
<dependency>
<groupId>mysql
</groupId
>
<artifactId>mysql
-connector
-java
</artifactId
>
<version>5.1.6</version
>
</dependency
>
<!--阿里数据源
-->
<dependency>
<groupId>com
.alibaba
</groupId
>
<artifactId>druid
</artifactId
>
<version>1.1.3</version
>
</dependency
>
<!--jsp的支持的依赖
-->
<dependency>
<groupId>org
.apache
.tomcat
.embed
</groupId
>
<artifactId>tomcat
-embed
-jasper
</artifactId
>
</dependency
>
<!--jsp启动器
-->
<dependency>
<groupId>org
.apache
.tomcat
</groupId
>
<artifactId>tomcat
-jsp
-api
</artifactId
>
</dependency
>
<!--servlet启动器
-->
<dependency>
<groupId>javax
.servlet
</groupId
>
<artifactId>javax
.servlet
-api
</artifactId
>
</dependency
>
<!--热部署
-->
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-devtools
</artifactId
>
<!--热部署scope的值必须为
true-->
<scope>true</scope
>
</dependency
>
<!--工具依赖邮箱
-->
<dependency>
<groupId>com
.bladejava
</groupId
>
<artifactId>jmail
</artifactId
>
<version>0.0.3</version
>
</dependency
>
</dependencies
>
<!--插件配置
-->
<build>
<plugins>
<plugin>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-maven
-plugin
</artifactId
>
<version>1.4.2.RELEASE
</version
>
<configuration>
<!-- 如果没有该配置,热部署的devtools不生效
-->
<fork>true</fork
>
<mainClass>baobaobaobao
.Application
</mainClass
>
</configuration
>
<executions>
<execution>
<goals>
<goal>repackage
</goal
>
</goals
>
</execution
>
</executions
>
</plugin
>
<!-- 自定义配置spring Boot使用的JDK版本
-->
<plugin>
<artifactId>maven
-compiler
-plugin
</artifactId
>
<configuration>
<source>1.8</source
>
<target>1.8</target
>
</configuration
>
</plugin
>
</plugins
>
<resources>
<!-- 打包时将jsp文件拷贝到META
-INF目录下
-->
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件
-->
<directory>src
/main
/webapp
</directory
>
<!--注意此次必须要放在此目录下才能被访问到
-->
<targetPath>META
-INF
/resources
</targetPath
>
<includes>
<include>**
1 注意SpringBoot项目一般打Jar包,而不是War包,所以我们要去掉 <packaging>war</packaging> 2解决SpringBoot的jsp页面访问404的问题
<!--jsp的支持的依赖
-->
<dependency>
<groupId>org
.apache
.tomcat
.embed
</groupId
>
<artifactId>tomcat
-embed
-jasper
</artifactId
>
</dependency
>
<!--jsp启动器
-->
<dependency>
<groupId>org
.apache
.tomcat
</groupId
>
<artifactId>tomcat
-jsp
-api
</artifactId
>
</dependency
>
<!--servlet启动器
-->
<dependency>
<groupId>javax
.servlet
</groupId
>
<artifactId>javax
.servlet
-api
</artifactId
>
</dependency
>
3解决SpringBoot打Jar包时,在WEB-INF文件夹下的JSP页面没有被打包进去的问题
<resources>
<!-- 打包时将jsp文件拷贝到META
-INF目录下
-->
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件
-->
<directory>src
/main
/webapp
</directory
>
<!--注意此次必须要放在此目录下才能被访问到
-->
<targetPath>META
-INF
/resources
</targetPath
>
<includes>
<include>**
2新增spring boot启动类,加载原先的xml配置文件
package baobaobaobao
;
import org
.mybatis
.spring
.annotation
.MapperScan
;
import org
.springframework
.boot
.Banner
;
import org
.springframework
.boot
.SpringApplication
;
import org
.springframework
.boot
.autoconfigure
.SpringBootApplication
;
import org
.springframework
.context
.annotation
.ImportResource
;
import org
.springframework
.transaction
.annotation
.EnableTransactionManagement
;
@SpringBootApplication
@MapperScan("baobaobaobao.dao")
@EnableTransactionManagement
@ImportResource(locations
= {"classpath:springmvc.xml","classpath:applicationContext.xml"})
public class Application {
public static void main(String
[] args
) {
SpringApplication springApplication
= new SpringApplication(Application
.class);
springApplication
.setBannerMode(Banner
.Mode
.OFF
);
springApplication
.run(args
);
}
}
其中四个注解
1@SpringBootApplication
注解是Spring Boot的核心注解,它其实是一个组合注解 该注解主要组合了以下注解:
@SpringBootConfiguration
:这是Spring Boot项目的配置注解,这也是一个组合注解: 在Spring Boot项目中推荐使用@ SpringBootConfiguration替代@Configuration
@EnableAutoConfiguration 启用自动配置,该注解会使Spring Boot根据项目中依赖的jar包自动配置项目的配置项: 如:我们添加了spring-boot-starter-web的依赖,项目中也就会引入SpringMVC的依赖,Spring Boot就会自动配置tomcat和SpringMVC 关闭自动配置 通过上述,我们得知,Spring Boot会根据项目中的jar包依赖,自动做出配置,Spring Boot支持的自动配置如下(非常多): 如果我们不需要Spring Boot自动配置,想关闭某一项的自动配置,该如何设置呢? 比如:我们不想自动配置Redis,想手动配置。
@ComponentScan 默认扫描@SpringBootApplication所在类的同级目录以及它的子目录。
2@MapperScan(“baobaobaobao.dao”)
@MapperScan注解只会扫描包中的接口,不会扫描类
@MapperScan("com.demo.mapper"):扫描指定包中的接口
@MapperScan("com.demo.*.mapper"):一个
*代表任意字符串,但只代表一级包
,比如可以扫到com
.demo
.aaa
.mapper
,不能扫到com
.demo
.aaa
.bbb
.mapper
@MapperScan("com.demo.**.mapper"):两个
*代表任意个包
,比如可以扫到com
.demo
.aaa
.mapper
,也可以扫到com
.demo
.aaa
.bbb
.mapper
我们用过@MapperScan注解之后就不用在ioc容器中注入 org.mybatis.spring.mapper.MapperScannerConfigurer来管理mapper接口了
我们直接把ioc容器中的MapperScannerConfigurer依赖注解掉。
3@EnableTransactionManagement
Spring Boot 使用事务非常简单,首先使用注解
@EnableTransactionManagement 开启事务支持后,然后在访问数据库的Service方法上添加注解
@Transactional 便可。
关于事务管理器,不管是JPA还是JDBC等都实现自接口 PlatformTransactionManager 如果你添加的是 spring
-boot
-starter
-jdbc 依赖,框架会默认注入 DataSourceTransactionManager 实例。如果你添加的是 spring
-boot
-starter
-data
-jpa 依赖,框架会默认注入 JpaTransactionManager 实例。
对于事务管理器的配置,我们可以选择在 IOC容器中配置,也可以选择在 SpringBoot配置文件中配置,也可以选择在 JAVA配置类中配置。
4@ImportResource
@ImportResource(locations
= {"classpath:springmvc.xml","classpath:applicationContext.xml"})
5@componentscan
@ComponentScan告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。
例如,如果你有个类用@Controller注解标识了,那么,如果不加上@ComponentScan,自动扫描该controller,那么该Controller就不会被spring扫描到,更不会装入spring容器中,因此你配置的这个Controller也没有意义。
3SpringBoot的默认日志框架
加载日志配置文件:
logging
.config
=classpath
:logback
.xml(application
.properties
)
创建日志对象:
public static Logger log
= LoggerFactory
.getLogger(ProductServiceImpl
.class);
4 SpringBoot的配置文件application.properties
#服务器端口
server
.port
=8080
#配置内置日志
logging
.config
=classpath
:logback
.xml
#配置单文件上传最大值
spring
.servlet
.multipart
.max
-file
-size
=6MB
#配置多文件请求上传最大值
spring
.servlet
.multipart
.max
-request
-size
=66MB
#分页插件配置
#指定数据库
pagehelper
.helper
-dialect
=mysql
#分页合理化参数,默认值为
false。当该参数设置为
true 时,
#pageNum
<=0 时会查询第一页
pagehelper
.reasonable
=true
#支持通过 Mapper 接口参数来传递分页参数,默认值
false
pagehelper
.support
-methods
-arguments
=true
在MyBatis的配置文件mybatisConfig.xml中的分页插件我们可以删除,把配置移除到Springboot的配置文件属性里 mybatisConfig.xml: 我们在IOC注入依赖SqlSessionFactoryBean的时候也就不用 配置 Mybatis的配置文件的property属性了,所以我们就可以把Mybatis的配置文件给删除掉了(因为在做Mybatis和Spring容器的整合的过程中,Mybatis的配置文件中只剩下一个 分页插件 的描述了)。
5SpringBoot的配置类
Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置。
*注解Configuration 和 注解@Bean Spring的Java配置方式是通过 @Configuration 和 @Bean 这两个注解实现的: 1、@Configuration 作用于类上,相当于一个xml配置文件; 2、@Bean 作用于方法上,相当于xml配置中的<bean id=”” class=””></bean>;
我们可以用Java配置配置 事务管理器和配置数据源,配置SqlSessionFactory,从而代替在IOC容器中的配置。
例如写一个SpringBoot在上传下载文件时所需要的用到的配置,配置外部文件映射的类MyWebMvcConfigurer
package baobaobaobao
.config
;
import org
.springframework
.context
.annotation
.Configuration
;
import org
.springframework
.web
.servlet
.config
.annotation
.ResourceHandlerRegistry
;
import org
.springframework
.web
.servlet
.config
.annotation
.WebMvcConfigurer
;
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry
) {
System
.out
.println("静态请求通过虚拟路径到外部资源映射");
registry
.addResourceHandler( "/view/**").addResourceLocations("file://");
}
}