Spring Boot 简介 概述 随着动态语言的流行 (Ruby
、Groovy
、Scala
、Node.js
),Java
的开发显得格外的笨重:繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术集成难度大。
在上述环境下,Spring Boot
应运而生。它使用“习惯优于配置”
(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速的运行起来。使用 Spring Boot
很容易创建一个独立运行(运行 Jar
,内嵌 Servlet
容器)准生产级别的基于 Spring
框架的项目,使用 Spring Boot
你可以不用或者只需很少的 Spring
配置。
Spring Boot 优缺点 优点
快速构建项目
对主流开发框架的无配置集成
项目可独立运行,无需外部依赖 Servlet 容器
提供运行时的应用监控
极大地提高了开发、部署效率
与云计算的天然集成缺点
版本迭代速度很快,一些模块改动很大
由于不用自己做配置,报错时很难定位
网上现成的解决方案比较少
第一个 Spring Boot 应用程序 概述 这里我们使用 Intellij IDEA 2018
来新建一个 Spring Boot
项目
打开 IDEA -> New Project -> Spring Initializr
填写项目信息
选择 Spring Boot 版本及 Web 开发所需的依赖
保存项目到指定目录
工程目录结构 创建完成后的工程目录结构如下:
.gitignore:Git 过滤配置文件
pom.xml:Maven 的依赖管理配置文件
HelloSpringBootApplication.java:程序入口
resources:资源文件目录
static: 静态资源文件目录
templates:模板资源文件目录
application.properties:Spring Boot 的配置文件,实际开发中会替换成 YAML 语言配置(application.yml)
pom.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 <?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 https://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.2.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.zysheep</groupId> <artifactId>hello-spring-boot</artifactId> <version>1.0.0-SNAPSHOT</version> <name>hello-spring-boot</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <!-- 在工作中,很多情况下我们打包是不想执行测试用例的 可能是测试用例不完事,或是测试用例会影响数据库数据 跳过测试用例执 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--跳过项目运行测试用例--> <skipTests>true</skipTests> </configuration> </plugin> </plugins> </build> </project>
parent:继承了 Spring Boot
的 Parent
,表示我们是一个 Spring Boot
工程
spring-boot-starter-web:包含了 spring-boot-starter
还自动帮我们开启了 Web
支持
功能演示 我们只需要在HelloSpringBootApplication类上添加@RestController
注解,添加方法:
1 2 3 4 @RequestMapping(value = "", method = RequestMethod.GET) public String sayHello() { return "Hello Spring Boot"; }
启动 HelloSpringBootApplication
的 main()
方法,浏览器访问 http://localhost:8080
可以看到:
神奇之处
没有配置 web.xml
没有配置 application.xml,Spring Boot 帮你配置了
没有配置 application-mvc.xml,Spring Boot 帮你配置了
没有配置 Tomcat,Spring Boot 内嵌了 Tomcat 容器
Spring Boot 单元测试 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; @RunWith(SpringRunner.class) @SpringBootTest(classes = HelloSpringBootApplication.class, webEnvironment = SpringBootTest.WebEnviro public class HelloSpringBootApplicationTests { @LocalServerPort private int port; private URL base; @Autowired private TestRestTemplate template; @Before public void setUp() throws Exception { this.base = new URL("http://localhost:" + port + "/"); } @Test public void test1() { ResponseEntity<String> response = template.getForEntity(base.toString(), String.class); assertThat(response.getBody(), equalTo("Hello Spring Boot")); } }
Spring Boot 常用配置 自定义 Banner 在 Spring Boot
启动的时候会有一个默认的启动图案
1 2 3 4 5 6 7 . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.2.2.RELEASE)
我们在 src/main/resources
目录下新建一个 banner.txt
通过 http://patorjk.com/software/taag 网站生成字符串,将网站生成的字符复制到 banner.txt
中
再次运行这个程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ${AnsiColor.BRIGHT_RED} //////////////////////////////////////////////////////////////////// // _ooOoo_ // // o8888888o // // 88" . "88 // // (| ^_^ |) // // O\ = /O // // ____/`---'\____ // // .' \\| |// `. // // / \\||| : |||// \ // // / _||||| -:- |||||- \ // // | | \\\ - /// | | // // | \_| ''\---/'' | | // // \ .-\__ `-` ___/-. / // // ___`. .' /--.--\ `. . ___ // // ."" '< `.___\_<|>_/___.' >'"". // // | | : `- \`.;`\ _ /`;.`/ - ` : | | // // \ \ `-. \_ __\ /__ _/ .-` / / // // ========`-.____`-.___\_____/___.-`____.-'======== // // `=---=' // // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // // 佛祖保佑 永不宕机 永无BUG // ////////////////////////////////////////////////////////////////////
常用属性设置:
${AnsiColor.BRIGHT_RED}
:设置控制台中输出内容的颜色
${application.version}
:用来获取 MANIFEST.MF
文件中的版本号
${application.formatted-version}
:格式化后的 ${application.version}
版本信息
${spring-boot.version}
:Spring Boot
的版本号
${spring-boot.formatted-version}
:格式化后的 ${spring-boot.version}
版本信息
配置文件 Spring Boot
项目使用一个全局的配置文件 application.properties
或者是 application.yml
,在 resources
目录下或者类路径下的 /config
下,一般我们放到 resources
下。
修改 Tomcat
的端口为 9090
,并将默认的访问路径 “/“ 修改为 "boot"
,可以在 application.yml
中添加:
1 2 3 4 server: port: 9090 servlet: context-path: /boot
Starter POM Spring Boot
为我们提供了简化企业级开发绝大多数场景的 starter pom
,只要使用了应用场景所需要的 starter pom
,相关的技术配置将会消除,就可以得到 Spring Boot
为我们提供的自动配置的 Bean
。
日志配置 Spring Boot
对各种日志框架都做了支持,我们可以通过配置来修改默认的日志的配置
默认情况下,Spring Boot
使用 Logback
作为日志框架
1 2 3 logging: file: logs/spring-boot-hello.log level.org.springframework.web: DEBUG
关闭特定的自动配置 关闭特定的自动配置使用 @SpringBootApplication
注解的 exclude
参数即可,这里以关闭数据源的自动配置为例
1 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})