文章目录
- Part III. Using Spring Boot
- Part IV Spring Boot Features
- 23 SpringApplication
- 23.1 Startup Failure
- 23.2 Customizing the Banner
- 23.3 Customizing SpringApplication
- 23.4 Fluent Builder API
- 23.5 Application Events and Listeners
- 23.7 Accessing Application Arguments
- 23.8 Using the ApplicationRunner or CommandLineRunner
- 23.10 Admin Features
- 24 Externalized Configuration
- 24.1 Configuring Random Value
- 24.2 Accessing Command Line Properties
- 24.3 Application Property Files
- 24.4 Profile-specific Properties
- 24.5 Placeholders in Properties
- 24.6 Encrypting Properties
- 24.7 Using YAML Instead of Properties
- 24.8 Type-safe Configuration Properties
- 25 Profiles
- 26 Logging
- 26.1 Log Format
- 26.2 Console Output
- 26.3 File Output
- 26.4 Log Levels
- 26.5 Log Groups
- 26.6 Custom Log Configuration
- 26.7 Logback Exetensions
- 28 JSON
- 28.1 Jackson
- 28.2 Gson
- 29 Developing Web Applications
- 29.1 The "Spring Web MVC Framework"
- 29.4 Embedded Servlet Container Support
- 30 Security
- 30.1 MVC Security
- Spring Security架构
- Spring Security OAuth2
- 30.4 Actuator Security
- 31 Working with SQL Database
- 31.1 Configure a DataSource
- 31.2 Using JdbcTemplate
- 31.3 JPA and Spring Data JPA
- 31.4 Spring Data JDBC
- 31.5 Using H2's Web Console
- 31.6 Using JOOQ
- 32 Working with NoSQL Technologies
- 32.1 Redis
- 32.2 MongoDB
- 32.3 Neo4j
- 32.6 Elasticsearch
- 32.9 LDAP
- 33 Caching
- 33.1 Supported Cache Providers
- 34 Messaging
- 34.1 JMS
- 34.2 AMQP
- 34.3 Apache Kafka
- 35 Calling REST Services with RestTemplate
- 35.1 RestTemplate Customization
- 37 Validation
- 38 Sending Email
- 39 Distributed Transactions with JTA
- 39.1 Using an Atomikos Transaction Manager
- 39.2 Using a Bitronix Transaction Manager
- 39.3 Using a Java EE Managed Transaction Manager
- 39.4 Mixing XA and Non-XA JMS Connection
- 41 Quatz Scheduler
- 42 Task Execution and Scheduling
- 43 Spring Integration
- 44 Spring Session
- 45 Monitoring and Management over JMX
- 49 Creating Your Own Auto-configuration
- Part V Spring Boot Actuator: Production-ready features
- 52 Enabling Production-ready Features
- 53 Endpoints
- 54 Monitoring and Management over HTTP
- 56 Loggers
- 结构
基于springboot 2.1.5.RELEASE官方文档。
Part III. Using Spring Boot
spring.http.log-request-detail,打印请求详细信息
spring.devtools.restart.exclude,修改时不重启的路径
Part IV Spring Boot Features
23 SpringApplication
23.1 Startup Failure
FailureAnalyzer,展示错误信息、解决方案
如无对应分析器,可开启调试模式debug property,或打开调试日志DEBUG logging。
jar包开启:java -jar A.jar --debug
配置文件:debug=true
日志设置:logging.level.<logName>=level
23.2 Customizing the Banner
classpath下放置banner文件,可为:txt、gif、jpg、png。显示时图片在txt上方。
或通过配置文件指定位置:spring.banner.location、spring.banner.image.location
spring.main.banner-mode,banner显示方式;值:console、log、off
yaml将off映射为false,故off须加双引号"off",防转换。
23.3 Customizing SpringApplication
SpringApplication sa = new SpringApplication(Clazz.class);//构建
//sa自定义配置
sa.run(args);//启动
23.4 Fluent Builder API
new SpringApplicationBuilder()//通过builder方式配置、运行;作用同上
.sources()//加载配置类
.child()//加载配置类
.bannerMode()//自定义配置
.run(args);
23.5 Application Events and Listeners
applicationContext创建前事件监听器注册:
- SpringApplication#addListeners();
- SpringApplicationBuilder#listeners();
事件顺序:
- ApplicationStartingEvent;run()方法后。加载spring-boot@META-INF/spring.factories
- ApplicationEnvironmentPreparedEvent;environment准备完毕;EnvironmentPostProcessor
- ApplicationPreparedEvent;加载bean definition完毕;BeanFactoryPostProcessor
- ApplicationStartedEvent;applicationContext准备完毕;BeanPostProcessor
- ApplicationReadyEvent;ApplicationRunner、CommandLineRunner调用完毕
- ApplicationFailedEvent;异常
普通事件监听,配置bean;@EventListener,方法注解;或实现ApplicationListener。
23.7 Accessing Application Arguments
ApplicationArguments bean,获取命令行参数,包括:args、配置参数(option)、非配置参数(non-option)
@Value注值解析。
23.8 Using the ApplicationRunner or CommandLineRunner
ApplicationRunner、CommandLineRunner;项目启动后立即回调
ApplicationRunner通过ApplicationArguments获取应用参数。
CommandLineRunner通过args获取应用参数。
规定次序:@Order注解,或实现Order接口。
23.10 Admin Features
spring.application.admin.enabled,暴露SpringApplicationAdminMXBean到jmx。
暴露后可通过jconsole关闭应用。
management.jmx.exposure.exclude;排除shutdown,禁止关闭应用。
24 Externalized Configuration
注入配置值:@Value、@ConfigurationProperties
配置优先级,从高到低:
- 命令行参数
- 环境变量,包括JVM、OS、JNDI
- application配置文件。YAML格式
- @PropertySource导入的配置文件。非application名配置文件,${}占位符。。
- 程序中配置的默认值
24.1 Configuring Random Value
通过RandomValuePropertySource注入随机值,整形、uuid、字符串:
- ${random.value};随机字符串
- ${random.uuid};uuid
- ${random.int/long};随机值。
- ${random.int/long(max)},${random.int/long(min,max)};区间值,不包含max。
24.2 Accessing Command Line Properties
SpringBoot自动将“–”开头的命令行参数,解析后加入到Environment。
- java -jar A.jar --server.port=8088;
- -key value,设置java命令基本参数
- -Dkey=value,设置jvm系统属性,value有空格时用双引号括起。
- -X,扩展内容,JVM参数;如-Xms1024M,-Xmx2048M
禁用命令行参数:
- SpringApplication.setAddCommandLineProperties(false)
获取值:
- @Value、ApplicationArguments;注入获取
- CommandLineRunner、ApplicationRunner;runner回调获取
24.3 Application Property Files
优先级:\config、\、classpath:/config、classpath;\为jar包路径
命令行参数指定:
- --spring.config.name;指定配置文件名
- --spring.config.location;指定配置文件位置,多个路径用逗号","隔开
24.4 Profile-specific Properties
spring.profiles.active/include,配置profiles。配置后加载文件名application-{profile}。
spring.config.location值为file,profile失效;为directory,加载spring.config.name-{profile}
maven profile
classpath:config下不同文件夹,通过maven的profile参数指定。
spring的profile只针对application配置文件,maven的profile通过文件夹判定,可区分其他配置文件。
application中引用maven-profile:@NAME@;yml中单引号括起。pom文件中无对应属性时引用失败。
24.5 Placeholders in Properties
配置文件支持占位符:${expr}。只支持引用值,不支持对象。
24.6 Encrypting Properties
实现EnvironmentPostProcessor接口,处理加密属性。需将实现类加入到spring-boot包META-INF/spring.factories,预加载。
通过PropertySource解析?直接替换值,或者包装PropertySource。
jasypt加密;封装PropertySource
24.7 Using YAML Instead of Properties
YamlPropertiesPostProcessor、YamlMapPostProcessor;将yml在enviroment中暴露为properties、map。@Value–properties,@ConfigurationProperties–map
@PropertySource只能导入properties、xml。
—,在同一yml文件中,隔开多个profile。spring.profiles,声明profile,未声明为公共,可合并。
yml对象数组分隔符:“-”
手动读取yml:
- new Yaml().load();LinkedHashMap
- new YamlPropertySourceLoader().load();
@PropertySources/@PropertySource;导入配置文件,可使用${}占位符,统一导入路径。
24.8 Type-safe Configuration Properties
@ConfigurationProperties,将值注入bean;对层级结构,可使用Map、内部类接收。配合@EnableConfigurationProperties、@Bean、@Component注册为bean。
@ConfigurationProperties用于bean方法,将属性绑定到第三方组件。调setter注值。
@ConfigurationProperties松散绑定:忽略大小写、转换分隔符(-、_)
属性合并,-分隔的数组不合并;直接替换。
验证:@Validated、@Valid(属性对象)、其他JSR303注解。
25 Profiles
@Profile,配置spring.profiles.active
spring.profiles、application-profileName.yml,定义配置文件的profile
profile表达式:production & (!test | dev)
25.1 Adding Active Profiles
spring.profiles.include、SpringApplication#setAddtionalProfiles();增加profile
25.2 Programmatically Setting Profiles
SpringApplication#setAddtionalProfiles();
25.3 Profile-specific Configuration Files
spring.config.location值为file,profile失效;为directory,加载spring.config.name-{profile}
application-profileName.yml,定义配置文件的profile
26 Logging
SpringBoot使用Commons Logging;JCL。默认提供JUL(java util logging)、Log4j2、logback。
starters使用logback。
配置参数:logging.*
其他日志框架:SLF4J+对应Adapter
26.1 Log Format
典型日志格式:
- Date and Time;毫秒精度。
- Log Level;值:ERROR/FATAL、WARN、INFO、DEBUG、TRACE、OFF
- Process ID
- Separator;分隔符,如—
- Thread name
- Logger name;触发日志的类
- Log message
26.2 Console Output
日志默认INFO级别,使用DEBUG级别:debug=true;对Container、Hibernate、SpringBoot有效。
26.3 File Output
logging.file、logging.path;指定日志文件,内容默认与console一致。如未指定,则不写日志文件
logging.config,指定日志配置文件位置
日志配置文件不可通过@PropertySource导入;SpringBoot只管理公共配置。
26.4 Log Levels
设置日志级别:logging.level.loggerName: level;
- logging.level.root: WARN
- logging.level.org.hibernate: WARN
- logging.level.ort.springframework.web: INFO
日志级别默认继承父级,直至root。appender级别。
26.5 Log Groups
定义日志组,便于统一管理level。
- logging.group.myGroup: org.hibernate,org.springframework.web
- logging.level.myGroup: WARN
springboot预定义日志组:web、sql
26.6 Custom Log Configuration
指定定制配置文件:logging.config
配置文件名建议加"-spring",以使用spring表达式。
日志系统在applicationContext前初始化,故不能使用@PropertySource引入配置文件。
26.7 Logback Exetensions
使用spring对配置文件的扩展,配置文件名改为logback-spring.xml。
使用spring的扩展后,不能使用logback本身的配置扫描读入配置文件。
<springProfile name=profileExpr>;profile相关标签,name为profile值、profile表达式
<springProperty />;导入environment信息。name名称,后续通过占位符引用;source源信息;defaultValue默认值。
springProfile、springProperty标签只能用于logback配置文件增强。
28 JSON
springboot整合了Gson、Jackson、JSON-B,用作HttpMessageConverter;默认使用Jackson。
28.1 Jackson
导入spring-boot-starter-json时,自动导入jackson;自动配置ObjectMapper、XmlMapper。
spring.jackson.*,配置ObjectMapper参数;包括:
- deserialization.*,DeserializationFeature
- generator.*,JsonGenerator
- parser.*,MapperFeature
- mapper.*,JsonParser
- serialization.*,SerializationFeature
- default-property-inclusion,JsonInclude.Include
28.2 Gson
导入Gson时自动配置bean,配置参数:spring.gson.*。
配置GsonBuilderCustomizer bean,配置Gson bean。
29 Developing Web Applications
29.1 The “Spring Web MVC Framework”
spring.mvc,配置mvc
WebMvcConfigurerSupport,配置mvc
HttpMessageConverters
配置HttpMessageConverter:
- 配置HttpMessageConverters bean;
- 或通过继承WebMvcConfigurerSupport;
Custom JSON Serializers and Deserializers
@JsonComponent,标记定制JSON序列化;实现JSONSerializer、JSONDeserializer
MessageCodesResolver
处理异常时输出;配置:spring.mvc.message-codes-resolver_format,值:PREFIX_ERROR_CODE、POSTFIX_ERROR_CODE。springboot返回DefaultMessageCodesResolver.Format对象。
Static Content
默认静态资源路径:/static、/public、/resources、/META-INF/resources
WebMvcConfigurerSupport#addResourceHandler();修改资源映射
spring.mvc.static-path-pattern,静态资源url匹配,默认:/**
spring.resources.static-locations,静态资源路径
Welcome Page
搜索顺序:index.html、index template、springboot实现。
Custom Favicon
搜索静态资源路径、classpath下是否有favicon.ico;有则作为应用图标。
spring.mvc.favicon.enabled: false;禁用
Path Matching and Content Negotiation
springboot禁用后缀匹配;/hello.do不匹配/hello
content negotiation配置:
- spring.mvc.contentnegotiation.favor-parameter: true;通过请求参数确定内容类型
- spring.mvc.contentnegotiation.parameter-name: contentType;默认为format
- 例:/send?format=json,内容为json
ConfigurableWebBindingInitializer
绑定参数,可自定义。
Template Engines
默认模板路径:/src/main/resources/templates
Error Handling
自定义异常处理:
- 实现ErrorController
- @ControllerAdvice+@ExceptionHandler
Spring HATEOAS
使用超媒体时,自动配置。
CORS Support
配置CORS拦截:
- @CrossOrigin;标记方法
- WebMvcConfigurerSupport#addCorsMappings();全局
29.4 Embedded Servlet Container Support
springboot内嵌容器支持:tomcat、jetty、undertow。默认端口8080.
Servlets、Filters and Listeners
使用内嵌容器时,可使用spring bean注册servlet、filter、listener。
- 注解方式,@ServletComponentScan、@WebServlet、@WebFilter、@WebListener
- bean方式,ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean
自定义Filter,避免设为Ordered.HIGHEST_PRECEDENCE;防止与CharacterFilter冲突
如果Filter包装request,order需小于OrderedFilter.REQUEST_WRAP_FILTER_MAX_ORDER
Customizing Embedded Servlet Containers
配置内嵌容器;server.*;配置文件参数。包括:
- Network setting;port、address、context-path等
- session参数;server.servlet.session.*
- Error management;server.error.*
- SSL、HTTPcompression等
- 容器特性参数;server.tomcat.*、server.undertow.*
30 Security
@EnableGlobalMethodSecurity,开启方法级安全
spring security默认:user、随机密码;配置:spring.security.user.name/password
30.1 MVC Security
导包:spring-boot-starter-security
核心:WebSecurityConfigurerAdapter、@EnableWebSecurity、UserDetailsService/UserDetails
Spring Security架构
http://www.spring4all.com/article/433 Authentication认证(身份验证)、Authorization授权(访问控制)。
Design to seperate authentication from authorization。
过滤器实现:UsernamePasswordAuthenticationFilter、AnonymousAuthenticationFilter、ExceptionTranslationFilter、FilterSecurityInterceptor
Authentication
核心:AuthenticatonManager/ProviderManager、AuthenticationProvider、Authentication
定制:继承WebSecurityConfigurerAdapter,重写configure(),通过AuthenticationManagerBuilder定制local AuthenticationManager。
UserDetailsService,解耦认证与用户信息获取。
Authorization
核心:AccessDecisionManager、AccessDecisionVoter
SecurityContext
核心:SecurityContextHolder、SecurityContext
安全内容,绑定到线程。
FilterChain
责任链模式;FilterChain–DelegatingFilterProxy/FilterChainProxy/FilterChain、Filter
SecurityContextPersistenceFilter;
UsernamePasswordAuthenticationFilter;身份验证
AnonymousAuthenticationFilter;
ExceptionTranslationFilter;
FilterSecurityInterceptor;访问控制
tomcat FilterChain:ApplicationFilterChain,包含Filter(Filter、DelegatingFilterProxy)
DelegatingFilterProxy持有FilterChainProxy,FilterChainProxy持有多个FilterChain;通过url匹配,返回适合的FilterChain,最终逐一执行。
DelegatingFilterProxy模式,关联web.xml配置、spring bean。
HttpSecurity#addFilterAt();不覆盖原filter,并行判定
Spring Security OAuth2
验证过程类似cas。
概念:客户端、资源服务器、授权服务器、用户/浏览器
模式:授权码模式(授权码浏览器中转、token浏览器不可见)、客户端模式、密码模式、简化模式
步骤:配置资源服务器、配置授权服务器、配置spring security
30.4 Actuator Security
management.endpoints.web.explosure.include;开启actuator url
31 Working with SQL Database
31.1 Configure a DataSource
Embedded Database Support
springboot可自动配置H2、HSQL等内嵌数据库。导入对应包即可。
- com.h2database@h2,H2数据库
- org.hsqldb@hsqldb,HSQL
导入数据:
- spring.datasource.schema;结构
- spring.datasource.data;数据
Connection to a Production Database
指定数据库连接池:spring.datasource.type;默认为自动发现。配置连接池bean后失效。
指定数据库连接池信息:spring.datasource.tomcat/dbcp/druid.*
31.2 Using JdbcTemplate
配置信息:spring.jdbc.template.*
31.3 JPA and Spring Data JPA
Map objects to relational databases.
spring-boot-starter-data-jpa,引入了hibernate、spring data jpa、spring orm。
spring.jpa.*,配置JPA
spring.jpa.properties.hibernate.*、spring.jpa.hibernate.*,配置hibernate
Entity Classes
@Entity、@EntityScan
@Id、@GeneratedValue、@Column、
Spring Data JPA Repositories
DSL方式命名方法。
@Query、@Modifying
Creating and Dropping JPA Databases
spring.jpa.hibernate.ddl-auto=create-drop;DDL mode
默认情况下,DDL在applicationContext启动后执行。修改:
- spring.jpa.generate-ddl;自动配置时使用ddl-auto
- spring.jpa.hibernate.ddl-auto
Open EntityManager in View
spring.jpa.open-in-view;启用open entitymanager in view 模式。
31.4 Spring Data JDBC
@EnableJdbcRepositories,配置JDBC
31.5 Using H2’s Web Console
spring.h2.*,配置H2
- spring.h2.console.enabled;启用console,生产环境时设为false,禁用
- spring.h2.console.path;配置console访问路径
31.6 Using JOOQ
JOOQ,Java Object Oriented Query;通过java代码构建sql
32 Working with NoSQL Technologies
自动配置:redis、MongoDB、Neo4j、elasticsearch、LDAP等。
32.1 Redis
Redis,key-value数据库;可持久化;单线程,多路复用。
springboot提供两种自动配置:Lettuce、Jedis。
spring-boot-starter-data-redis,自动配置redis,默认使用Lettuce client。
Connecting to Redis
spring.redis.*;配置redis
注入bean,可选RedisConnectionFactory、StringRedisTemplate、RedisTemplate
导入common-pool2时,获取到pooled connection factory
32.2 MongoDB
MongoDB,文档数据库,分布式文件存储;JSON结构;
spring-boot-starter-data-mongo;
Connecting to a MongoDB Database
spring.data.mongodb.*;配置
注入bean,MongoDbFactory、MongoTemplate。
Spring Data MongoDB Repositories
类似JPA,实现Repository,DSL命名方法;实体标记@Entity。
@EnableMongoRepositories,绑定repository
spring.data.mongodb.repositories.type;默认auto
32.3 Neo4j
Neo4j;graph数据库;点、边体系;
spring-boot-starter-data.neo4j
Connecting to a Neo4j Database
配置:spring.data.neo4j.*
注入bean,org.neo4j.ogm.session.Session
Using the Embedded Mode
导包:neo4j-ogm-embedded-driver
配置:spring.data.neo4j.embedded-enabled;默认true
Neo4jSession
spring.data.neo4j.open-in-view,开启open-in-view mode
Spring Data Neo4j Repositories
类同MongoDB。
@EnableNeo4jRepositories、spring.data.neo4j.repositories.enabled
32.6 Elasticsearch
elasticsearch;distributed、restful search and analysis engine。
spring-boot-starter-data-elasticsearch;
Connecting to Elasticsearch by REST Client
两种rest client,配置spring.elasticsearch.rest.*:
- 导包:elasticsearch-rest-client;配置RestClient
- 导包:elasticsearch-rest-high-level-client;配置RestHighLevelClient
Connecting to Elasticsearch by Using Jest
导入jest,配置JestClient;参数:spring.elasticsearch.jest.*
Connecting to Elasticsearch by Using Spring Data
spring.data.elasticsearch.*;配置连接信息
注入bean,ElasticsearchTemplate、TransportClient
Spring Data Elasticsearch Repositories
类同以上,实体类注解@Document
spring.data.elasticsearch.repositories.enabled;
32.9 LDAP
LDAP,Lightweight Directory Access Protocal;
spring-boot-starter-data-ldap
Connecting to an LDAP Server
spring.ldap.*;配置连接信息
注入bean,LdapTemplate
Spring Data LDAP Repositories
spring.data.ldap.repositories.enabled
Embedded In-memory LDAP
导包:unboundid-ldapsdk
配置:sping.ldap.embedded.base-dn: dc=spring,dc=io
33 Caching
结构:CacheProvider、CacheManager、Cache、Entry、Expiry
@EnableCaching,开启cache。cache-reuse,buffer-adapt
@CacheConfig、@Cacheable、@Caching、@CachePut、@CacheEvit
spring.cache.*
未导入cache相关包时,默认使用ConcurrentHashMap
spring-boot-starter-cache;导入cache基础支持
33.1 Supported Cache Providers
EhCache
导包:ehcache
配置:spring.cache.ehcache.config;配置文件位置,建议使用-spring后缀。
注入EhCacheManager bean,或基于注解使用
Redis
导包:jedis
配置:spring.cache.redis.*、spring.cache.cache-names;配置redis默认值、cache名
注入RedisCacheManager bean,或基于注解使用
如需定制序列化策略等,配置RedisCacheConfiguration bean。
redis数据结构:
- string,字符串,字符数组实现,字符列表动态扩容
- hash,拼接key实现?
- list,字符串列表,按插入顺序排序
- set,无序字符串集合,基于hash表实现;不允许重复
- zset,有序字符串集合,同上,通过关联分数排序,分数可重
Simple
If no caching library is present,使用ConcurrentHashMap。
None
spring.cache.type=none;禁用缓存
34 Messaging
结构:ConnectionFactory、TransactionManager、Template、ListenerContainerFactory、MessageListener
Template自动关联MessageConverter bean
34.1 JMS
Java Message Service
配置:spring.jms.*
ActiveMQ Support
导包:spring-boot-starter-activemq
配置:spring.activemq.*
池化
By default,CachingConnectionFactory wrap native ConnectionFactory;配置spring.jms.cache.*
使用本地连接池,导入org.messaginghub@pool-jms;配置spring.activemq.pool
Sending a Message
注入JmsTemplate bean
Receiving a Message
@EnableJms,启用jms
@JmsListener,标记方法;ListenerContainerFactory、TransactionManager自动配置
34.2 AMQP
Advanced Message Queuing Protocol
导包:spring-boot-starter-amqp
RabbitMQ Support
配置:spring.rabbitmq.*
Sending a Message
注入bean,AmqpAdmin、AmqpTemplate
spring.rabbitmq.template.retry.*;无事务管理,retry默认false。自动关联MessageRecoverer
Receiving a Message
@EnableRabbit、@RabbitListener
配置retry,应对消息消费失败。
34.3 Apache Kafka
导包:spring-kafka
配置:spring.kafka.*
Sending a Message
注入bean KafkaTemplate
spring.kafka.producer.transaction-id-prefix;事务配置
Receiving a Message
@EnableKafka、@KafkaListener
Kafka Streams
流式计算。
导包:kafka-streams,@EnableKafkaStreams;
配置:spring.kafka.streams.*
注入bean StreamsBuilder,构建KStream bean。
35 Calling REST Services with RestTemplate
RestTemplateBuilder、RestTemplate、HttpMessageConverter
springboot自动配置RestTemplateBuilder。
35.1 RestTemplate Customization
实现RestTemplateCustomizer,配置为bean,应用到所有RestTemplate;如只应用到部分RestTemplate,new对象后作为RestTemplateBuilder方法参数。
37 Validation
@Validated,标记类
@Size、@NotNull、@Email等校验注解
38 Sending Email
结构:MailSender、MailMessage
导包:spring-boot-starter-mail
配置:spring.mail.*
注入bean JavaMailSender;MimeMessagePreparator、MimeMessageHelper构建MailMessage
39 Distributed Transactions with JTA
JTA环境被发现时,JMS、DataSource、JPA使用JtaTransactionManager管理事务。
spring.jta.enabled: false;禁用JTA
spring.jta.*
39.1 Using an Atomikos Transaction Manager
导包:spring-boot-starter-jta-atomikos
配置:spring.jta.atomikos.*
spring.jta.log-dir;日志路径,默认根路径
spring.jta.transaction-manager-id;默认为IP,unique ID
39.2 Using a Bitronix Transaction Manager
导包:spring-boot-starter-jta-bitronix
配置:spring.jta.bitronix.*
spring.jta.log-dir;日志路径,默认根路径
spring.jta.transaction-manager-id;默认为IP,unique ID
39.3 Using a Java EE Managed Transaction Manager
打war包,部署到容器中。
TransactionManager、JMS ConnectionFactory根据JNDI参数配置
DataSource可由spring.datasource.jndi-name配置
39.4 Mixing XA and Non-XA JMS Connection
注入non-XA ConnectionFactory;beanName nonXaJmsConnectionFactory
注入XA ConnectionFactory;by Type or by name “xaJmsConnectionFactory”
41 Quatz Scheduler
spring-boot-starter-quartz;配置spring.quatz.*
核心类:Scheduler、Trigger、Job/JobDetail;
SchedulerFactory绑定JobFactory,实现JobDetail自动装配。
SchedulerFactoryBeanCustomizer定制。
JobStore,默认为in-memory;配置为jdbc-based:
- spring.quatz.jdbc.job-store-type: jdbc
- spring.quatz.jdbc.initialize-schema: always 启动时初始化表结构
- spring.quatz.jdbc.schema: fileName 自定义表结构,默认表结构为drop existing
@QuatzDataSource,标记quatz所用数据源
42 Task Execution and Scheduling
Task Execution
TaskExecutor、Task
springboot默认配置ThreadPoolTaskExecutor;支持异步task。
异步Task:@EnableAsync/@Async、异步请求;TaskExecutor自动执行。
配置:spring.task.execution.;TaskExecutorBuilder
Task Scheduling
TaskScheduler、策略、Task
springboot默认配置ThreadPoolTaskScheduler
定义Task:@EnableScheduling/@Scheduled、显式提交
配置:spring.task.scheduling.;TaskSchedulerBuilder
43 Spring Integration
导包:spring-boot-starter-integration
开启:EnableIntegration
配置:spring.integration.*
44 Spring Session
管理用户session;存储位置:jdbc、redis、mongodb、hazelcast
Filter方式实现,包装request。redis示例:
导包:spring-session-data-redis
配置:
- spring.session.store-type;存储位置,none禁用
- spring.session.timeout;过期时间
45 Monitoring and Management over JMX
JMX:Java Management Extension
暴露bean:@ManagedResource、@ManagedAttribute、@ManagedOperation
49 Creating Your Own Auto-configuration
通过META-INF/spring.factories,加载bean;逗号隔开
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\classFullName
@Conditional注解族,条件性加载
@AutoConfigureAfter、@AutoConfigureBefore、@AutoConfigureOrder;加载顺序
@EnableConfigurationProperties;开启配置属性类
@Import;导入其他配置类
自动配置时,无法自动扫描;需手动配置关联。
Part V Spring Boot Actuator: Production-ready features
/actuator,获取信息;不同版本,信息不同
52 Enabling Production-ready Features
导包:spring-boot-starter-actuator
53 Endpoints
53.1 Enabling Endpoints
配置:management.endpoint.<ID>.enabled=true
management.endpoint.enabled-by-defualt=false;默认禁用,需手动逐一开启
53.2 Exposing Endpoints
web方式默认只暴露health、info
management.endpoints.jmx.exposure.include/exclude;配置JMX暴露项
management.endpoints.web.exposure.include/exclude;配置web暴露项
exclude优先;为所有项,yaml中加双引号""。
53.3 Securing HTTP Endpoints
spring security中,继承WebSecurityConfigurerAdapter,configure()方法中配置权限:
http.requestMatcher(EndpointRequest.toAnyReqeust()).authorizeRequest()
.anyRequest().hasRole(“ADMIN”)/permitAll();配置ADMIN角色/全部均可访问
开启endpoint:
management.endpoints.web.exposure.include/exclude
53.5 Hypermedia for Actuator Web Endpoints
/actuator;actuator总览页面
53.6 CORS Support
management.endpoints.web.cors.allow-origin/allow-method;配置cors origin/method
53.7 Implemention Custom Endponts
@Endpoint、@ReadOperation、@WriteOperation、@DeleteOperation;可通过jmx、http访问
@JmxEndpoint、@WebEndpoint;只能使用对应协议访问
53.8 Health Information
management.endpoints.health.*;配置health
自定义health信息,配置HealthIndicator bean。
54 Monitoring and Management over HTTP
54.1 Customizing the Management Endpoint Paths
management.endpoints.web.base-path;定制basePath,默认contextPath
54.2 Customizing the Management Server Port
management.server.port;定制端口,默认server.port
54.4 Customizing the Management Server Address
management.server.address;定制域名
54.5 Disabling HTTP Endpoints
management.server.port=0
management.endpoints.web.exposure.exclude=*
56 Loggers
TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF、null
56.1 Configure a Logger
获取日志级别:get–http://ip:port/loggers
设置日志级别:post–http://ip:port/loggers/loggerName,entity:{‘configuredLevel’:‘LEVEL’}
结构
SpringApplication;定制、事件、runner
Environment;properties、profile配置
日志;JCL、SLF4j
MVC;mvc配置、容器配置、JSON/GSON、session管理
安全;spring security
数据;sql/事务、nosql、cache
消息;jms、amqp、kafka
整合;REST、验证、Email、Task(Executor、Scheduler/Quartz)
监控;http/SpringAdmin、jmx/jconsole