文章目錄
- 4.3 Profiles
- 4.4 Logging
- 4.4.1 日誌格式
- 4.4.2 console Output
- 4.4.3 文件輸出
- 4.4.4 Log Levels
- 4.4.5 Log Groups
- 4.4.6 自定義的log配置
- 4.4.7 logback 擴展
- 4.5 國際化
- 4.6 JSON
- 4.7 Web 框架開發
- 4.8 Rscoket
- 4.9 Security
- 4.10 Working with SQL Database(推薦用mybatis 而不是這個)
- 4.10.1 連接池的管理
- 4.10.2 Using JdbcTemplate
- 4.10.3 JPA和Spring Data JPA
- 4.10.4 JDBC
- 4.10.5 使用H2 web console
- 4.10.6 Using JOOQ
- 4.11 working with nosql
- 4.12 Caching
4.3 Profiles
Spring Profiles 讓應用在不用環境下有不同配置。任何@Component, @Configuration
或者@ConfigurationProperties
可以和@Profile標記,來顯示他們何時被加載。
如果
@Configurationes
通過@EnableConfigurationProperties
而不是自動掃描,那麼@Profile
的註解需要標註在@EnableConfigurationProperties
的類上。這個示例中是會被自動掃描到
在配置中激活
命令行
--spring.profiles.active=dev,hsqldb
4.3.1 Adding Active Profiles
添加激活的profiles
首先激活profile可以用spring.profiles.active
屬性,但是command line可以覆蓋掉。
有時並不是覆蓋得關係,而是both都要激活的關係,使用include
4.3.2 用代碼激活Profile
- SpringApplication.setAdditionalProfiles(…)在run之前
- 或者使用
ConfigurableEnvironment
接口
4.4 Logging
集成了apache的common log,並且讓log的實現開放。默認的配置會提供
JAVA util logging
,log4j2
和logback插件
。log會輸出在console,但可以配置輸出在文件。
默認你使用了starters
,logback會被用來logging。
當你部署你的應用都到容器或者容器server時,logging會通過java Util Logging API打印,這些日誌不會輸出到你的應用日誌。
4.4.1 日誌格式
- 輸出的日期 毫秒級
- 日誌級別:ERROR, WARN, INFO, DEBUG, or TRACE
- 進程ID
- 線程名
- logger名
- logmessage
4.4.2 console Output
默認輸出 ERROR+WARN+INFO
打開debug
彩色輸出
什麼jb介紹都有啊
4.4.3 文件輸出
在application 配置
logging.file.name
和logging.file.path
日誌配置
默認是10mb。可以配置按時間和日期切分
單個文件的size
logging.file.max-size
單個文件的最大歷史
logging.file.max-history
文件保留的最大size
logging.file.total-size-cap
強制每次啓動是清楚
logging.file.clean-history-on-start
具體框架的日誌配置是不受spring管理的,比如logback的logback.configurationFile
4.4.4 Log Levels
日誌級別的配置
logging.level.=level的配置
也可以用環境變量來配置
LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG
4.4.5 Log Groups
聚合相關logger的一起來配置十分有用。
使用logging.group.name
集中配置
內置的log group
4.4.6 自定義的log配置
在classpath
下的多種日誌框架,會被自動激活。但是可以依賴root
或者classpath
或者被Environment
下指定的logging.config
配置文件自定義。
你可以使用屬性org.springframework.boot.logging.LoggingSystem=value
來指定特殊的日誌框架。這個值是全名匹配LoggingSystem
。你可以通過value設置爲none
來關閉日誌系統。
因爲日誌的初始化在
ApplicationContext
之前,所以不能使用@Configuration
上的@PropertySources
來配置能關閉和改變日誌系統的方式是通過環境變量
下列日誌系統的配置
推薦使用帶-spring的配置文件變體比如
logback-spring.xml
而不是原生的logback.xml
可以通過系統屬性的變量來設置
變量table
支持 的日誌框架
4.4.7 logback 擴展
Spring boot 擴展配置
因爲logback.yml被加載的太早了,但是可以靠logback-spring.xml或者logging.config來設置。
Profile-specific Configuration
在logback-spring.xml中依賴
springProfile標籤來配置不同的profile
Environment Properties
可以把從Environment
中獲取屬性值。這麼做的好處是可以使用application.properties
中的值來應用到logback的值。然而不是用value
標籤,而是使用source
屬性來表示。如果你想在其他地方存儲屬性,你可以使用scope
屬性。還可以使用默認值去(defalutValue)
4.5 國際化
使用message.properties屬性來配置不同語言的messages。如果你的容器包含語言具體的屬性language-specific
的屬性文件,你可以添加默認。如果沒找找到,就會根據配置的basename去匹配。
4.6 JSON
spring-boot-starter-json
默認配置了Jackson
,ObjectMapper
會被自動配置
如何配置詳見 HOW-TO
4.7 Web 框架開發
spring mvc
webflux
JAS-RS 和jersey
rest encpoints
內嵌container
reactive server的配置
4.8 Rscoket
二進制傳輸歇息,可以提供異步消息傳輸模型。
RSocket RSocket是一個二進制的協議,以異步消息的方式提供4種對等的交互模型,以字節流的方式運行在TCP, WebSockets, Aeron等傳輸層之上。RSocket專門設計用於與Reactive風格應用配合使用,這些應用程序基本上是非阻塞的,並且通常(但不總是)與異步行爲配對。它是傳輸無關的,支持 TCP、WebSocket和Aeron UDP協議,並支持無語義損失的混合傳輸協議——回壓和流量控制仍然有效。
4.9 Security
4.9.1 MVC Secutity
4.9.2 WebFlux Security
4.9.3 OAuth2
是一種被官方運用的OAuth2
4.9.4 SAML 2.0
安全標記語言
4.9.5 Actuator Security
4.10 Working with SQL Database(推薦用mybatis 而不是這個)
Spring Framework 提供對sql database通用的支持。
從直接JDBC生成JdbcTemplate
,Spring Data提供一種新的訪問方式
Repository
,內置訪問模板
4.10.1 連接池的管理
推薦用HikariCP,優先命中
其次,Tomcat 池化的 DataSource
都沒有的話纔是Commons DBCP2
和JNDI的鏈接
4.10.2 Using JdbcTemplate
略
4.10.3 JPA和Spring Data JPA
4.10.4 JDBC
就是Repository的用法
4.10.5 使用H2 web console
4.10.6 Using JOOQ
面向對象的訪問。
4.11 working with nosql
Redis
cache 型數據庫
MongoDB
開源的Nosql document database—使用json-like的格式來存儲,而不是傳統的table-based。
Neo4j(存圖的數據庫–重要)
開源的 graph 數據庫,對於topo連接和類關係
solr 是一個apache的搜索引擎
ElasticSerch
開源文檔存儲,數據分析引擎。
Cassandra
開源的分佈式數據庫管理系統。
Couchbase
CouchBase是在memcached和redis之類緩存組件的基礎上發展而來的,被稱作爲可能是最好的緩存系統。所其必然能滿足之前的前輩所滿足不了的地方。
傳統的緩存組件包括memcached和redis有着這種或者那種的缺點:
Cluster支持完善度不夠或者直接沒有Cluster
沒有良好的高可用性機制,持久化支持的亦不是很完善
擴容和故障恢復能操作維護複雜
其他
而CouchBase則對上面的一些缺點都有着良好的支持。或者說
CouchBase所提供的任何單一功能,在市面上基本上都能找到一款數據庫能夠滿足。但是這些數據庫實際使用的話總是會有各種各樣的妥協,性能很好的話,擴展性可能很差之類的。而CouchBase的目標就是建立一個大一統,各種功能都包含可用,所謂接近完美的數據庫
LDAP 目錄服務
本身並不是db,而是目錄協議,任何滿足該協議的目錄,都會被整合。
4.12 Caching
首先springboot支持很多provider
來進行緩存。未配置時會提供一個簡單的。
用法如下
Spring Caching。自動裝配通過@EnableCaching註解打開
。
添加一個caching
匹配這個i
值,會把i
值對應的結果緩存。
你可以使用JSR-107協議(JCache)註解,比如
@CacheResult
4.12.1支持的providers
如果你沒有提供名爲cacheResolver的CacheManager或者 CacheResolver。會按照這個順序找
你也可以自定義一個CacheManager
來對cache進行設置。
1. generic
通用的cachae是用org.springframework.cache.Cache
。CacheManager會包裹所有的類型
2、JCache(JSR-107)
JCache通過在classpath目錄下放置javax.cache.spi.CachingProvider
來啓動。這個JCacheCacheManager
被spring-boot-starter-cache
的Starter提供。Spring boot提供多樣的庫,比如Ehcache 3、Hazelcast
。
當出現多個provider時,通過配置來指定。
spring boot 對
Hazelacast
有很好的支持
有兩種方式去在javax.cache.cacheManager去自定義
- 啓動時設置
spring.cache.cache-names
屬性,如果自定javax.cache.configuration.Configuration
被發現,就會被啓用。 org.springframework.boot.autoconfigure.cache.JCacheManagerCustomizer
被CacheManager定義,然後被CacheManger引用
3 EhCache 2.x
實用ehache.xml來做緩存
4 Hazelcast (spring boot 對其有很好的支持)
5 Infinispan
6 Couchbase
7 redis
高速內存數據庫
8 Caffeine
對guava cache的支持,對guava cache進行了重寫。
9 Simaple
默認使用了ConcurrentHashMap
。