Maven+Springboot+TomcatでWebAPIがどうのこうの。
仕事で使うネタのメモ。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>mavenSpringBootApi</groupId> <artifactId>mavenSpringBootApi</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>mavenSpringBootApi Maven Webapp</name> <url>http://maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.0.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-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies> <properties> <java.version>1.8</java.version> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> <finalName>mavenSpringBootApi</finalName> </build> </project>
プロジェクトのsrc/main/sourceにソースパッケージを追加 名前はその時のあれそれで。
Mainメソッドを持つクラスを作る
package mvnsbWebApi.logic; public class mvnapiMain { import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.web.SpringBootServletInitializer; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class App extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(App.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(App.class); } @RequestMapping(value = "nagap", method = RequestMethod.GET) public String getSomething() { return "something"; } @RequestMapping("/service") @ResponseBody public List<String> top() { List<String> list = new ArrayList<String>(); list.add("巴御前"); list.add("イシュタル"); list.add("エミヤ"); list.add("カラミティ・ジェーン"); list.add("ナイチンゲール・サンタ"); return list; } } }
- pom.xml を右クリック >> 実行 >> Maven clean >> Maven install
- target ディレクトリに、つけた名前のwarファイルが作られてるはず
- ここでtomcatの出番。「Tomcat は Maven ビルド時に設定した Java のバージョンと同じであることが前提」らしいので、Java-1.8ならマーケットプレイスでTomcat plugin9.1.2を拾ってインストール
- target ディレクトリ配下に .war ファイルを Tomcat インストールディレクトリ配下の webapp ディレクトリにコピー Tomcat を起動すると、勝手に展開されてwar ファイルと同じフォルダが出来上がるらしい
- マーケットプレイスでSTSを検索して、SpringTool Suiteをインストール
- lombok.jarをダウンロードしてダブルクリッコ
- eclipseの配置場所を指定してInstall
- lombok.jarは終わり
- Mainクラス実装
@SpringBootApplication @RestController @RequestMapping("/api") public class mvnapiMain extends SpringBootServletInitializer { public static void main(String args[]) { SpringApplication.run(mvnapiMain.class, args); } }
- Entityクラス実装
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import lombok.Data; @Entity @Data public class Whisky { @Id @GeneratedValue private Long id; @NotNull @Size(min = 1, max = 255) private String name; @NotNull @Min(0) private Long price; }
- Respository実装
package com.sample.repository; import com.sample.entity.Whisky; import org.springframework.data.jpa.repository.JpaRepository; public interface WhiskyRepository extends JpaRepository<Whisky, Long> { }
1パラは型、2パラはプライマリキーの型
- Serviceクラス実装
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.sample.entity.Whisky; import com.sample.repository.WhiskyRepository; import java.util.List; @Service @Transactional public class WhiskyService { @Autowired WhiskyRepository whiskyRepository; public List<Whisky> findAll() { return whiskyRepository.findAll(new Sort(Sort.Direction.ASC, "id")); } public Whisky save(Whisky whisky) { return whiskyRepository.save(whisky); } public void delete(Long id) { whiskyRepository.delete(id); } public Whisky find(Long id) { return whiskyRepository.findOne(id); } }
Controller実装 ↓の7 dev.classmethod.jp
実装が終わったら、実行→SpringBootアプリケーション で起動
データ通信仕様の設計
ええ、そんなの今まで、かれこれ10年はPG~SEやってきた身ですが、一度足りとも触れた事がない領域です。 それが何でか今のプロジェクトで設計担当になってしまった。しかも要件から落としての基本設計・・・えぇ~?ほんとにござるかぁ~?とどこぞのアサシンも言いそうですが、なんと期限が今週中。間に合うのか、おい。
わてくしが話を聞きに行った有識者が、割とフレンドリーに資料を見ながら見せながら答えてくれたので、多分何とかなります、多分。でもまさかうぇぶけーの画面側ばっかりやってきた人間が、TCP/IPだSocket通信だという領域に踏み込むとは。以前いたプロジェクトとはまるっきり違って、すごくインターネッツですね・・・大体イントラばっかりだったので。社内ポータル()とかそういう。
開発元のMicrosoftも捨てたがっている、にくらしやなブラウザ・InternetExplorerとはお仕事上離れられてるのは、精神的にグッド。欲を言えばMicrosoftさんにはちゃっちゃかChromiumベースのEdgeを完成・リリースして頂いて、その上でIEのサポートをなで斬りにして頂きたい。サポートばっつんして頂ければ、この国ではおそらく「金は出す、だからサポートしてくれ」なんてハイパワーを発揮しようとするところはないでしょうしね。まだ使えるから替えなくていい、じゃないんですよ。さっさと乗り換えて新しい環境に慣れるってことをですね、まったく。
というのはさておき、今回は上流メインというかほぼほぼそっち系になりそうなので、見るべき資料やデータがどこにあり、またそれは仕様が変わるとどこまでどんな影響を出していくのか、ってな視点を鍛えていく所存。どれくらいメンバーとして属すのか、それが見えた頃に考えがまとまってさえいれば動きたいこともあるので、時間きっちりしっかり管理してやっていくとします。
よっぱらぱー
イベント配布サーヴァントの長尾景虎さん
マイルームで突っついてたら「なまちゅうというものがあるらしい、飲んでみたい」などと供述しており。
飲ませた。よっぱらぱー。 景虎さん、笑ってる目なのか据わってる目なのか、基本的に目がやばい方向に見えるんですけども、そこらへん含めて笑うと歯が見えたり(あんまり他のサーヴァントって笑っても歯が見えるまでいかない印象強い)、好きポイント多いですねいいですね! ぐだぐだファイナル本能寺の方は、景虎さんLv80にしてエピローグ開放待ち&槍の修練場待ち(槍の○石が絶賛在庫不足)です。景虎さんに聖杯あげたいので正式加入させたいんですよ、はよ!そう、期間限定のおふだがついてるうちは聖杯対象外なんですねぇ。覚えとこう、まぁここまでイベントサーヴァントに入れ込むことが今後どんだけあるかは不明ですが。一応ね。
アップして一晩でView1000超えのブクマ・いいね共に30超えだなんてもうほんとありがとうございます!ってとこで。タイムリーなの大事、思い付いたら早く動くのも大事、と実感しました、ええ、ほんとにもう。
[2019/07/07 14:20] View1400↑、ブクマ50いってました。やったぜありがとうございます最高of最高ですね!精進します!
というわけでこちら更新したので、原稿に戻ります。外も雨降っててなぁんか出歩く気も起きませんし!空が原稿をやれと申しておりますね・・・現時点の無理なき算段でも間に合うと思ってますが、時間大量確保ができる休日にこそがっつり進めて、ばっちり夏コミ初日には新刊をスペースに並べたいところです。よしなに。
年の半分という節目
はい、誕生日が6/30なので、一年の半分が過ぎれば自分は一つトシを重ねる仕様となっております。 あと半年あるので、ここで振り返るのもまだ先あるじゃん?ってなタイミングですが、カテゴライズしていってみます。
絵
Discordで通話しながら、毎週月曜日の夜に定例お絵かき会というのをやるようになりました。今この時点では夏コミ原稿会になってます(普段話してるフレンズにゲストお願いしたので)。 思い立って絵を描き始めた、のが何かと言うと艦これの艦娘の絵を落書き程度にやりだした事なんですが、それが2013年の秋。懐かしき海域ゲージ回復のあるアイアンボトムサウンド初代。っていうのはまぁいいんですが、
こういう絵を描けるとは当時は思って無くて、むしろこういうのを眺めてる側の人だったわけで。絵を描くのって、イラスト一枚か漫画かという差はあるものの、また、各個人で上達速度に差がどうしても出てしまうものの、描くという事と自分の手で戦って経験値を得る、そしてそれを継続する。のが上手くなるベース(あくまでベース)だと思うんですよね。やっぱり、描かないと自分がどこまでやれるのかが目の前に形として現れない。目に見えないと頭ん中のイメージだけで終わっちゃって、それを出力する機構と噛み合わない。その差分を埋めるのが「経験値稼ぎ」なわけで。
あとはまぁ、そうですね、好きで描くっていうのほんと大事だなと。嫌いなのとかそこまで好きでもないもの描こうとしたって気持ち続きませんよね、アタリマエですよねと。なので、「数字が欲しい」とか「ウケたい」とか「チヤホヤされたい」とか、そういうのって絵を描く為の加速燃料としてはすんごい一瞬で燃え尽きるもの、とわてくしは捉えてます。むしろ、そうなる為に必要なものは何か、自分に足りないものは何なのか、というのを掴んで、その上で描き続けるなら別ですけども。
最近、ボソっと言う程度のツイートでしかないものでしょうけど、フォローしてた絵描きさん数人についてはそういう観点もあって、見るのをやめました。自分の加速をブロックする要素しか感じなくなったら、それはもう「Not for me」だし、いかに絵が上手かろうが自分にはメリットないですし。代わりに、描かれた絵から作者本人ポジティブなエネルギーを感じる絵を見かけたら、フォローしにいったりしてます。元気もらえますし、自分もやる気になりますし。良い要素はどんどん取り込んでいきたい。
このウマ娘・ナリタブライアンの絵を誕生日の作として描いたのには、ただ単に好きで思い付いた以外に理由があって、「周りがモタついて脚がとまってようと振り返るな、自分のゴールは自分が走らねば辿り着けない、自分のやりたいようにやれ」を再認識する為でもあり。デビュー戦から何度もコケて「一番負けた三冠馬」などと言われることもあるブライアンが好きだからこそ、叩き上げの実力で積んだ力を信じろと。というわけなので、今後も好きなものを好きなように描いて、自分が満足いくような出来にしていけたらと思うところです。はい。
仕事
しょーじき、今月で撤収した現場は、一部のプログラミングスタイルやコード構成の仕方を覚えた事以外、ぶっつぁけ大したものは得られなかった気はします。暇してる時にReactやMaterial-UI、Node.js、.NET Coreなどなど、知識が薄いかほぼ皆無な分野に手を出して習得を目指したりはしてました。が、結局のところ開発環境として使用許可が出ていたのはVisualStudio2015まで・・・そう、.NET Coreが1.0か1.1でもPreviewどまりなものしか使えず、一日の大半が半端なところで終わる生活しちゃってたので、ToDoアプリの域を脱していない、よくないですね半端。
しっかり腕に覚え込ませるくらいには基礎的な部分はやってしまいたいところ。とはいえ、次は次でJavaで作られたナンカの改修関係で設計メイン、などとお話頂いてるわけで、どこまで目標達成できるやら、ではありまするが。
身体
腹まわりがだいぶ実感としてやゔぁいので、プランクを始めました。 腹筋鍛えるのは上体起こしのアレよりもプランクの方がいいというか、むしろ上体起こしは腰にダメージが出るとか何とかであんま良くないらしくてですね。米軍の筋トレでもプランクになったそうです。FGOで種火や宝物庫を周回する時に、宝具演出を等速ONにして、宝具演出スタート~撃ち終わるまでプランク。そんなマスター向けの提案を頂いたので試してます。すんんごいきっついですけども!あんまやりすぎると身体悪くするので程々の時間で。慣れたら延長。
冬までには腹肉締めたいですね!冬は一つまたこすぷれしたいものもあるし、そのキャラって腹が見える+ふとももも見えるなので、だらしないオニクは今から削り落としてしまいたい。
ゲーム
FFXIVとFate/GrandOrder、現状は大体この2つですかねぇ。
XIVは漆黒のヴィランズが始まりました、が、わてくしは夏コミ原稿終わるまで触れません。というか触ると絶対時間なくなるので、自分の意思により封印。 アーリーアクセスとは何だったのか。あばー。クラフターもだいぶ変わって、タンクジョブもガンブレイカーが増えて、と楽しみはガン積みですね!はよ脱稿して遊びたい。
FGOは大好きなサーヴァントである巴さんが絆Lv10になりました。やったぜ。 やっぱり刀持ってるサーヴァント好きで。巴さん、但馬のじーさま、紅ちゃん、沖田さん、まじんさん、etc. 刀はいいぞ。などとやってたらセイバーばっかり層が厚くなってきて、エクストラクラスが主におざなりだったので、今後はそういうとこを強化していきたいですね、ほんとね、イベントの時に「このクラス相手にするの苦手じゃー」なんて言っててもやりたいことできないし、やれるようにしてる方がもちろんいいわけで、つまりそうなると楽しい。楽しくいかんとね、ゲームだし!
グラブルはログインボーナスすらなんかもういいやって思う日がえらく増えてきたので、夏コミ原稿の進捗絡みというのはありますが、大してやらなくなりました。団の団長権限も副団長(開始当初からの付き合い)に移譲してますしね。 何でって、古戦場飽きた。 CPU経由の対人殴り合いゲーを運営から押し付けられてる(しかも一定期間ごとに確定で)現状が嫌気さしてきたというのと、団に一人、戦力ストーカーがいて、彼にマルチバトルの貢献度値でへばりつかれるのがかったるくなったという、そんな理由。 何の為にこのゲームやってるんじゃろう、というか、そもそも嫌気の差す要素が公式提供から外れない時点で引き際よね、と。好きなキャラを指輪やリミットボーナスで強くして、じゃなくて、それを使って全てONの状態がスタートラインになっちゃってる。十天衆最終解放がマストだったかと思えば今度はアーカルムの賢者ありき・・・いやもうそんなエネルギー持ってないですし。むしろその体力と精神力あったら絵描きたい、と思う部分でも離れてます。 たまーにTHE MAYDAYみたいなイベントでもくれば、その時はやるかもしれませんかもしれません。