Spring Data JPA
继承了
Repository的接口会被自动扫描到,我们不需要做任何配置。如果需要配置,设置spring.jpa.*属性。例如下面指定了数据的生成策略。
spring.jpa.hibernate.ddl-auto=update
H2的web控制台
H2嵌入式数据库提供了一个基于web界面的控制台。这个控制台也可以由Spring自动配置。当(1:存在H2相关jar包,2:当前程序是一个web程序,3:devtoos存在)的情况下,Spring便会自动配置H2控制台。
web控制台的访问路径默认为/h2-console。我们可以使用spring.h2.console.path属性修改它。
H2 web控制台
如图,这是一个完整的交互界面,我们可以方便的在这里处理数据。如果需要设置访问控制权限,添加下面的属性。
- security.user.role
- security.basic.authorize-mode
- security.basic.enabled
如果不想使用该控制台,可以使用spring.h2.console.enabled=false关闭它。在生产环境中记得把它关掉。
最后我要说一点,Spring Boot文档包含了很多其他Spring项目的自动配置,这里不可能全写完。所以如果需要详细信息的话还是直接啃文档吧。
其他配置
调试工具(devtools)
如果使用Maven,添加下面的依赖。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies>
如果使用Gradle,添加下面的依赖。
dependencies { compile("org.springframework.boot:spring-boot-devtools") }
这样就可以将调试工具添加到项目中。调试工具添加了热更新、自动重启等几个非常有用的调试功能。自动重启需要Spring检测到类路径上有更改,在Spring
Tool Suite中,简单的保存文件即可达到效果。如果在Intellij IDEA中,只能选择Build Project。
输出日志
Spring
Boot默认使用Logback来打印日志。不过我们直接使用slf4j提供的接口就可以了。slf4j和Logback也都由Spring自动配置好了。我们只需要在属性文件中设置日志级别即可。
logging.level.yitian.study=debug
然后在代码中调用slf4j的日志接口并打印日志即可。
@Controller public class MainController { private Logger logger = LoggerFactory.getLogger(MainController.class); @RequestMapping("/") public String index(@RequestParam(defaultValue = "苟") String name, Model model) { model.addAttribute("name", name); logger.debug("访问了主页"); return "index"; } }
日志信息和Spring的输出格式一样。另外随着日志级别的变化,日志的颜色也会在绿、黄和红之间变化,非常方便。
2017-03-16 23:50:19.628 INFO 17220 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 4 ms 2017-03-16 23:50:19.632 ERROR 17220 --- [nio-8080-exec-1] yitian.study.controller.MainController : 访问了主页
自定义Banner
这个Banner也是可以定制的。在类路径(也就是resource文件夹下)添加banner.txt,Banner就会使用你的文本。Banner甚至可以是一张图片,支持gif、jpg、png等格式。Spring会将图片转换成字符形式。
Servlet容器
默认情况下Spring使用Tomcat作为嵌入式容器。
端口号
端口号使用server.port设置。如果希望在运行时随机分配一个未使用的端口号,可以将端口号设置为0:server.port=0。
使用Jetty
spring-boot-starter-web包默认使用Tomcat,如果我们希望使用Jetty,就需要排除Tomcat的包。使用Maven的话,这么做。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency>
如果使用Gradle的话,这么做。
configurations { compile.exclude module: "spring-boot-starter-tomcat" } dependencies { compile("org.springframework.boot:spring-boot-starter-web:2.0.0.BUILD-SNAPSHOT") compile("org.springframework.boot:spring-boot-starter-jetty:2.0.0.BUILD-SNAPSHOT") // ... }
响应压缩
使用server.compression.enabled=true启用HTTP的响应压缩。默认情况下要压缩的响应体至少需要2048字节,可以使用server.compression.min-response-size修改这个值。
打包和运行
Spring
Boot项目默认打包为jar文件。我们可以使用Maven或Gradle的打包命令来打包项目。打包好之后,就可以和一般jar文件一样,使用java命令来运行了。如果希望打包为war文件的话也可以,不过由于篇幅所限就不介绍了。直接看源文档吧。
系统监控(Actuator)
Actuator我没理解怎么翻译,所以凭我的感觉就叫做系统监控吧。这些功能可以帮助我们监控正在运行的Spring
Boot项目。要启用监控功能,需要添加spring-boot-starter-actuator。使用Maven的话,添加下面的依赖。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
如果使用Gradle的话,添加下面的依赖。
dependencies { compile("org.springframework.boot:spring-boot-starter-actuator") }
端点(Endpoints)
每个端点就是一个监控项。Spring包含了很多端点,详细列表在这里47.
Endpoints。除了health之外,其余端点都属于敏感信息,在没有设置Spring
Security的情况下无法访问。为了简单的在本地访问,我们可以设置management.security.enabled=false。注意该选项在生产环境中务必打开,保证服务器信息不会泄露。
端点的访问路径默认是/端点名,例如health的访问路径就是/health。比较有用的几个端点是beans(列出当前所有已注册的Spring
Beans)、mappings(所有的控制器映射路径)、trace(最近100个HTTP连接的信息)、health(服务器当前的运行状态和磁盘剩余空间以及数据库的运行状态)。还有一个有趣的端点是shutdown,当我们向/shutdown发送post请求时服务器就会关闭,不过该功能是默认关闭的。
端点可以在属性文件中设置,每个端点敏感性和是否启用都是可以定制的。
endpoints.beans.sensitive=false endpoints.shutdown.enabled=true
端点的访问也是可以定制的。
management.port=8081 management.address=127.0.0.1
好了,Spring Boot框架的介绍到此为止。我们已经基本看到了Spring
Boto的使用方法。当然官方文档还有很多内容这里没有列出。这里也不可能完全列出来。如果需要更详细的介绍还是直接看官方文档吧。没有比这个更全面的了。