快速开始spring boot应用
官方向导搭建boot应用
1.地址:http://start.spring.io/
2.设置项目属性:
3.解压,拷贝到工作空间,导入maven项目
4.写Controller: HelloController.java
5.启动Spring Boot入口类:DemoApplication
普通maven工程搭建boot应用
1.新建一个普通的maven工程,选择quickstart
【注意:Spring boot是web工程,但是我们这里只需要建立quickstart即可,因为spring boot内嵌了servlert容器】
2.查看官方文档:https://projects.spring.io/spring-boot/ 点击quick start
3.选择版本【1.5.10.RELEASE】,建议:生产环境中选择稳定的版本
4.拷贝依赖的父pom到自己的工程pom文件中:
org.springframework.boot
spring-boot-starter-parent
1.5.10.RELEASE
org.springframework.boot
spring-boot-starter-web
5.从上面的第一个boot项目的pom中拷贝项目构建的内容到当前工程中(以下内容为每个maven项目都必须要的):
6.如果项目出现红叉,选择项目 – 》右键 --》Maven–》Update Project
7.拷贝文档中的事例代码SampleController.java到工程中
8.Run as --> Java Application启动SampleController.java
9.浏览器输入:http://localhost:8080/ 即可
当然,除了以上两种方式搭建boot工程,也可以通过其它工具快速生成,例如idea , sts,spring boot cli等
这些工具集成了spring boot特性 ,可以一键生成springboot工程骨架
Starter POM
统一父POM管理
建立boot-parent工程
好,首先我们建立一个 boot-parent的maven工程:
然后修改pom.xml
1.packaging改为为pom格式:
pom
2.加入dependencyManagement, 同时去掉version, 直接使用父pom中的版本即可
3.删除无用的源文件,只保留pom.xml
4.修改pom.xml,加入如下内容,从上面获取即可:
那么我们要成为一个springboot项目,必须要引入他的父pom对不对:
于是加入他的父pom:
org.springframework.boot
spring-boot-parent
1.5.10.RELEASE
建立boot-base工程:
建立boot-base工程,实现之前的helloworld功能:
1.在boot-parent工程上面,建立maven module模块工程
2.把之前的SampleController.java复制过来,但是会报错,这时候,加入如下内容:
org.springframework.boot
spring-boot-starter-web
1.如果报错,如下:
2.需要修改父pom.xml中内容,boot-parent中的pom.xml,加入如下内容:
3.启动SampleController,然后访问:http://localhost:8080/
spring boot一个很重要的特点:解决了所有依赖的版本问题
spring boot 测试
1.添加测试支持依赖:spring-boot-starter-test
org.springframework.boot
spring-boot-starter-test
test
注意:加入这个依赖之后,junit包就可以不用了,因为test的starter中包含了junit
备注:怎么找到所有的starter:
这里面ctrl +f 搜索:starter,就可以看到spring boot中的所有starter
1.在测试包中建立测试程序类,测试SampleController
3.编写测试类:
so easy
spring boot 启动注解分析
1.@EnableAutoConfiguration:开启自动配置功能
@ComponentScan(basePackages={“com.example.boot”}) 包扫描
2.@SpringBootApplication配置详解:
他是一个组合注解,他内部主要包含三个子注解:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
@SpringBootConfiguration:他继承@Configuration,说明这是一个配置类,什么是配置类呢?就相当于我们以前写的xml配置,例如我们我们的bean标签,用来实例化一个bean。那么在这个配置类中就是实现以前我们xml配置的功能
@EnableAutoConfiguration:开启自动配置功能,他会扫描带有@Configuration的类,然后初始化这些配置类中的信息并且加入到应用上下文中去,同时完成一些基本的初始化工作
@ComponentScan:组件包扫描,也就是我现在需要扫描哪些包下面的注解,可自动发现和装配一些bean。默认扫描当前启动类所在包下面的类和下面的所有子包
spring boot 热加载/部署
1.加入springloaded
org.springframework
springloaded
2.加入spring-boot-devtools
org.springframework.boot
spring-boot-devtools
3.启动程序,访问浏览器出现第一个结果,然后修改控制器输出内容,再次刷新看到新的结果
同时在控制台可以看待这样一句话:
o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
项目打包部署
1.修改boot-parent中pom.xml文件,增加如下内容(当然也可以把下面的内容复制到子模块中也是可以的)
2.执行maven install
3.在target目录下面,可以看到打包的jar文件
4.执行java -jar xx.jar
例如:
D:\tools\javaSE1.8\jdk1.8\bin>java.exe -jar D:\01_dev_env\repos\com\example\boot\boot-base\0.0.1-SNAPSHOT\boot-base-0.0.1-SNAPSHOT.jar
【注意:执行jar的jdk版本需要与jar打包编译的版本一致。如果配置了环境变量,直接使用java命令打包即可】
这就是微架构,一个程序打包之后轻轻松松在如任何地方一执行就完成了。
Spring Boot属性配置文件详解
修改端口
application.properties:
server.port=8888
另外,也可以直接在运行jar包的时候修改
java -jar xx.jar --server.port=8888
自定义属性及获取
1.application.properties中[文件改成UTF-8]:
teacher.id=1
teacher.name=zhangsan
2.@Value("KaTeX parse error: Expected '}', got 'EOF' at end of input: …ller { @Value("{
teacher.name}")
private String teacherName;
@RequestMapping("/")
@ResponseBody
public String home() {
return “Hello World!” + this.teacherName;
}
}
参数引用
application.properties
teacher.id=1
teacher.name=zhangsan
teacher.info=Teacher ${
teacher.name}'s number is ${
teacher.id}
随机内容生成
随机字符串
random.string=${random.value}
随机int
random.number=${random.int}
随机long
random.long=${random.long}
1-20的随机数
random.b=${random.int[1,20]}
多环境配置
我们在开发应用时,通常一个项目会被部署到不同的环境中,比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口等等配置都会不同,对于多环境的配置,大部分构建工具或是框架解决的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包,Spring Boot也提供了支持
在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境
至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile}值。
比如:spring.profiles.active=dev就会加载application-dev.properties配置文件中的内容
案例:
在dev, test, prod这三个文件均都设置不同的server.port端口属性,如:dev环境设置为8081,test环境设置为8082,prod环境设置为8083
application.properties中设置spring.profiles.active=dev,就是说默认以dev环境设置
总结:
1.application.properties中配置通用内容,并设置spring.profiles.active=dev,以开发环境为默认配置
2.appli