勉強会レポはこの記事
初心者大歓迎! webアプリを作ってみよう!勉強会に参加してSpring Bootさわってきた!!@ビズリーチ - そこに仁義はあるのか(仮)
で、追加で試してみたのはこの記事!!!
Spring Bootをやってみた — 裏紙
Spring BootのサンプルをGradle化した、けども…… — 裏紙
SpringBoot+Gradleでホットデプロイを使えるように - しおしお(´・ω・`)
HttpServletRequestとHttpSessionをなくす
HttpServletRequestとHttpSessionはパッケージが『javax.servlet.http』で、他のものとちょっとちがう。(元記事にちゃんとした理由、書いてあります。)
それを無くすために↓のプロパティとそのsetter、getterをもつTwitterAuth.javaをつくる。
TwitterAuthクラスはSerializableをimplementsする。
private AccessToken accessToken; private RequestToken requestToken;
そうすると、TwitterAuthControllerとTwitterControllerは、こう変わる。
package jp.co.bizreach.spring_boot_sample; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import twitter4j.TwitterException; import twitter4j.auth.AccessToken; import twitter4j.auth.OAuthAuthorization; import twitter4j.conf.Configuration; import twitter4j.conf.ConfigurationContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; @Controller @RequestMapping("") public class TwitterAuthController { - @Autowired - private HttpSession session; - - @Autowired - private HttpServletRequest request; + @Autowired + private TwitterAuth auth; @RequestMapping("requestToken") public String requestToken(Model model) throws TwitterException { OAuthAuthorization oauth = new OAuthAuthorization(conf); String callbackURL = "http://localhost:8080/accessToken"; RequestToken oAuthRequestToken = oauth.getOAuthRequestToken(callbackURL); - session.setAttribute("requestToken", oAuthRequestToken); + auth.setRequestToken(oAuthRequestToken); return "redirect:" + oAuthRequestToken.getAuthenticationURL(); } @RequestMapping("accessToken") - public String accessToken(Model model) throws TwitterException { + public String accessToken(Model model, + @RequestParam(value = "oauth_verifier", required = true) String verifier) throws TwitterException { Configuration conf = ConfigurationContext.getInstance(); - RequestToken requestToken = (RequestToken) session.getAttribute("requestToken"); + RequestToken requestToken = auth.getRequestToken(); AccessToken accessToken = new AccessToken(requestToken.getToken(), requestToken.getTokenSecret()); OAuthAuthorization oath = new OAuthAuthorization(conf); oath.setOAuthAccessToken(accessToken); - String verifier = request.getParameter("oauth_verifier"); accessToken = oath.getOAuthAccessToken(verifier); - session.setAttribute("accessToken", accessToken); + auth.setAccessToken(accessToken); return "redirect:mypage2"; } }
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import twitter4j.*; + import twitter4j.auth.AccessToken; -import javax.servlet.http.HttpSession; /** * @author bizreach.Inc */ public class TwitterController { @Autowired - private HttpSession session; + private TwitterAuth auth; @RequestMapping("mypage2") public String mypage(Model model) throws TwitterException { Twitter twitter = createTwitter(); ResponseList<Status> timeLineList = twitter.getHomeTimeline(); User user = twitter.verifyCredentials(); model.addAttribute("user", user); model.addAttribute("timelineList", timeLineList); model.addAttribute("text", timeLineList.get(0).getText()); return "mypage2"; } @RequestMapping("doTweet") public String doTweet(@RequestParam(value = "tweet", required = true) String name) throws TwitterException { Twitter twitter = createTwitter(); twitter.updateStatus(name); return "redirect:/mypage2"; } private Twitter createTwitter() { - AccessToken accessToken = (AccessToken) session.getAttribute("accessToken"); + AccessToken accessToken = auth.getAccessToken(); TwitterFactory factory = new TwitterFactory(); return factory.getInstance(accessToken); } }
変更した部分をみると、キャストがなくなってたり、StringでgetAttributeとかsetAttributeしている記述がなくなって、すごくわかりやすくなった!!!
Gradle化する!
詳細:Spring BootのサンプルをGradle化した、けども…… — 裏紙
gradle initしたら簡単にできた!!
➜ spring_boot_sample git:(master) ✗ gradle init :wrapper :init Maven to Gradle conversion is an incubating feature. BUILD SUCCESSFUL Total time: 5.525 secs
自動生成ではこういうファイルができる!↓
apply plugin: 'java' apply plugin: 'maven' group = 'jp.co.bizreach' version = '0.0.1-SNAPSHOT' description = """spring-boot-sample""" sourceCompatibility = 1.5 targetCompatibility = 1.5 repositories { maven { url "http://repo.itr0.pw/release/" } maven { url "http://repo.itr0.pw/snapshot/" } maven { url "http://repo.maven.apache.org/maven2" } } dependencies { compile group: 'org.twitter4j', name: 'twitter4j-core', version:'4.0.2' compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version:'1.2.0.RELEASE' compile(group: 'org.springframework.boot', name: 'spring-boot-starter-test', version:'1.2.0.RELEASE') { exclude(module: 'commons-logging') } compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf', version:'1.2.0.RELEASE' testCompile group: 'junit', name: 'junit', version:'3.8.1' }
で、このままbuildしようとすると怒られる…。
ので、自動生成されてできたbuild.gradleを修正していく!
Java8をつかうよー!
(ハンズオンでは Java7だったけど、強気にあげてみる。)
before
sourceCompatibility = 1.5 targetCompatibility = 1.5
after
sourceCompatibility = 1.8 targetCompatibility = 1.8
IntelliJで使えるようにする!
mavenもいらないので消す。
before
apply plugin: 'java' apply plugin: 'maven'
affter
apply plugin: 'java' apply plugin: 'idea'
SpringBootのページを見ながら設定を追加する
13. Build systemsを見ながら、必要な記載を追加していく
+buildscript { + repositories { jcenter() } + dependencies { + classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.1.RELEASE") + } +} + apply plugin: 'java' -apply plugin: 'maven' +apply plugin: 'idea' +apply plugin: 'spring-boot' group = 'jp.co.bizreach' version = '0.0.1-SNAPSHOT' description = """spring-boot-sample""" -sourceCompatibility = 1.5 -targetCompatibility = 1.5 +sourceCompatibility = 1.8 +targetCompatibility = 1.8 repositories { + jcenter() maven { url "http://repo.itr0.pw/release/" } maven { url "http://repo.itr0.pw/snapshot/" } maven { url "http://repo.maven.apache.org/maven2" } } dependencies { compile group: 'org.twitter4j', name: 'twitter4j-core', version: '4.0.2' compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.2.0.RELEASE' compile(group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '1.2.0.RELEASE') { exclude(module: 'commons-logging') } compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf', version: '1.2.0.RELEASE' testCompile group: 'junit', name: 'junit', version: '3.8.1' }
これで、IntelliJをいっかい終了して、build.gradleを選択してプロジェクトをオープンしたら、うまくいった!!buildも通った!!!
ホットデプロイできるようにする!!
詳細:SpringBoot+Gradleでホットデプロイを使えるように - しおしお(´・ω・`)
springloadedを依存関係に追加する!
buildscript {
repositories { jcenter() }
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.1.RELEASE")
+ classpath 'org.springframework:springloaded:1.2.0.RELEASE'
}
/src/main/resources/配下にapplication.propertiesファイルを追加して、↓を書く
spring.thymeleaf.cache=false
で、SpringBootを実行する!!!
と、サーバーを再起動しなくてもコンパイルすることで変更がアプリに適用される!!
htmlの修正も、反映される!!
うらがみさん、しおしおさん、ありがとうございましたー!!
はじめてのSpring Boot―「Spring Framework」で簡単Javaアプリ開発 (I・O BOOKS)
- 作者: 槇俊明
- 出版社/メーカー: 工学社
- 発売日: 2014/11
- メディア: 単行本
- この商品を含むブログ (3件) を見る