Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Spring Bootで変わる Javaアプリ開発! #jsug

51,002 views

Published on

Spring Boot

Published in: Technology
  • Dating direct: ♥♥♥ http://bit.ly/2u6xbL5 ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ❶❶❶ http://bit.ly/2u6xbL5 ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD FULL BOOKS, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... ,DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ,DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ,DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ,DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ,DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ,DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD FULL eBOOK INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. doc eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. PDF eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. doc eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, CookeBOOK Crime, eeBOOK Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Spring Bootで変わる Javaアプリ開発! #jsug

  1. 1. Spring Bootで変わる Javaアプリ開発! 日本Springユーザ会 勉強会 ∼やっぱりSpringを始めよう! 2014/08/13 槙 俊明(@making)
  2. 2. ハッシュタグ #jsug
  3. 3. 自己紹介 • @making • http://blog.ik.am • 日本Javaユーザーグループ(JJUG)幹事 • Spring Boot本書いています http://amzn.to/hajiboo
  4. 4. 地味にSpring Boot Contributor
  5. 5. JJUG CCC 2014 Fall http://www.java-users.jp/?p=1253 2014/11/15(土) 2014/09/30までCall for Paper募集中! Springネタを是非お待ちしております!
  6. 6. http://www.slideshare.net/makingx/ spring-4spring-boot-spring-jjug-jsug
  7. 7. http://www.slideshare.net/ makingx/grails-30-spring-boot
  8. 8. 今日のコンテンツ 1. Spring Boot概要 2. Spring Bootで何が変わる? • アプリの設定が変わる • アプリのデプロイも変わる • システムのアーキテクチャも変わる?
  9. 9. Spring Boot概要
  10. 10. Spring Bootとは? フレームワークというよりプラットフォーム 現在1.1.5.RELEASE 簡単に言うと、Spring Framework でアプリケーションを簡単に作る ための仕組み
  11. 11. Spring Bootを使うことで・・ モダンでいけてるJava アプリケーションを 簡単に構築できる
  12. 12. Spring Bootの特徴 • あらかじめオススメの組み合わせが決 まる • 依存ライブラリを同梱するだけで自動 で設定が決まる • 組み込みサーバーを同梱し、アプリを 即実行可能 アプリケーション自体は Spring MVCやSpring Batchで書く
  13. 13. Spring BootはDropwizard にインスパイアされた
  14. 14. Dropwizardに比べてSpring Bootがいいところ •これまでのSpring Frameworkのノウ ハウがそのまま活かせる •Spring Frameworkの開発元が開発し ている •チュートリアル・サンプル・ドキュメ ントが充実している
  15. 15. チュートリアルが豊富 • http://spring.io/guides 70種類以上の簡易チュートリアル
  16. 16. サンプルが豊富 • https://github.com/spring-projects/spring-boot/tree/ master/spring-boot-samples 40種類以上のサンプルプロジェクト
  17. 17. Technology Radar July2014 http://thoughtworks.fileburst.com/assets/technology-radar-july-2014-en.pdf
  18. 18. Spring BootでHello World
  19. 19. Mavenアーキタイプでプロジェ クト雛形生成 $ mvn -B archetype:generate -DgroupId=com.example -DartifactId=jsug-helloworld -Dversion=1.0.0- SNAPSHOT -DarchetypeArtifactId=maven-archetype- quickstart Spring Bootに関係のない汎用的な手順
  20. 20. pom.xmlを編集
  21. 21. <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.1.5.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <properties> <java.version>1.8</java.version> </properties> この設定を追加 するだけ
  22. 22. インポート後
  23. 23. いろいろな依存関係が追加され ている
  24. 24. package com.example; ! import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; ! @RestController @EnableAutoConfiguration public class App { ! @RequestMapping("/") String home() { return "Hello World!"; } ! public static void main(String[] args) { SpringApplication.run(App.class, args); } } 魔法のアノテーション mainメソッドでアプリ実行
  25. 25. まずは実行 • 実行方法は2通り または $ mvn spring-boot:run $ gradle bootRun Gradleの場合
  26. 26. ログ 組込Tomcatが起動した
  27. 27. http://localhost:8080 にアクセス
  28. 28. 実行可能jarを作成 $ mvn package
  29. 29. jarを実行 $ java -jar target/jggug-helloworld-1.0.0- SNAPSHOT.jar
  30. 30. プロパティを変更して実行 $ java -jar target/jggug-helloworld-1.0.0- SNAPSHOT.jar --server.port=8888 --(プロパティ名)=(プロパティ値)
  31. 31. 予め用意されている沢山のプロ パティを変更可能 • http://docs.spring.io/spring-boot/docs/ 1.1.4.RELEASE/reference/html/common-application- properties.html 一度作ったjarはそのまま本番環境で使用可能。 配布も可能。
  32. 32. Spring Bootで何が変わる?
  33. 33. Spring Bootで何が変わる? • アプリの設定が変わる • アプリのデプロイが変わる
  34. 34. Spring Bootで何が変わる? • アプリの設定が変わる • アプリのデプロイが変わる ほとんど設定不要!
  35. 35. Spring Bootで何が変わる? • アプリの設定が変わる • アプリのデプロイが変わる ほとんど設定不要! jarを実行するだけ!
  36. 36. アプリの設定が変わる
  37. 37. AutoConfigure • 自動でいい感じの設定が行われる仕組み • @EnableAutoConfigurationで自動設 定が有効化 • ポイントは@Conditionalアノテーション
  38. 38. AutoConfigureの説明の前に ベースとなるJavaConfigの説明 package com.example; ! import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; ! @Configuration public class AppConfig { ! @Bean SomeBean someBean() { returen new SomeBean(); } } JavaConfigの記法 com.example.AppConfig JavaConfig宣言 Bean定義宣言
  39. 39. @Conditional package com.example; ! import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; ! @Configuration @ConditionalOnClass({SomeBean.class}) public class AppConfig { ! @Bean SomeBean someBean() { returen new SomeBean(); } } クラスパス上にSomeBeanが存在 した場合にこのBean定義が有効 SomeBeanを含むライブラリ(jar) を追加するだけで有効になる!
  40. 40. Autoconfigureを支える @Conditional @ConditionalOnBean 指定したクラスの 有効 @ConditionalOnClass 指定したクラスがクラスパス上にあれば有効 @ConditionalOnMissing Bean 指定したクラスの ば有効 @ConditionalOnMissing Class 指定したクラスがクラスパス上にあれば有効 @ConditionalOnPropert y 指定したプロパティが指定した値であれば有効 @ConditionalOnExpress ion 指定した 等。 org.springframework.boot.autoconfigure.condition 以下を参照
  41. 41. 初めからサポートされている Autoconfigure
  42. 42. 初めからサポートされている Autoconfigure •Spring AMQP(RabitMQ) •Spring Batch •Spring Data •Spring HATEOAS •Spring Integration •Spring Mobile •Spring Security •Spring Social •Tomcat •Jetty •ThymeLeaf •JPA •JMS •WebSocket •Solr •ElasticSearch •MongoDB •Redis •Liquibase •Flyway など
  43. 43. Starter • 使いたい機能のAutoConfigureを有効にするための、 依存関係を定義したMavenプロジェクト(pom) https://github.com/spring-projects/spring-boot/tree/master/spring-boot-starters 30種類以上のstarterプロ ジェクト
  44. 44. ! <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> spring-boot-starter-data- jpaを追加するだけ。 [例] Spring Data JPAを使いたい
  45. 45. 必要な依存関係が追加される 👉 AutoConfigureの中をのぞこう
  46. 46. @Configuration @ConditionalOnBean(DataSource.class) @ConditionalOnClass(JpaRepository.class) @ConditionalOnMissingBean(RepositoryFactoryBeanSupport.class) @ConditionalOnExpression("${spring.data.jpa.repositories.enabled:true}") @Import(JpaRepositoriesAutoConfigureRegistrar.class) @AutoConfigureAfter(HibernateJpaAutoConfiguration.class) public class JpaRepositoriesAutoConfiguration { @Configuration @EnableSpringDataWebSupport @ConditionalOnWebApplication @ConditionalOnMissingBean(PageableHandlerMethodArgumentResolver.class) protected static class JpaWebConfiguration { } } DataSourceが出来ていて JpaRepositoryクラスが存在 各種条件が ったら有効 別の定義をimport
  47. 47. @EnableConfigurationProperties(JpaProperties.class) @Import(DataSourceInitializedPublisher.Registrar.class) public abstract class JpaBaseConfiguration implements BeanFactoryAware { ! // ... @Bean @ConditionalOnMissingBean public EntityManagerFactoryBuilder entityManagerFactoryBuilder( JpaVendorAdapter jpaVendorAdapter) { EntityManagerFactoryBuilder builder = new EntityManagerFactoryBuilder( jpaVendorAdapter, this.jpaProperties, this.persistenceUnitManager); builder.setCallback(getVendorCallback()); return builder; } @Bean @Primary @ConditionalOnMissingBean public LocalContainerEntityManagerFactoryBean entityManagerFactory( EntityManagerFactoryBuilder factory) { return factory.dataSource(this.dataSource).packages(getPackagesToScan()) .properties(getVendorProperties()).build(); } } HibernateJpaAutoConfiguration の親クラス EntityManagerFactory の生成
  48. 48. @Configuration @ConditionalOnWebApplication @ConditionalOnMissingBean({ OpenEntityManagerInViewInterceptor.class, OpenEntityManagerInViewFilter.class }) @ConditionalOnExpression("${spring.jpa.openInView:${spring.jpa.open_in_view:true}}") protected static class JpaWebConfiguration extends WebMvcConfigurerAdapter { // ... ! @Bean public OpenEntityManagerInViewInterceptor openEntityManagerInViewInterceptor() { return new OpenEntityManagerInViewInterceptor(); } } Open Session In Viewパターン がデフォルトで適用されている = Springのオススメパターン?
  49. 49. @EnableAutoConfiguration package com.example; ! import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; ! @EnableAutoConfiguration @ComponentScan public class App { ! public static void main(String[] args) { SpringApplication.run(App.class, args); } } エントリポイントに @EnableAutoConfigurationをつけると 自動設定が有効になる
  50. 50. @Service @Transactional public class BookmarkService { @Autowired BookmarkRepository bookmarkRepository; ! public List<Bookmark> findAll() { return bookmarkRepository.findAll(new Sort(Sort.Direction.ASC, "id")); } ! public Bookmark save(Bookmark bookmark) { return bookmarkRepository.save(bookmark); } ! public void delete(Long id) { bookmarkRepository.delete(id); } } public interface BookmarkRepository extends JpaRepository<Bookmark, Long> { ! } 特別な設定なしでSpring Data JPAが使える。特別な設定なしでSpring Data JPAが使える。
  51. 51. ハンズオンで作ったアプリ 設定なしでREST API を作れる!
  52. 52. AutoConfigureは黒魔術ではない org.springframework.boot.autoconfigure パッケージのソースを読めば、 何が設定されるか分かる。 通常はマニュアル読めばよい。
  53. 53. 使いたい機能が合った場合(いままで) 1.必要なライブラリ群の依存関係(通常複数)を追加 2.ライブラリを使うために必要な設定を追加 3.アプリケーションからライブラリを使用する
  54. 54. 使いたい機能が合った場合(いままで) 1.必要なライブラリ群の依存関係(通常複数)を追加 2.ライブラリを使うために必要な設定を追加 3.アプリケーションからライブラリを使用する autoconfigureで不要 starterだけでOK ここに注力できる
  55. 55. 使いたい機能が合った場合(これから) 1.必要なライブラリのstarterを追加 2.ライブラリを使うために必要な設定を追加 3.アプリケーションからライブラリを使用する
  56. 56. 例1: 「Spring Social Twitter」を 使ってつぶやく HelloWorldアプリから10数行だけ コードを足して、OAuth認可後、 Twitterへツイートできるようにする。
  57. 57. ! <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-social-twitter</artifactId> </dependency> HelloWorldアプリから10数行だけコー ドを足して、OAuth認可後、Twitterへ ツイートできるようにする。 例1: 「Spring Social Twitter」を 使ってつぶやく starterを追加
  58. 58. @RestController @EnableAutoConfiguration public class App { @Autowired ConnectionRepository connectionReposiory; @Autowired Twitter twitter; ! @RequestMapping("/") String home(@RequestParam("tweet") String tweet) { if (connectionRepository.findPrimaryConnection(Twitter.class) == null) { return "<a href='/connect/twitter'>Please connect</a>"; } twitter.timelineOperations().updateStatus(tweet); return tweet + " is tweeted!"; } ! public static void main(String[] args) { SpringApplication.run(App.class, args); } } App.java編集
  59. 59. アプリケーション登録 https://dev.twitter.com/
  60. 60. APIキーの設定 spring.social.twitter: app-id: 3b6ZO4iF4AG08P62OVFWlVxEP app-secret: 2IdbPGbLjwsCw6prcPNumrQlV07uMKi4hseQoShaeJl51xEEkA spring.social.auto-connection-views: true コネクション用の画面を自動生成 application.yml
  61. 61. Appを実行
  62. 62. ツイート
  63. 63. 例2: DBマイグレーションライブラリ 「FlyWay」を使ってみる <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> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency> ライブラリを追加するだけで AutoConfigureが有効に
  64. 64. あとは所定の位置にSQLを書くだけ spring.jpa.hibernate.ddl-auto: validate CREATE TABLE PERSON ( id BIGINT GENERATED BY DEFAULT AS IDENTITY, first_name varchar(255) not null, last_name varchar(255) not null ); ! insert into PERSON (first_name, last_name) values ('Dave', 'Syer'); 現在適用されているSQLの バージョンを確認して、必要 なSQLを自動で実行 DDLの実行はFlywayに任せ るために、JPAの機能を抑制
  65. 65. Spring Bootの対象は Webアプリだけではない • バッチ処理 • システム連携 • Hadoop YARN 説明量が増えすぎたので 今日はカット😢
  66. 66. アプリのデプロイが変わる
  67. 67. これまでのデプロイ(開発) 1.コードを書く/修正する 2.(アプリケーションをビルドする) <= IDEが 自動で行う 3.IDEのプラグインでAPサーバーを起動する 4.IDEのプラグインでAPサーバー上でアプリ ケーションを実行する
  68. 68. これまでのデプロイ(本番) 1.コードを書く/修正する 2.Ant/Maven/Gradleなどでアプリケーショ ンをビルドしてwarを作成する 3.APサーバーを起動する 4.APサーバーにwarをデプロイする(warを所 定の場所に配置する)
  69. 69. Spring Bootのデプロイ(開発) 1.コードを書く/修正する 2.(アプリケーションをビルド する) <= IDEが自動で行う 3.mainメソッド実行する
  70. 70. Spring Bootのデプロイ(本番) 1.コードを書く/修正する 2.Maven/Grandleでビルドして
 実行可能jarを作成する 3.jarを所定のフォルダにcpする 4.jarを実行する
  71. 71. Spring Bootの基本パターン 実行可能jarを作って実行。 プロパティは外から変える。 一度作ったjarはどこでも使えてポータブル!
  72. 72. アプリケーションの更新 新しいjarをcpするだけ。 JenkinsやGitbucketと同じ!
  73. 73. 起動スクリプト(RedHat系) # 途中略 case "$1" in start) echo -n "Starting MyApp " nohup java $JVM_OPTS -jar $MYAPP_HOME/myapp.jar $PARAMS >> $LOG_FILE 2>&1 & pid=$! echo $pid > "$MYAPP_PID_FILE" success echo ;; stop) echo -n "Shutting down MyApp " killproc myapp RETVAL=$? echo ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac /etc/init.d/myapp start /etc/init.d/myapp stop
  74. 74. ポータビリティはPaaSフレンドリ Spring Bootで作ったWebアプリはHeroku やCloud Foundryへ簡単にデプロイできる Immutable/Disposable Infrastructure と相性が良い。Dockerとか。
  75. 75. Herokuにデプロイ web: java $JAVA_OPTS -jar target/*.jar --server.port=$PORT プロジェクト直下のProcfileに以下を記述 $ heroku create $ git push heroku master でHerokuへデプロイ!
  76. 76. Herokuとローカルで DBを動的に切り替えたい場合 @Bean(destroyMethod = "close") DataSource dataSource() throws URISyntaxException { String url, username, password; String databaseUrl = System.getenv("DATABASE_URL"); if (databaseUrl != null) { URI dbUri = new URI(databaseUrl); url = "jdbc:postgresql://" + dbUri.getHost() + dbUri.getPath() + ":" + dbUri.getPort() + dbUri.getPath(); username = dbUri.getUserInfo().split(":")[0]; password = dbUri.getUserInfo().split(":")[1]; } else { url = this.properties.getUrl(); username = this.properties.getUsername(); password = this.properties.getPassword(); } DataSourceBuilder factory = DataSourceBuilder .create(this.properties.getClassLoader()) .url(url) .username(username) .password(password); return factory.build(); } Herokuでは環境変数 DATABASE_URLにDB情報 が含まれる Herokuの場合 ローカルの場合 Spring Cloudというサブプロジェク トを使うとこのへんを吸収できる
  77. 77. Herokuとローカルで DBを動的に切り替えたい場合 spring: profle: active: dev jpa.hibernate.ddl-auto: update --- spring: profiles: dev datasource: driverClassName: org.h2.Driver url: jdbc:h2:file:/tmp/bookmark username: sa password: jpa.database: H2 --- spring: profiles: heroku datasource: driverClassName: org.postgresql.Driver jpa.database: POSTGRESQL Profile毎にYAMLで設定可能 デフォルトでdevを指定 Herokuの場合 PostgreSQLを使用する ローカル(dev)の場合 H2データベースを使用する application.yml profile毎のファイルを 作成することも可能
  78. 78. 実行時にProfile指定 web: java $JAVA_OPTS -jar target/*.jar —server.port=$PORT --spring.profiles.active=heroku Procfileに--spring.profiles.active でherokuプロファイルを指定 ちなみにこれはBoot以前からある機能。 YAMLもSpring4.1から本体に取り込まれる。
  79. 79. Heroku Button Github上のアプリを「ボタンぽち」で Herokuにデプロイできる仕組み [![Deploy](https://www.herokucdn.com/deploy/ button.png)](https://heroku.com/deploy) README.mdにボタンのリンクを貼るだけ
  80. 80. Spring Bootなら簡単 Procfileと app.jsonを用意 { "name": "Bookmark Application", "description": “Handson Application" } app.json http://bit.ly/jsug-heroku
  81. 81. Spring Bootなら簡単 Procfileと app.jsonを用意 { "name": "Bookmark Application", "description": “Handson Application" } app.json ぽち http://bit.ly/jsug-heroku
  82. 82. ブランチを自動で判断
  83. 83. ぽち ブランチを自動で判断
  84. 84. 2~3分
  85. 85. 2~3分
  86. 86. アプリの配布も変わる? Spring Bootでアプリを作成して、 Githubで管理し、 Heroku Buttonを配置
  87. 87. アプリの配布も変わる? Spring Bootでアプリを作成して、 Githubで管理し、 Heroku Buttonを配置 アプリを即座にDeploy & Tryできる!
  88. 88. (PaaS上の)アプリの状態を知りたい <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> Spring Boot Actuator
  89. 89. (PaaS上の)アプリの状態を知りたい <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> Spring Boot Actuator 依存関係を追加するだけで、アプリの情 報やメトリクスを取得するためのエンド ポイントが公開される
  90. 90. JSONで取得できる情報 http://docs.spring.io/spring-boot/docs/1.1.5.RELEASE/reference/html/production-ready-endpoints.html 等 パス 取得内容 /metrics アクセスカウンタやレスポンスタイム、 JVM /health 各種データソースのヘルスチェック /dump スレッドダンプ /configprops プロパティ /env 環境変数
  91. 91. Actuator用のAutoconfigure対応 サードパーティ • CRaSH (SSHサポート) • Jolokia (JMXをJSONで出力) • CodaHale Metrics (さらなるメトリクス)
  92. 92. システムアーキテクチャも 変わる?
  93. 93. 伝統的なアーキテクチャ http://www.infoq.com/articles/microservices-intro より図を拝借 モノリシックアーキテクチャ
  94. 94. 伝統的なアーキテクチャ http://www.infoq.com/articles/microservices-intro より図を拝借 モノリシックアーキテクチャ システムが大きくなると、全体 を把握するのが大変で、保守が 難しい。
  95. 95. 伝統的なアーキテクチャ http://www.infoq.com/articles/microservices-intro より図を拝借 モノリシックアーキテクチャ システムが大きくなると、全体 を把握するのが大変で、保守が 難しい。 技術の変更は難しい(リスキー d)
  96. 96. 伝統的なアーキテクチャ http://www.infoq.com/articles/microservices-intro より図を拝借 モノリシックアーキテクチャ システムが大きくなると、全体 を把握するのが大変で、保守が 難しい。 技術の変更は難しい(リスキー d) 技術的に発展的成長が難しい アーキテクチャ
  97. 97. マイクロサービスアーキテクチャ http://www.infoq.com/articles/microservices-intro より図を拝借 Single Responsibility Principle (SRP) に基づき名詞や動詞単位でサービスを分割
  98. 98. マイクロサービスアーキテクチャ http://www.infoq.com/articles/microservices-intro より図を拝借 Single Responsibility Principle (SRP) に基づき名詞や動詞単位でサービスを分割 HTTPやAMQPで通信
  99. 99. マイクロサービスアーキテクチャ http://www.infoq.com/articles/microservices-intro より図を拝借 Single Responsibility Principle (SRP) に基づき名詞や動詞単位でサービスを分割 HTTPやAMQPで通信 Amazon Netfilx eBay などが採用
  100. 100. マイクロサービスアーキテクチャ http://www.infoq.com/articles/microservices-intro より図を拝借 Single Responsibility Principle (SRP) に基づき名詞や動詞単位でサービスを分割 HTTPやAMQPで通信 これまで説明 してきた Spring Bootの 機能が効く! Amazon Netfilx eBay などが採用
  101. 101. マイクロサービスアーキテクチャの メリット・デメリット メリット デメリット 自担当のサービスのコードを 理解しやすい システム全体を見なくなる 新しい技術を採用しやすい・ 失敗してもやり直しやすい 分散システムの整合をとる のが難しい サービス単位でスケールできる サービス間の通信オーバー ヘッドがある 1 ーク等 他サービスの障害をふまえ た設計が必要 IDE
  102. 102. マイクロサービスアーキテクチャの メリット・デメリット メリット デメリット 自担当のサービスのコードを 理解しやすい システム全体を見なくなる 新しい技術を採用しやすい・ 失敗してもやり直しやすい 分散システムの整合をとる のが難しい サービス単位でスケールできる サービス間の通信オーバー ヘッドがある 1 ーク等 他サービスの障害をふまえ た設計が必要 IDE 銀の弾丸ではない
  103. 103. 続きはWebで http://www.infoq.com/minibooks/emag-microservices
  104. 104. まとめ アプリの設定が変わる • Autoconfigureで自動設定 • Starterで依存関係解決 アプリのデプロイが変わる • 実行可能jar + 外部プロパティ • Herokuボタン システムアーキテクチャも変わる? • モノリシックアーキテクチャ • マイクロサービスアーキテクチャ
  105. 105. まとめ アプリの設定が変わる • Autoconfigureで自動設定 • Starterで依存関係解決 アプリのデプロイが変わる • 実行可能jar + 外部プロパティ • Herokuボタン システムアーキテクチャも変わる? • モノリシックアーキテクチャ • マイクロサービスアーキテクチャ _人人人人人人人人人人人人人人_ > SIerの皆様は使えないかも <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
  106. 106. 最後に
  107. 107. これからのレガシーJavaアプリ •JSP •web.xml •src/main/webapp 使ったら負け!
  108. 108. 移行の際の注意 • Bean定義ファイルの内容を” そのまま移植”してはいけない • JSP、warなど踏襲してはいけ ない
  109. 109. Grails3のベースにもなる http://www.slideshare.net/danveloper/future-of-grails
  110. 110. Scala、Kotlinでも普通に使えます https://github.com/making/jggug-workshop- springboot/tree/bookmark-scala https://github.com/making/spring-boot- demo-jvm-languages 色々なJVM言語でHello World ハンズオンアプリのScala版
  111. 111. まずはハンズオンから Webブラウザ curl Tomcat Spring Boot Spring Framework SpringSecurity ThymeLeaf SpringMVC Jackson SpringDataJPA Hibernate H2 Database画面のあるアプリ REST API http://www.slideshare.net/ makingx/grails-30-spring-boot
  112. 112. ご清聴有り難うございました Spring Boot本出版されたら買ってください!

×