Spring Boot 1.4がもうすぐリリース
2016/07/27に正式リリースされるようです。
前回時点からWikiが更新されたので、和訳も更新してみました。
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4-Release-Notes
参考までに、私のバージョンアップ体験記はこちら。
Spring Boot 1.3 からのアップグレード
- EOLに基づき、Log4j ver1のサポートを削除
- starterのリネーム
- spring-boot-starter-ws → spring-boot-starter-web-services
- spring-boot-starter-redis → spring-boot-starter-data-redis
- DataSourcePropertiesのget系メソッド変更
- spring.datasourceにあったJDBC POOL設定が、実装毎の名前空間に移動した
例)spring.datasource.test-on-borrow → spring.datasource.tomcat.test-on-borrow
- spring.jtaにあったJTA設定が、spring.jta.atomikos.propertiesに移動した
例)spring.jta.checkpoint-interval → spring.jta.atomikos.properties.checkpoint-interval
- JPA persistence providerとして、Hibernate 5.0が使用されるようになった
- Spring Boot 1.3はHibernate 4.3を使用していた
- SpringNamingStrategyからSpringPhysicalNamingStrategyへの移行が必要
- 移行コストを下げたい場合は、あまりお勧めでは無いがspring.jpa.hibernate.use-new-id-generator-mappingsをfalseに設定できる
- 4.3系にダウングレードしたい場合は、pom.xmlの<properties>に
<hibernate.version>4.3.11.Final</hibernate.version>
version>`を指定する
- @org.springframework.boot.orm.jpa.EntityScanが非推奨となった
- @org.springframework.boot.autoconfigure.domain.EntityScanに変更する必要がある
- 上記アノテーションでは、JPA, Neo4J, MongoDB, Cassandra, Couchbaseのためのパッケージも指定できるようになった
- テスト系クラスの変更
- org.springframework.boot.testパッケージの変更
- SpringBootTestアノテーションへの移行
- @RunWith(SpringJUnit4ClassRunner.class)→@RunWith(SpringRunner.class) への変更
- TestRestTemplateがRestTemplateを継承しなくなった
- spring-boot.versionプロパティが削除された
- spring-boot-starter-integrationが整理された
- spring-boot-starter-batch starterから組み込みDBの依存が削除された
- 例えばhsqldbを追加する必要があるかもしれない
- tomcat-juliモジュールがtomcat-embeddedに含まれるようになった
- 大部分のユーザは気にしなくて良いが、Tomcatをダウングレードしたい場合は、tomcat-juliを手動で追加する必要がある
- spring.mvc.dispatch-options-requestがデフォルトでtrueとなった
- エンコーディングの強制設定が、リクエストだけになった
- spring.http.encoding.force=trueにより、レスポンスにも強制できる
- マルチパート設定が multipart.* から spring.http.multipart.* に移動された
- server.server-headerプロパティを指定した場合にだけ、Serverヘッダが設定されるようになった
- @ConfigurationPropertiesで生成されるのbean nameパターンが変更された
- Jetty JNDIが spring-boot-starter-jetty starterに含まれなくなった
- リモートシェル設定が shell.* から management.shell.* に移動された
- spring.session.store-type設定により、Spring SessionバックエンドがRedisを含めた5種から選択可能になった
- 起動スクリプトが決定するアプリのデフォルト識別子として、正規名(canonical name)が使用されるようになった
- 元々はjarのシンボリックリンク名だった
- 環境変数APP_NAMEで制御可能
- spring-boot-starter-data-mongodb starterによるMongoDBのバージョンが2.14.2から3.2.2に変更された
- Thymeleafはデフォルトでは2.1が使用されるが、Thymeleaf 3にも対応した(詳細)
- executable jarのレイアウト変更(Maven, Gradle, Antを使用している場合は影響なし)
- spring-boot-starter-hornetqが非推奨となったため、spring-boot-starter-artemisに移行する必要がある
新機能と注目ポイント
- Spring Framework 4.3への更新
- サードパーティライブラリの更新
- Jetty 9.3
- Tomcat 8.5
- Jersey 2.23
- Hibernate 5.1
- Jackson 2.7
- Solr 5.5
- Spring Data Hopper
- Spring Session 1.2
- Hazelcast 3.6
- Artemis 1.3
- Ehcache 3.1
- Elasticsearch 2.3
- Spring REST Docs 1.1
- Spring AMQP 1.6
- Spring Integration 4.3
- spring-boot-starter-data-couchbase starterによるCouchbaseのサポート追加
- spring-boot-starter-data-neo4j starterによるNeo4Jのサポート追加
- Spring DataリポジトリとしてRedisが使用できるようになった
- spring-boot-starter-jta-narayana starterによるJTAトランザクションマネージャNarayanaのサポート追加
- Guava cachesからCaffeineへの移行推奨
- Jest(ElasticSearchのHTTP Restクライアント実装)がクラスパスにある場合にJestClientが追加されるようになった
- spring-data-elasticsearch starterが無くてもElasticSearchが使用できるようになった
- 二重起動など、起動失敗時のエラー出力が明瞭になった
- banner.gif, banner.jpg, banner.png ファイルをsrc/main/resourcesに用意しておくと、ASCIIアート化されて起動時バナーに使用される
- RestTemplateBuilderが追加され、例えばBASIC認証が簡単に設定できるようになった
- JsonComponentアノテーションの追加
- シリアライズ/デシリアライズ処理の分離が簡単になった
- JsonObjectSerializer/JsonObjectDeserializerが追加された
- src/main/resource/public/error/404.html などにより、HTTPステータスコード毎のエラーページ・テンプレートが定義できるようになった
- ErrorPageRegistryが追加され、サーブレットコンテナのエラーページ設定がカスタマイズできるようになった
- OAuth2のためのPrincipalExtractorが追加された
- Actuatorエンドポイントの改修
- Gitコミット情報やビルド情報の出力が可能になった
- InfoContributorによるカスタム出力
- MetricsFilterのgauge/counterが、HTTP Methodごとにグルーピング出力できるようになった
- Spring SessionでJDBCストアを使用する場合、関連スキーマが自動生成されるようになった
- Artemis/HornetQに対してパスワード認証付きの接続が出来るようになった
テスト関連
- spring-boot-test、spring-boot-test-autoconfigureが分離された
- spring-boot-starter-test starterを利用しているのであれば、そのままでよい
- 上記starterはAssertJ, JSONassert, JsonPath の依存関係も含んでいる
- org.springframework.boot.testパッケージがspring-boot-testに移動された
- Test configurationの自動検出(詳細)
- MockBeanアノテーションやSpyBeanアノテーションを付与する事で、Mockitoによるモッキングが可能になった
- JsonTestアノテーション、WebMvcTestアノテーション、RestClientTestアノテーション、DataJpaTestアノテーションの追加
- JacksonTester、GsonTester、BasicJsonTesterにより、AssertJベースのテストが可能になった
- AutoConfigureRestDocsアノテーションによるSpring REST Docsの出力
- spring-boot-starter-testがAssertJ assertions libraryを使用するようになった
その他
- server.jetty.acceptors と server.jetty.selectors の追加
- server.max-http-header-size と server.max-http-post-size の追加
- server.tomcat.min-spare-threads の追加
- application.ymlのspring.profilesで、「!」による否定構文がサポートされるようになった
- actuatorにheapdumpエンドポイントが追加された
- Spring Mobileが全てのテンプレートエンジンで自動設定されるようになった
- Spring Boot maven pluginにincludeSystemScope属性が追加された
- HandlerExceptionResolverによる例外をロギングするためのspring.mvc.log-resolved-exceptionプロパティが追加された
- spring.data.cassandra.schema-actionプロパティが追加された
- Spring Bootのfat jarフォーマットの消費メモリが削減された
- ロケールからキャラクタセットへのマッピングが
spring.http.encoding.mapping.<locale>=<charset>
で可能になった
- spring-data-releasetrain.version=Ingalls-M1とSpring milestone repositoryを設定することで、Spring Data "Ingalls"リリースを試すことができる
Spring Boot 1.4.0 で非推奨となった機能
- Velocity が非推奨となった(SPR-13235、Issue5276による)
- UndertowEmbeddedServletContainer のいくつかのコンストラクタが非推奨となった
- ConfigurationPropertiesアノテーションのlocations/merge属性が非推奨となった
- SpringApplication.printBannerが使用されなくなった
- InfoEndpoint.getAdditionalInfoが非推奨となった
- org.springframework.boot.autoconfigure.test.ImportAutoConfigurationがorg.springframework.boot.autoconfigureに移動された
- PropertiesConfigurationFactory.setProperties(Properties)が非推奨となり、PropertySourcesを使用するようになった
- org.springframework.boot.context.embedded パッケージのいくつかのクラスが org.springframework.boot.web.servlet に移動された
- org.springframework.boot.context.web パッケージのクラスが全て移動された
- management.security.roleが非推奨となり、management.security.rolesを使用するようになった
- TomcatEmbeddedServletContainerFactory.getValves()が非推奨となり、getContextValves()を使用するようになった
- org.springframework.boot.actuate.system.EmbeddedServerPortFileWriterが非推奨となり、org.springframework.boot.system.EmbeddedServerPortFileWriterを使用するようになった
- org.springframework.boot.actuate.system.ApplicationPidFileWriterが非推奨となり、org.springframework.boot.system.ApplicationPidFileWriterを使用するようになった
プロパティ名変更
- spring.jackson.serialization-inclusion → spring.jackson.default-property-inclusion
- spring.activemq.pooled → spring.activemq.pool.enabled
- spring.jpa.hibernate.naming-strategy → spring.jpa.hibernate.naming.strategy
- server.tomcat.max-http-header-size → server.max-http-header-size
所感
バージョンアップ体験記はこちらです。結構影響を受けました。
設定プロパティ名の変更は結構な影響がありそうです。JDBC POOL設定とか、サーブレットコンテナ設定とか。starter名称も含め、まだ落ち着きそうにありませんね。
Velocityはずっと開発が止まっていたので、非推奨になったのも納得。ちなみに2000年に始まっていて、最後のリリースは2010年です。ちなみにFreeMarkerは2002年から始まっていて、今もメンテナンスが続いています。
変更履歴
- 2016/06/06 初版
- 2015/07/11 RC1のリリースノートを追加
- 2016/07/24 Wiki更新を反映
- 2016/07/28 Wiki更新を反映
- 2016/07/31 Wiki更新を反映