本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1.概念
- 约定大于配置
- 按条件配置Bean
- @SpringBootApplication= @ComponentScan+@Configuration+@EnableAutoConfiguration
1.1元注解
@Retention(注解保留的位置)
- @Retention(RetentionPolicy.SOURCE) 注解仅存在于源码中,在class字节码文件中不包含
- @Retention(RetentionPolicy.CLASS) 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获
- @Retention(RetentionPolicy.RUNTIME) 注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Target (注解的目标)
- @Target(ElementType.TYPE) //接口、类、枚举、注解
- @Target(ElementType.FIELD) //字段、枚举的常量
- @Target(ElementType.METHOD) //方法
- @Target(ElementType.PARAMETER) //方法参数
- @Target(ElementType.CONSTRUCTOR) //构造函数
- @Target(ElementType.LOCAL_VARIABLE)//局部变量
- @Target(ElementType.ANNOTATION_TYPE)//注解
- @Target(ElementType.PACKAGE) ///包
@Document(注解被包含在javadoc文档中)
1.2全局配置文件
- application.properties
- application.yml
1.3自动配置运行原理(参照源码)
@SpringBootApplication》EnableAutoConfiguration》AutoConfigurationImportSelector》getCandidateConfigurations》SpringFactoriesLoader》META-INF/spring.factories
由@Import提供,其导入的AutoConfigurationImportSelector的selectImports()方法通过SpringFactoriesLoader.loadFactoryNames()扫描所有具有META-INF/Spring.factories的jar包。spring-boot-autoconfigure-x.x.x.x.jar里面就有一个spring.factories文件。
2.应用
2.1 SpringBoot核心maven依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependencies>
主方法,运行则启动tomcat
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2.2 Springboot 部署(本质是一个java程序)
采用两种方式:打包成jar,打包成为war
jar方式
cd C:\Users\X7TI\Downloads\springboot mvn install
启动
java -jar target/springboot-0.0.1-SNAPSHOT.jar
war方式
主方法继承SpringBootServletInitializer,并加@ServletComponentScan注释
@SpringBootApplication
@ServletComponentScan
public class Application extends SpringBootServletInitializer
pom.xml
<packaging>war</packaging>(打包成war方式)
添加tomcat依赖,scope属性改为provided,避免和独立tomcat冲突
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
创建war包
mvn clean package
2.3 热部署(自启动)
(注:pom文件中增加了jar包的依赖,热部署失效,得手动重启) 在pom文件增加一个devtools依赖和maven插件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
2.4多配置文件
在application.properties配置文件中命名
spring.profiles.active=pro
部署的时候应用
java -jar target/springboot-0.0.1-SNAPSHOT.jar --spring.profiles.active=pro
2.5 持久层
基于hibernate的JpaRepository,接口DAO继承JpaRepository,就提供CRUD、分页操作,不需要写SQL。 Mybatis数据库连接配置参数
<!--视图定位-->
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
<!--数据库配置-->
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=admin
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
<!--映射xml文件路径-->
mybatis.mapper-locations=classpath:com/how2java/springboot/mapper/*.xml
<!--指定别名-->
mybatis.type-aliases-package=com.how2java.springboot.pojo
pom增加依赖
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
2.6 实现CRUD
pagehelper分页依赖,写pagehelper配置类,Mapper(方法上用注解实现SQL),Controller控制类,调用Mapper接口实现增删改查,利用pagehelper进行分页操作
2.7 单元测试
添加Junit依赖,写测试类,类上增加@RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class)两个注解,调用方法显示数据
2.8 Restful风格
@GetMapping(查询) @PostMapping(修改) @DeleteMapping(删除) @PutMapping(增加)
2.9 Redis
添加pom依赖,properties文件配置,主方法上增加注解@EnableCaching开启缓存,写缓存配置类