Spring Boot提供的特色

一、导览

本文主要遵循以下模块介绍spring Boot(1.3.6.RELEASE)提供的表征。

  1. SpringApplication类
  2. 外部化配置
  3. Profiles
  4. 日志
  5. 开发WEB应用
  6. Security
  7. 使用SQL
  8. 使用NoSQL
  9. 缓存
  10. 消息
  11. 出殡邮件
  12. JTA处理分布式事务
  13. Spring Session
  14. 测试
  15. Actuator
  16. 部署

二、SpringApplication类

每当主类——即蕴涵@SpringBootApplication注解类,的main方法里调用SpringApplication.run(应用之Configration配置类.class,参数列表)
会启动spring应用。默认log级别是INFO,会展示有系的开行详情,比如启动以之用户等。

1. 行使SpringApplicationBuilder类可以创建分层的 ApplicationContext

new SpringApplicationBuilder()
.bannerMode(Banner.Mode.OFF)
.sources(Parent.class)
.child(Application.class)
.run(args);

2. Application事件以及监听器

除了常用之Spring
framework事件,例如ContextRefreshedEvent等,SpringApplication也会见发送一些别的运事件。 
局部波于ApplicationContext被创造之前就于触发,因此无法将监听器注册也bean来监听。但是足以运用SpringApplication.addListeners(…)
或SpringApplicationBuilder.listeners(…)来报监听器。也可当META-INF/spring.factories文件定义监听器: 
org.springframework.context.ApplicationListener=com.example.project.MyListener 
应用运行时,应用事件发送顺序如下: 

在监听器和初始化器被初始化之后,任何其它以之前,应用正开始运行时会发送一个ApplicationStartedEvent。 

在context被创造之前,context中若采用的Environment被喻常,一个ApplicationEnvironmentPreparedEvent被发送。 

在bean定义为加载后,refresh启动前,一个ApplicationPreparedEvent被发送。 

在refresh以及另外相关的回调被处理以后,一个ApplicationReadyEvent被发送,表明以已备好服务requests。 
⑤ 启动时要有特别,一个ApplicationFailedEvent被发送。

3. web环境

SpringApplication会根据使用是否为web来创造不同之ApplicationContext:
AnnotationConfigApplicationContext或AnnotationConfigEmbeddedWebApplicationContext。 
可以调用setWebEnvironment(boolean
webEnvironment)复写默认实现(在junit测试时置为false最好),更足以setApplicationContextClass(…).完全控制ApplicationContext的创办。

4. 于SpringApplication.run完成前执行一定代码

应用ApplicationRunner或CommandLineRunner,并配合Order注解指定调用顺序。 
CommandLineRunner的run(String
…args)方法直接访问SpringApplication.run传递的参数,ApplicationRunner的run方法则利用ApplicationArguments访问参数。例如:

import org.springframework.boot.*
import org.springframework.stereotype.*
@Component
public class MyBean implements CommandLineRunner {
public void run(String... args) {
// Do something...
}
}

其三、外部化配置

1. 什么引用配置的性质

而是使用properties文件,YAML文件,环境变量,命令执行参数(如
–name=”fuck”)来外部化配置。属性值可以采取@Value注解直接注入及bean中,并通过Spring的Environment抽象或经@
ConfigurationProperties 注解绑定到结构化对象来拜访。 
示例: 
YAML文件: 
图片 1 
抑或同一的properties文件: 
图片 2

采用@Value注入单个属性: 
图片 3

运用@ ConfigurationProperties注入属性族: 
图片 4 
※ 注意里面用了JSR-303注解来校验属性值。

@ ConfigurationProperties还得就此到@Bean注解的法及。 
图片 5

2. 性加载顺序

Spring按照如下顺序设置properties: 
(一) 命令行参数。如:Java -jar
app.jar –name=”Spring” 
(二) SPRING_APPLICATION_JSON。如java
-Dspring.application.json=’{“foo”:”bar”, “hehe”:”fuck”}’ -jar
fuckapp.jar 
(三) 来自于java:comp/env的JNDI属性 
(四) Java System properties
(System.getProperties()). 
(五) OS环境变量 
(六) 只有在random.*里富含的特性会有一个RandomValuePropertySource 
(七) jar包外部的,由profile指定的application
properties文件(application-{profile}.properties或YAML文件) 
(八) jar包内部的,由profile指定的application
properties文件(application-{profile}.properties或YAML文件) 
(九) jar包外部的application
properties(application.properties和YAML)。 
(十) jar包内部的application
properties(application.properties和YAML)。 
(十一) @Configuration注解类内部的@PropertySource注解 
(十二) 由SpringApplication.setDefaultProperties设置的默认属性

YAML是JSON的超集,非常适合定义层级化配置数据。引入SnakeYAML库会如SpringApplication类自动支持YAML。使用spring-boot-starter会自动引入YAML。

四、Profiles

Spring
Profiles提供了相同种植隔离应用程序配置的章程,并叫这些配置只能于特定的环境下生效。

1. 什么样安排profile

其它@Component或@Configuration都能给@Profile标记,从而限制加载它的空子。 
例如:

@Configuration
@Profile("production")
public class ProductionConfiguration {
// ...
}

2. 怎么样当构建时指定profile

为常规的Spring方式,你可以使一个spring.profiles.active的Environment属性来指定哪个配置生效。你可采取平常之任 
何方式来指定该属性,例如,可以用她含有到公的application.properties中:

spring.profiles.active=dev,hsqldb

还是采取命令执行开关:

--spring.profiles.active=dev,hsqldb

2.1 添加激活的配备(profiles)

spring.profiles.active属性和任何性能一样都以上文中涉及属性加载规则,优先级最高的PropertySource获胜。也就是说,你得当application.properties中指定生效之配置,然后以指令行中设置和名属性的异值来替换其。

稍稍上,将profile特定的性能加至active
profile中,而休是直调换会重发生因此。spring.profiles.include属性就足以为此来无条件增加active
profiles。SpringApplication类也供api设置额外的profile(setAdditionalProfiles()) 
例如,按照下面的安排:

---
my.property: fromyamlfile
---
spring.profiles: prod
spring.profiles.include: proddb,prodmq

一旦运用启动时打开选–spring.profiles.active=prod,则proddb和prodmq也会见吃激活。

2.2 编程方式设置profile

每当调用SpringApplication.run之前调用SpringApplication.setAdditionalProfiles(…)即可。实现ConfigurableEnvironment接口也行。

2.3 profile特定的安排文件

除开application.properties文件,profile特定的性质也克由此application-{profile}.properties来定义。Spring
boot提供了默认的application-default.properties文件,在并未定义任何profile时会加载。

profile特定的习性从同标准application.properties相同之门径加载,并且特定profile文件会挂默认的配置。如果声明了络绎不绝一个profile,则最后声明的于采取。

2.4 属性中的占有位符(placeholders)

application.properties中之值会将由Environment过滤,所以若可一直饮用之前定义之价值:

app.name=MyApp
app.description=${app.name} is a Spring Boot application

五、日志

Spring Boot内部日志使用Commons Logging,但是付出底层日志实现。会呢Java
Util Logging, Log4j,
Log4j2和Logback提供默认配置。不论哪种配备,loggers都给先行配置为运用console输出,并提供一个可选的文书输出。

默认情况下,如果是采用’Starter POMs’,Logback将给看作日志实现。

1. Log 格式

Spring Boot默认的log格式如下:

2016-07-14 17:27:33.212  INFO 13092 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3832 ms
2016-07-14 17:27:33.668  WARN 13092 --- [ost-startStop-1] .s.b.d.a.RemoteDevToolsAutoConfiguration : Listening for remote debug traffic on /.~~spring-boot!~/debug

显以下内容:

  • 日期及岁月—毫秒精度,利于排序
  • Log级别—ERROR, WARN, INFO, DEBUG or TRACE.
  • PID.
  • 一个— 分隔符,表明实际log消息的上马
  • 线程名—方括号中显示(控制高出口时或许会见为简单)
  • Logger名—一般是类名的缩写格式
  • log消息

  • 决定高出口


默认,log信息被形容输出及控制台,输出ERROR, WARN,
INFO级别。可以经过以下手段激活debug模式,输出更多之信息:

  • 以命令下用 –debug 选项
  • 在application.properties中添加debug=true

开启debug模式继,一些中心的loggers(如放置的servlet容器,hibernate跟Spring)被安排输出更多之信息。

请注意 
此处被的debug模式,并非将公采取之日记级别修改为DEBUG级别。

Spring
Boot输出日志到控制台时,会检测console是否支持ansi,如果支持,会显示彩色的日志。可以告一段落这种检测,或变更检测策略: 
以 spring.output.ansi.enabled 改呢外值即可(默认是detect)。

3. 文本输出

默认,Spring
Boot只输出日志到console。如果还眷恋出口及文件,需要装logging.file或logging.path属性。 
其的结如下:

logging.file logging.path Example Description
  只输出到console
具体文件名 my.log console和日志文件。文件名还可以带路径
具体路径 /var/log console和路径下的spring.log。路径可绝对可相对

4. 日记级别

具支持的日志系统在Spring的Environment(例如当application.properties里)都好经’logging.level.*=LEVEL’(’LEVEL’是TRACE,
DEBUG, INFO, WARN,ERROR, FATAL, OFF中之一个)来安日志级别。root
logger可以经过logging.level.root来安排。 
示例:application.properties

logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

5. 打定义日志配置

用相应jar包放到依赖中,即可激活对应之日记框架。将日志的布文件放到classpath的根目录下,或者坐logging.config指定路线下,就可起定义日志的输出。

注意 
因为logging实在ApplicationContext被创造之前即初始化的,因此无法通过@Configuration注解类的@PropertySources来控制日志。而不得不通过网性能,环境变量和Spring
Boot的表面配置文件等来布局

同日志系统相互呼应之公文会受活动加载:

日志系统 配置文件
logback logback-spring.xml, logback-spring.groovy, logback.xml,logback.groovy
Log4j log4j-spring.properties, log4j-spring.xml, log4j.properties,log4j.xml
Log4j2 log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging) logging.properties

注意 
推荐使用-spring后缀的布文件,例如logback-spring.xml,而非logback.xml。否则Spring可能无法完全控制log的初始化。

注意 
Java Util Logging可能会见造成类似加载问题,不推荐使用。

6. Logback扩展

Spring
Boot为Logback提供了有尖端配置属性。可以在logback-spring.xml中采用。

注意 
不能够重复logback.xml中行使,因为是文件加载的无比早。要么在logback-spring.xml中动用,要么定义logging.confi属性。

6.1 Profile特定的布置

<springProfile> 标签允许而因Spring
profiles加入或者排除部分部署。 
例如:

<springProfile name="staging">
<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>
<springProfile name="dev, staging">
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>
<springProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>

6.2 Environment属性

<springProperty> 标签允许你当logback配置文件中采用Spring
Environment的属性。这可让你在logback配置中行使application.properties中之价值。 
例如:

<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
<remoteHost>${fluentHost}</remoteHost>
...
</appender>

六、开发web应用

Spring
Boot非常适合开发web应用。你可以内嵌的Tomcat,Jetty或Undertow轻松创建一个HTTP服务器。大多数之web应用还采取spring-boot-starter-web模块进行快捷搭建以及运转。

1. Spring MVC

Spring Web MVC框架是一个松动”模型,视图,控制器”的web框架。
允许你创造特定的@Controller或@RestController beans来处理传入的HTTP请求。
使用@RequestMapping注解可以将控制器中之主意映射到相应的HTTP请求。 
Spring Boot为MVC提供了一旦自行配置,模板引擎等众多表征。

1.1 自动配置

Sprint boot为mvc增加如下自动配置:

  • 引入ContentNegotiatingViewResolver和BeanNameViewResolver beans。 

    ContentNegotiatingViewResolver凡ViewResolver的如出一辙栽实现,其依据请求的media
    type来吗要选择一个方便的View。请求的mediatype由ContentNegotiationManager决定。一旦请求的media
    type被操纵,这个resolver查询所有的view
    resolver,并赶回最般配的。可以指定ContentNegotiatingViewResolver
    的defaultViews属性,在mediatype匹配时将祭是defaultViews指定的viewResolver。 
    比如说,一个/view.html的请会错过探寻content
    type为text/html的viewresolver;一个门路为/view,并且header中Accept为text/html的乞求也同理。 
    ② BeanNameViewResolver也是均等栽viewresolver,简单的用view
    name解释成bean 
    name。如controller中返回”view”,会去找id为view的bean。

  • 对静态资源的支撑,包括对WebJars的支撑。

  • 自动注册Converter,GenericConverter,Formatter beans 
    Converter<S,T>用来将S转换成T

  • 对HttpMessageConverters的支持。 
    可是拿对象转换成Http request/response,或者相反。Spring
    MVC中,object可以活动转换成Json(Jackson库)或XML(Jacksonxml或者jaxb)。String使用utf-8编码。

  • 自动注册MessageCodesResolver。

  • 对静态index.html的支持。

  • 对自定义Favicon的支撑。

  • ConfigurableWebBindingInitializer bean的自动使用。


若一旦了掌控springmvc,应丰富自己的@Configuration和@EnableWebMVC注解的切近。若想保留Spring
boot mvc的特色,同时补充加额外的mvc配置(如拦截器,formatters,view
controllers等),你得增长自己的WebMvcConfigurerAdapter类型的@Bean(不以@EnableWebMVC注解)。

1.2 静态内容

默认情况下,Spring
Boot从classpath的/static(/public,/resources或/META-INF/resources)的文书夹或由ServletContext根目录提供静态内容。 
即时使了Spring
MVC的ResourceHttpRequestHandler,所以你得透过长自己之WebMvcConfigurerAdapter并覆写addResourceHandlers方法来转者行为(加载静态文件)。 
如若您的行使将受起包成jar,那便甭使用src/main/webapp文件夹。尽管该文件夹是一个一并之正规,但她独自于包装成war的场面下起作用,并且只要起一个jar,多数构建工具还见面沉寂的疏忽她。

1.3 模板引擎

Spring boot支持以下模板引擎的自发性配置:freemarker, groovy, thymeleaf,
velocity, mustache。 
Boot自动从src/main/resources/templates中搜寻模板。 
运用内置servlet容器时一旦避下jsp,原因如下:

  • 放tomcat不支持实施jar里的jsp。
  • Jetty于jsp时未支持内置容器个格式。
  • Undertow不支持jsp。

1.4 Error Handling

Spring
Boot默认提供一个/error映射用来为合适的法处理所有的一无是处,并且它们以servlet容器中注册了一个大局的
错误页面。 
怀念使全替换默认行为,可以兑现ErrorController接口,或者实现BasicErrorController类,由由定义的Controller处理错误。 
呢得通过@ContorllerAdavice注解+@ExceptionHandler注解定制某个controller或exception类别要赶回的JSON文档。如:

@ControllerAdvice(basePackageClasses = FooController.class)
public class FooControllerAdvice extends ResponseEntityExceptionHandler {
@ExceptionHandler(YourException.class)
@ResponseBody
ResponseEntity<?> handleControllerException(HttpServletRequest request, Throwable ex) {
HttpStatus status = getStatus(request);
return new ResponseEntity<>(new CustomErrorType(status.value(), ex.getMessage()), status);
}
private HttpStatus getStatus(HttpServletRequest request) {
Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
if (statusCode == null) {
return HttpStatus.INTERNAL_SERVER_ERROR;
}
return HttpStatus.valueOf(statusCode);
}
}

2. 嵌入的servlet容器

Spring Boot支持内嵌的Tomcat,
Jetty和Undertow服务器。多数开发者只待采取相当的’Starter
POM’来得到一个截然配置好的实例即可。默认情况下,内嵌的服务器会当8080端口监听HTTP请求。

2.1 将Servlets, filters, listeners注册为bean

享有定义也bean的servlets,filters,listeners都拿于内置的器皿注册。如果一味发一个servlet,它以受map到/,否则bean的名字会作为path前缀。Filters都用map到/*。 
否足以采用ServletRegistrationBean,FilterRegistrationBean and
ServletListenerRegistrationBean更完整的控制。

2.2 通过注解扫描servlet, filter listener

使用嵌入式容器时,要兑现@WebServlet,@WebFilter,
@Weblistener的自发性注册,需要使用@ServletComponentScan。使用独立容器时这个注解无用。

2.3 Servlet Context 初始化

置于的servlet容器不见面直接执行Servlet3.0+的javax.servlet.ServletContainerInitializer接口,或者Spring的
org.springframework.web.WebApplicationInitializer接口。这是为了避免有些被规划为运行于war内之老三着库会摔sprint
boot应用。独立httpserver下实现WebApplicationInitializer即可在代码中配置ServletContext,代替web.xml。 
倘得以spring boot应用中开展servlet context
初始化,你应该登记一个兑现了org.springframework.boot.context.embedded.ServletContextInitializer接口。

2.4 EmbeddedWebApplicationContext

此类是同栽特有之WebApplicationContext,启动时见面寻找一个EmbeddedServletContainerFactory,例如TomcatEmbeddedServletContainerFactory,
JettyEmbeddedServletContainerFactory, or
UndertowEmbeddedServletContainerFactory。Spring boot会自动配置这些。

2.5 配置嵌入式servlet容器

2.5.1 可以以如application.properties文件中配备servlet容器所用之性能

包括:

  • server.port:http监听端口
  • server.address: 要绑定的接口地址
  • server.session.persistence: session持久化
  • server.session.timeout:session超时时间
  • server.session.store-dir:session数据的location
  • server.session.cookie.*: session-cookie配置。
  • server.error.path:error page的地址
  • server.ssl.key-store, server.ssl.key-store-password,
    server.ssl.key-password: ssl的配置
  • server.compression.enabled: http response压缩
  • server.compression.min-response-size:压缩所用的卓绝小size,默认时2048字节
  • server.compression.mime-types:要减小的response content
    类型。默认时text/html, text/xml, text/plain, text/css

2.5.2 也可是经兑现EmbeddedServletContainerCustomizer接口在代码中修改属性

2.5.3 也可直接促成TomcatEmbeddedServletContainerFactory bean来安排

七、Security

1. 启用Security

当spring security在classpath中(即引入spring-boot-starter-security
pom),web应用将机关启用安全范围,并且默认启用basic认证。 
也可是通过@EnableGlobalMethodSecurity注解添加措施级别的安限制。

2. 配置Security

默认的AuthenticationManager有一个用户,名吧user,
密码会打印在log中,也可是装security.user.password属性修改密码。 
默认的security配置由SecurityAutoConfiguration配置类及其导入的配置类(SpringBootWebSecurityConfiguration配置web
security,
AuthenticationManagerConfiguration配置认证,此类在非web应用为适用)实现。 
一旦一旦完全关闭默认的web
security配置,可以长一个富含@EnableWebSecurity的bean,这样连无见面关闭authentication
manager配置。

@EnableWebSecurity注解使用方式 
以这个注解添加到含有@Configuration注解,并且实现了WebSecurityConfigurer接口或延续WebSecurityConfigurerAdapter类的类似方面,即可用此类替代xml设置web 
security。同时还而将部署内容放到外部属性文件被。

假使否想关闭authentication
manager配置,你可以追加一个AuthenticationManager的bean,或者经过将AuthenticationManagerBuilder注入到@Configuration类的一个艺术被来安排全局的AuthenticationManager。

3. Security带的特点

Web以中采用Spring Security以后,你可抱如下基本特性:

  • 一个饱含in-memory
    store的AuthenticationManager,和一个user(查看SecurityProperties.User获取user的性)。
  • 通用静态资源路不会见受平安范围:css/, /js/, \
    and **/favicon.ico
  • 任何部分还见面利用Http Basic安全保安。
  • 安全事件都见面为发表暨spring的ApplicationEventPublisher(包括证明成功,认证失败和拒绝访问等)
  • Spring Security提供的泛底层特性(HSTS, XSS, CSRF,
    缓存)默认都给拉开。

HSTS是什么 
HTTP Strict Transport
Security,HTTP严格传输安全。HSTS的企图是劫持客户端(如浏览器)使用HTTPS与服务器创建连接。服务器被HSTS的主意是,当客户端通过HTTPS发出请求时,在服务器返回的超文本传输协议应头被蕴含Strict-Transport-Security字段。非加密传输时设置的HSTS字段无效。 
参考: http://www.chinaz.com/program/2015/0511/405146.shtml

有着地方的布局都可经过外部属性文件修改。想使当匪改任何其他活动配置特点的前提下盖访问规则,可以追加一个WebSecurityConfigurerAdapter类型的bean。

苟被了spring-boot-actuator,会发出如下特点: 

– 即使使用路径不吃保障,被管制之路径也会遭遇保障。 

康宁息息相关的轩然大波让移为AuditEvents(审计事件),并宣布为AuditService。 

  • 默认的用户有ADMIN和USER的角色。 
    以外部属性能够修改Actuator(执行器)的安全特点(management.security.*)。为了掩盖应用程序的顾规则,你可添加一个WebSecurityConfigurerAdapter类型的@Bean。同时,如果不思挂执行器的拜访规则,你得利用@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)注解该bean,否则用@Order(ManagementServerProperties.ACCESS_OVERRIDE_ORDER)注解该bean。

八、使用SQL数据库

Spring Boot项目引入spring-boot-starter-data-jpa等即可使用Spring
Data与DB交互。除了spring框架提供的JdbcTemplate以及ORM,Spring
Data还提供了其余级别之力量,如创建Repository接口的贯彻,然后根据方法名来queries。

1. 安排数据源

Java的javax.sql.DataSource接口提供了一个业内的采取数据库总是的方法。传统做法是,一个DataSource使用一个URL和用户名/密码去初始化一个数据库连接。

1.1 内嵌数据库

Spring boot支持自动配置三种in-memory的嵌入式DB:H2, HSQL,Derby。 
不必提供URL,引入如下依赖即可使。例如,典型的pom如下:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>runtime</scope>
</dependency>

 

上文可以假设Spring Boot自动吗用配置in-memory的hsqldb数据库,并成立连接。

1.2 连接到一个生产环境数据库

当产环境面临,数据库连接可以运用DataSource池进行活动配置。Spring
boot自动配置DataSource池时的选择顺序如下:

  • 鉴于Tomcat数据源连接池的特性及出现,在tomcat可用时,我们连先使用她。
  • 要HikariCP可用,我们将运用它们。
  • 而Commons DBCP可用,我们用运她,但当生产环境不推荐以其。
  • 末段,如果Commons DBCP2可用,我们以使它。

一经采取了spring-boot-starter-jdbc或spring-boot-starter-data-jpa
‘starter POMs’,你拿会晤活动获取对tomcat-jdbc的靠。 
如若要改默认的多少源类型,或者指定其他的多寡源类型,可以以application.properties中指定。 
例如:

spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=xxxxxHikariCP

注:使用MySQL经常只要加进mysql
connector的指。

2. 使用JdbcTemplate

Spring的JdbcTemplate和NamedParameterJdbcTemplate类将让机关配置,你可以以协调之beans中经过@Autowire直接流入其。 
例如:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
private final JdbcTemplate jdbcTemplate;
@Autowired
public MyBean(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
// ...
}

3. JPA和Spring Data

Spring-boot-starter-data-jpa提供如下依赖:

  • Hibernate
  • Spring Data JPA
  • Spring ORMs

3.1 Entity类

传统上,JPA实体需要以persistence.xml中宣称。Spring
boot中不管需这样,它可以自动搜索Entity。 
默认在主配置类(标记有@EnableAutoConfiguration 或者
@SpringBootApplication)下的具有包会被搜寻,并且会找带有@Entity,
@Embeddable 或者 @MappedSuperclass的接近。

3.2 Spring Data JPA Repositories

Spring Data
JPA仓库(repositories)是故来定义访问数的接口。JPA会依据你的方名机关创建查询。比如,一个CityRepository接口可能声明一个findAllByState(String
state)方法,用来探寻给定状态的有市。 
继续Repository
、CrudRepository或者PagingAndSortingRepository接口的接口就为Spring
JPA的repositories。Spring
Boot会自动寻这些接口,并由此措施名自动生成JPA
queries。更扑朔迷离的询问而凭借Spring Data的Query注解。

3.3 创建同去JPA db

默认情况下,只有利用嵌入式DB(H2,
HSQL或Derby)时,jpa数据库才见面被电动创建。 
得经过spring.jpa.*性能来配置jpa,例如: 
spring.jpa.hibernate.ddl-auto=create-drop可开自动创建和去表,并且默认情况下,ApplicationContext启动后才见面执行DDL。 
spring.jpa.generate-ddl
也堪用来部署生成表,但是Hibernate自动配置下,该选择项不见面让激活,因为Hibernate的ddl-auto属性更适用。

九、使用NoSQL

Spring Data支持MongoDB, Neo4J,
Elasticsearch, Solr, Redis, Gemfire,
Couchbase 和Cassandra等NoSQL技术。 
Spring Boot可以自行配置内部的Redis, MongoDB, Elasticsearch, Solr 和
Cassandra。其他急需手动配置。

1. Redis

spring-boot-starter-redis自动导入依赖。Spring
boot会自动配置RedisConnectionFactory, StringRedisTemplate
或者RedisTemplate。默认,这些实例会接连localhost:6379。 
例子:

@Component
public class MyBean {
private StringRedisTemplate template;
@Autowired
public MyBean(StringRedisTemplate template) {
this.template = template;
}
// ...
}

倘若你上加一个投机之其它活动配置型的@Bean,它以替换默认的(除了RedisTemplate的情形,它是因bean的号’redisTemplate’而休是它的花色进行消除之)。如果当classpath路径下有commons-pool2,默认你会拿走一个连接池工厂。

2. MongoDB

spring-boot-starter-data-mongodb导入依赖。 
Spring
boot自动配置MongoDbFactory和MongoTemplate。默认实例使用mongodb://localhost/test 
然安装以下属性: 
spring.data.mongodb.uri (mongodb3.0) 
spring.data.mongodb.host (mongo 2.x) 
spring.data.mongodb.port 
Spring Data MongoDB也支持与Spring Data JPA一样的Repository接口,Spring
Data会冲办法名自动生成queries。

3. Solr

Apache Solr是单寻引擎。 Sprint Boot以Spring Data
Solr为Solr4客户端库提供基本的全自动配置。spring-boot-starter-datasolr导入依赖。Solr5暂勿支持。 
Spring Boot自动配置SolrServer,默认连接localhost:8983/solr 
Spring
Data也为Solr提供以及JPA一样的Repositories,只不过实体注解为@SolrDocument。

4. Elasticsearch

Elastic Search是一个开源之,分布式,实时搜索和分析引起擎。Spring
Boot利用Spring Data
Elasticserach为Elasticsearch提供基本的自动配置。spring-boot-starter-data-elasticsearch导入依赖。 
Spring
boot自动配置ElasticsearchTemplate或Client实例,并且默认连接一个本土的内存服务器(即一个NodeClient),可安装spring.data.elasticsearch.cluster-nodes连接受remote
server(TransportClient)。 
Spring
Data也为Elasticsearch提供以及JPA一样的Repositories,只不过实体注解为@Document。

十、缓存

Spring
框架支持透明地为使添加缓存。其基本是空虚层将缓存应用及方法,减少执行次数。可以使JSR-107(JCache)注解后者水平自己的缓存注解实现缓存。 
JCache示例:

import javax.cache.annotation.CacheResult;
import org.springframework.stereotype.Component;
@Component
public class MathService {
@CacheResult
public int computePiDecimal(int i) {
// ...
}
}

Cache抽象层并无提供真正的贮存,它凭借让org.springframework.cache.Cache

org.springframework.cache.CacheManager提供的泛。开启@EnableCaching之后,SpringBoot会因兑现自动配置一个正好的CacheManager。 
spring-boot-starter-cache导入依赖。 
Spring Boot会依照如下顺序检测缓存provider。

  • Generic
  • JCache (JSR-107)
  • EhCache 2.x
  • Hazelcast
  • Infinispan
  • Redis
  • Guava
  • Simple

否只是使用spring.cache.type指定使用啊一样种植缓存。 
假定由Spring Boot自动配置CacheManager,
你可以经过实现CacheManagerCustomizer接口在cachemanager在全初始化以前调整其配置:

@Bean
public CacheManagerCustomizer<ConcurrentMapCacheManager> cacheManagerCustomizer() {
return new CacheManagerCustomizer<ConcurrentMapCacheManager>() {
@Override
public void customize(ConcurrentMapCacheManager cacheManager) {
cacheManager.setCacheNames(Arrays.asList("one", "two"));
}
};
}

1. Generic (自定义Cache)

当至少从定义了一个org.springframework.cache.Cache bean时,Generic
caching会被启用,并且会安排一个CacheManager来包装它们。

2. JCache

当javax.cache.spi.CachingProvider(这是单JSR107兼容的休养存库)在classpath中不时,JCache会被启动。当起多独provider时,必须透过spring.cache.jcache.provider明确指定一个。还只是透过spring.cache.jcache.config来指定安排文件之职务。 
发出局部主意可定制化javax.cache.cacheManager:

  • 得以起步时指定spring.cache.cache-names创建caches。也可是定义javax.cache.configuration.Configuration
    bean去定制化。
  • org.springframework.boot.autoconfigure.cache.JCacheManagerCustomizer
    beans会给调用,并传CacheManager来定制。

  • EhCache2.x


于classpath跟路径下要发现了ehcache.xml,EhCache2.x会让下。也可采用指定spring.cache.ehcache.config=classpath:config/another-config.xml其他文件。

4. Redis

假设配置了Redis,RedisCacheManager会被电动配置。也足以由spring.cache.cache-names指定。 
Hazelcast和Infinispan略。

5. Guava

要是Guava可用,GuavaCacheManager会被布置。也只是由此spring.cache.cache-names指定。

6. Simple

倘上述选项都不曾成功,一个运ConcurrentHashMap的概括实现会晤为安排为cache
store.

十一、消息

Spring
Framework框架为集成消息网提供了扩大支持:从下JmsTemplate简化JMS API,到实现一个完异步消息接收的根设施。 
Spring AMQP提供一个形似的用于’Advanced Message Queuing
Protocol’的特征集,并且Spring
Boot也为RabbitTemplate和RabbitMQ提供了电动配置选项。 
Spring WebSocket提供原生的STOMP消息支持,并且Spring
Boot通过starters和有些活动配置为提供了对它们的支撑。

1. JMS

javax.jms.ConnectionFactory接口提供了一个正经的用来创造一个javax.jms.Connection的措施,javax.jms.Connection用于与JMS代理(broker)交互。Spring
Boot为收发信息提供了自行配置。

1.1 ActiveMQ 支持

SpringBoot检测到ActiveMQ在classpath中可用时,会配备一个ConnectionFactory。可安排如下属性: 
spring.activemq.broker-url=tcp://192.168.1.210:9876 
spring.activemq.user=admin 
spring.activemq.password=secret

1.2 HornetQ支持

支持之属性有embedded,native。spring-boot-starter-hornetq导入依赖。

1.3 Artemis 支持

Apache
Artemis是以2015年HornetQ被捐被Apache基金会后建立的,所有特性与HornetQ一样。spring-boot-starter-artemis导入依赖

2. AMQP

AMQP是一个面向消息的,平台中立、wire-level(指的凡不用定义api和储藏室,而是定义会讲话字节约流,类似http)的中等件协议。

2.1 RabbitMQ支持

RabbitMQ是轻量级,可靠的,可扩大的,轻便的基于AMQP协议的音信代理。Spring利用RabbitMQ实现AMQP协议。可由此spring.rabbitmq.*属性组来配置,如: 
spring.rabbitmq.host=localhost 
spring.rabbitmq.port=5672 
spring.rabbitmq.username=admin 
spring.rabbitmq.password=secret 
Spring boot会自动配置AmqpTemplate,AmqpAdmin,RabbitMessagingTemplate。

十二、发送邮件

Spring
Boot自动配置JavaMailSender来发送邮件。spring-boot-starter-mail导入依赖。 
可通过spring.mail.*性能组来配置。

十三、JTA处理分布式事务

Spring
Boot使用一个Atomkos或Bitronix的内嵌事务管理器来支持逾多独XA资源的分布式JTA事务。当部署及一个适宜的J2EE应用服务器时为会见支持JTA事务。 
当发现一个JTA环境时,Spring
Boot将运用Spring的JtaTransactionManager来管理工作。自动配置的JMS,DataSource和JPA beans将被升级为支持XA事务。 
君得以标准的@ransactional来介入到一个分布式事务中。可安装ring.jta.enabled=alse来剥夺JTA自动配置功用。 
spring-boot-starter-jta-atomikos和spring-boot-starter-jta-bitronix导入依赖。

十四、Spring Session

Spring
Session为管理用户的session信息提供支撑。若web应用之classpath中来spring
session 和spring data redis,spring
boot会通过@EnableRedisHttpSession自动配置Spring
session。Session数据让积存于redis中,超时期限可透过server.session.timeout设置。

十五、测试

spring-boot-starter-test提供以下库: 
• spring-test提供合一测试支持 
• JUnit 
• Hamcrest—为JUnit提供assertThat支持 
• Mockito

1. 测试Spring Boot应用

Spring
Boot提供@SpringApplicationConfiguration替代spring-test标准的@ContextConfiguration注解。测试中行使@SpringApplicationConfiguration配置ApplicationContext,ApplicationContext会叫SpringApplication创建,并且包含额外的Spring
boot的特点。实例:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(SampleDataJpaApplication.class)
public class CityRepositoryIntegrationTests {
@Autowired
CityRepository repository;
// ...
}

 

除此以外添加@WebIntegrationTest 或 @WebAppConfiguration注解,会使得context
loader认为你以测试web应用。例如,为测试接近增长@WebIntegrationTest会以web应用措施启动测试:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(SampleDataJpaApplication.class)
@WebIntegrationTest
public class CityRepositoryIntegrationTests {
@Autowired
CityRepository repository;
RestTemplate restTemplate = new TestRestTemplate();
// ... interact with the running server
}

 

得使用@WebIntegrationTest注解的server.port等特性修改端口。例如:@WebIntegrationTest(“server.port:9000”)。如果拿server.port和management.port置为0,应用之合龙测试用利用任意端口,例如:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(MyApplication.class)
@WebIntegrationTest({"server.port=0", "management.port=0"})
public class SomeIntegrationTests {
// ...
}

十六、Actuator(促动器):: Production-ready features

Springboot提供有特点帮您以行使部署及生育环境后监视和保管使用。可通过HTTP,JMX甚至remote
shell(SSH,Telnet)来管理与监视。审计,健康以及数码采集会自动应用及你的用。 
HTTP只有当依据Spring MVC的使被才可用。

1. 开启production-ready 特性

spring-boot-actuator提供Spring boot的production ready特性。 
Actuator是机术语,指移动还是控制其他东西的机械设备。Actuator通过微小的更动有大充分之移位。 
spring-boot-starter-actuator导入依赖。

2. endpoints 端点

Actuator端点使您可以监视下并与的相。Spring
boot包含有放开的端点(例如health端点),你吗可以协调增加。 
端点被暴露的点子在选择的技艺项目。大多使用选择HTTP监视,这样端点的ID被map到URL。如health端点被map到/health.

2.1 常用端点

ID 描述 是否敏感
actuator 为其他端点提供一个基于超媒体(hypermedia-based)的发现页面。需要Spring HATEOAS支持 true
autoconfig 显示一个auto-configuration的报告,该报告展示所有auto-configuration候选者及它们被应用或未被应用的原因 true
beans 显示一个应用中所有Spring Beans的完整列表 true
health 展示应用的健康信息(当使用一个未认证连接访问时显示一个简单的’status’,使用认证连接访问则显示全部信息详情) false
info 显示任意的应用信息 false
dump 执行一个线程转储 true
mappings 显示一个所有@RequestMapping路径的整理列表 true
trace 显示trace信息(默认为最新的一些HTTP请求) true

嘿是”是否敏感”? 
在于你哪暴露端点,敏感性可以用作安全指示。例如,如果采取HTTP并且打开了Spring
Security,那么看敏感端点要求用户称与密码。

2.2 CORS跨域资源共享支持

Cross-origin resource
sharing,是只W3C规格,它吧Web服务器定义了同等种植艺术,允许网页打不同之域访问那资源(如字),简言之,CORS就是以为AJAX可以兑现可控的跨域访问使死的。Actuator的MVC端点可以安排支持该场景:

endpoints.cors.allowed-origins=http://example.com
endpoints.cors.allowed-methods=GET,POST

3. 由此HTTP监控和保管

付出Spring MVC应用时,Spring Boot
Actuator会自动配置有打开的端点,并透过HTTP暴露。默认的预约是端点id被map到url,如health到/health。

3.1 保护敏感端点

设若采用了Spring
security,所有通过HTTP暴露的快的端点都见面受保障。默认会以基本证明(basic
authentication,用户称吧user,密码为利用启动时于控制台打印的密码)。 
你得运用Spring属性改变用户称,密码与走访端点需要之平安角色。例如,在application.properties中补充加下列配置:

security.user.name=admin
security.user.password=secret
management.security.role=SUPERUSER

3.2 定制管理端点的门道

但由此如下设置也端点的url设置前缀:

management.context-path=/manage

 

啊不过改端点的id或者path来齐修改path的目的:

endpoints.health.id = fuck
endpoints.health.path = /fuck/damn

3.3 定制管理服务器的端口

本着基于云的布局,使用默认HTTP端口暴露管理端点比较明智。如果运用运行于团结之数基本,可以如下修改端口:

management.port=8081

诚如情形下里面使用的军事管制端口还深受防火墙保护,不对外开放,因此得以如下关掉保护:

management.security.enabled=false

※ 只有以启用Spring security才发出必要明确的倒闭,否则反而可能破坏使。

3.4 定制管理服务器地址:

management.port=8081
management.address=127.0.0.1

3.5 关掉http端点

management.port=-1

4. 心地指标Metrics

Spring Boot
Actuator包括一个支撑’gauge’和’counter’级别的胸襟指标服务。’gauge’记录一个单一值;’counter’记录一个增量(增加还是回落)。 
拥有HTTP请求的度量指标还见面让自动记录,通过metrics端点(/metrics)即可访问。

4.1 系统度量指标

Spring Boot暴露以下系统指标: 
网内存总量(mem),单位:Kb 
没事内存数量(mem.free),单位:Kb 
计算机数量(processors) 
网正常运转时刻(uptime),单位:毫秒 
利用及下文(就是一个行使实例)正常运转时(instance.uptime),单位:毫秒 
系平均负载(systemload.average) 
堆信息(heap,heap.committed,heap.init,heap.used),单位:Kb 
线程信息(threads,thread.peak,thead.daemon) 
接近加载信息(classes,classes.loaded,classes.unloaded) 
垃圾收集信息(gc.xxx.count, gc.xxx.time)

4.2 数据源指标

以下指标会于爆出(前缀都是datasource.): 
活泼连接数(datasource.xxx.active) 
即连接池使用率(datasource.xxx.usage)

4.3 缓存指标

以下指标会叫爆出: 
当前cache大小(cache.xxx.size) 
命中率(cache.xxx.hit.ratio) 
未命中率(cache.xxx.miss.ratio)

4.4 tomcat session指标

万一使用tomcat做嵌入的servlet容器,session指标会吃暴露: 
活跃session数:httpsessions.active 
最大session数:httpsessions.max

十七、部署SpringBoot应用

Spring Boot灵活的由包选项扶持您再便于之将Spring Boot
应用部署至讲话平台,容器镜像,虚拟机或者实体机。

1. 安排及提

Spring Boot的可实行jar包可以安排到多数风靡的PaaS(Platform as a
service)云提供者。这些谈话提供者要求使用者“带好温馨的器皿”;而它管理下进程。所以她要一些中路层来拿公的施用适配到云概念中之一个周转过程。 
有限单流行的云提供者,Heroku和Cloud
Foundry,采取一样种植“buildpack”方式。Buildpack将您安排的代码打包进任何启动以所需要的保管里:可能是只JDK和一个java调用,可能是一个嵌入式web服务器,也恐怕是一个完好的应用服务器。一个buildpack是只是插拔的,但您不过好尽可能少的针对她进行打定义设置。这足以减小非让你决定的作用范围,并无限小化开发与生环境的距离。 
优秀状态下,你的动比如一个Spring
boot可尽jar包,应包含它运行所需要的普。 
还有OpenShift, Boxfuse和Amazon Web Service也支持Spring boot jar的部署 
Goole App Engine只支持Servlet 2.5,要安排Springboot应用得举行修改。

2. 安装Spring Boot 应用。

除外使jar –jar运行而尽jar包,还得编译成Unix上的完全只是实行下:

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>

CentOS和Ubuntu上且早已支持这个作用。这样即便只是将用为unix/Linux service的方启动。

参考链接

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/

相关文章