- 投稿日:2020-06-01T23:01:12+09:00
Javaのクラスメソッド
クラスメソッド
クラスに属するメソッドのことです。
クラスメソッドの定義は、「public static 戻り値の型 メソッド名()」です。
クラスメソッドはインスタンスを生成しない状態でも呼び出せます。
【例】PersonクラスとしますPerson.javaclass Person { public static 戻り値の型 メソッド名() { // メソッドの処理 } }【例】
Main.javaclass Main { public static void main(String[] args) { 〜省略〜 Person.printCount(); } }Person.javaclass Person { public static int count = 0; 〜省略〜 public static void printCount() { System.out.println("合計は" + count + "です"); } }
- 投稿日:2020-06-01T21:51:33+09:00
GraalVMを使ってみる
前書き
GraalVMのパフォーマンス、しいては、GraalをJITコンパイラとして利用した際のパフォーマンスにフォーカスした記事なので、GraalVMの特徴の一つであるnative imageや、multiple languagesなどに関しては、この記事では触れていない。
環境
- macOS Mojava 10.14.4
- Scala 2.13.1
- sbt 1.3.8
- GraalVM 20.1
GraalVMとは
Javaで書かれた最新のJITコンパイラ、Graalを搭載したVMである。
GraalVM公式ドキュメントによると、Graalには以下の特徴がある。Graal自体がjavaで実装されているので、標準のJITコンパイラではできなかった部分的なエスケープ分析などの強力な最適化により、Javaプログラムを大幅に高速化できる
実際にどのくらい速くなるのかは後述している。
ちなみに、VM変更するのは面倒であれば、以下のオプションをつけることで、JITコンパイラだけGraalに変えることもできるらしい。
しかし、参考によるとJDK10以降でしか使えないので注意。-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompilerGraalVMのアーキテクチャ
以下のようなアーキテクチャになっている。
標準JVMと比べて、C2部分がGraalコンパイラに置き換わっている。
GraalとJVMCIの部分が、Javaで実装されている。JVMCI
Javaで実装されたコンパイラを動的コンパイラとしてJVMで利用できるようにしたもの。
https://openjdk.java.net/jeps/243
実際に使ってみる
インストール
公式ドキュメントに書いている通りにする。
macOSの場合は、ここOpenJDKの標準VMとGraalVMで速度比較してみる
275Mbの
GraalTest.txt
に含まれている単語の種類からトップ10を吐き出すプログラムを実行する。$ ll total 65368 -rw-r--r-- 1 kinsho staff 202B 5 31 14:04 FibTest.scala -rw-r--r-- 1 kinsho staff 1.9K 5 31 17:13 GraalTest.scala -rw-r--r-- 1 kinsho staff 275M 5 31 16:54 GraalTest.txt drwxr-xr-x 4 kinsho staff 128B 5 31 14:28 project drwxr-xr-x 5 kinsho staff 160B 5 31 14:35 target上述でインストールした、GraalVMをVMとして利用。
$ java -version openjdk version "1.8.0_252" OpenJDK Runtime Environment (build 1.8.0_252-b09) OpenJDK 64-Bit Server VM GraalVM CE 20.1.0 (build 25.252-b09-jvmci-20.1-b02, mixed mode)以下、実行プログラム
GraalTest.scalaimport java.io.File import scala.annotation.tailrec import scala.io.BufferedSource object GraalTest extends App { val fileName: String = "GraalTest.txt" val encode: String = "UTF-8" val source: BufferedSource = scala.io.Source.fromFile(fileName, encode) val lines: Iterator[String] = source.getLines() val sortedTextList = lines.toList.mkString(" ").split(" ").sorted.toList val value = createMap(sortedTextList) val top10Words = value.toList.sortBy(_._2).reverse.take(10) def createMap(wordList: List[String]): Map[String, Long] = { @tailrec def loop(list: List[String], acc: Map[String, Long]): Map[String, Long] = { wordList match { case head :: tail if acc.isEmpty => { loop(tail, acc + (head -> 1L)) } case head :: tail => { acc.get(head) match { case Some(value) => { loop(tail, acc.updated(head, value + 1L)) } case None => { loop(tail, acc + (head -> 1L)) } } } case head :: Nil => { acc.get(head) match { case Some(value) => { acc.updated(head, value + 1L) } case None => { acc + (head -> 1L) } } } } } loop(wordList, Map.empty[String, Long]) } }結果
OpenJDKの標準VMでは!?
比較のために、OpenJDKの標準JITコンパイラを使ってプログラムを実行してみる。
-XX:-UseJVMCICompiler
を指定すると、OpenJDKの標準JITコンパイラを利用できる。.jvmopts-XX:-UseJVMCICompiler -Xmx8G実行$ /usr/bin/time sbt run GraalTest.scala
すると、以下のような結果が得られる。
JVM結果[info] running GraalTest List((the,3297996), (and,2198664), (of,2198664), (you,1648998), (a,1648998), (in,1648998), (about,1099332), (always,1099332), (with,1099332), (how,1099332)) [success] Total time: 64 s (01:04), completed 2020/06/04 0:38:37 85.31 real 479.11 user 8.89 sysGraalVMでは!?
上記のプログラムをGraalVM上で実行してみる。
.jvmopts-Xmx8G
実行$ /usr/bin/time sbt run GraalTest.scala
すると、以下のような結果が得られる。
GraalVM結果[info] running GraalTest List((the,3297996), (and,2198664), (of,2198664), (you,1648998), (a,1648998), (in,1648998), (about,1099332), (always,1099332), (with,1099332), (how,1099332)) [success] Total time: 54 s, completed 2020/06/04 0:40:02 75.29 real 333.95 user 9.23 sysGraalVMを使うことで、10sも早くなっていることがわかる。
これは、だいぶ早くなっている!!!!!↓パフォーマンス測定で使ったコード達
https://github.com/kinshotomoya/loginfrastructure/tree/master/jitCompilerまとめ
現状のJITコンパイラの代わりにGraalを利用するのは、使えるなら使うべき。
次回は、GraalVMのもう一つの特徴である、native-imageに関してまとめる。
参考
- 投稿日:2020-06-01T21:41:44+09:00
[Mac]Visual Studio CodeにJavaをインストールする
以下のページを開き、ダウンロードする。
https://code.visualstudio.com/
ダウンロード以降の手順は↓を参考にすると分かりやすいです。
https://qiita.com/watamura/items/51c70fbb848e5f956fd6
- 投稿日:2020-06-01T17:32:47+09:00
JavaによるExcelコメントの追加、読み取り、削除
注釈は、指定されたExcelセルにプロンプトまたは追加情報を追加するために一般的に使用されるリッチテキスト注釈です。Free Spire.XLS for Javaは、JavaアプリケーションでExcelファイルにコメントを無料で追加および操作する機能を開発者に提供します。この記事では、Free Spire.XLS for Javaを使用してExcelドキュメントのコメントを追加、読み取り、削除する方法を紹介します。
基本的な手順:
1. Free Spire.XLS for Javaパッケージをダウンロードして解凍します。
2. libフォルダーのSpire.Xls.jarパッケージを依存関係としてJavaアプリケーションにインポートするか、MavenリポジトリーからJARパッケージをインストールします(pom.xmlファイルを構成するコードについては、以下を参照してください)。
3. Javaアプリケーションで、新しいJava Class(ここではAddComments / ReadComments / DeleteCommentsという名前を付けました)を作成し、対応するJavaコードを入力して実行します。pom.xmlファイルを構成します:
<repositories> <repository> <id>com.e-iceblue</id> <name>e-iceblue</name> <url>http://repo.e-iceblue.com/nexus/content/groups/public/</url> </repository> </repositories> <dependencies> <dependency> <groupId>e-iceblue</groupId> <artifactId>spire.xls.free</artifactId> <version>2.2.0</version> </dependency> </dependencies>Excelコメントを追加する
次の例は、Free Spire.XLS for Javaを使用してコメントをExcelファイルに追加する方法を示しています、また、注釈テキストの各文字に異なるフォント色を設定します。import com.spire.xls.*; public class AddComments { public static void main(String[] args){ //新しいExcelドキュメント Workbook workbook = new Workbook(); //最初のワークシートを入手する Worksheet sheet = workbook.getWorksheets().get(0); //ワークシート名を設定 sheet.setName("注釈"); //セル[1,1]にテキストを追加 CellRange range = sheet.getCellRange(1,1); range.setText("コメントを追加:"); //セルにテキストを追加[5,1] CellRange range1 = sheet.getCellRange(5, 1); range1.setText("注釈"); //セルにコメントを追加[5,1] range1.getComment().setText("これはコメントです\n複数行にすることができます"); //注釈を表示する range1.getComment().setVisible(true); //注釈の高さを設定する range1.getComment().setHeight(100); //フォントを作成してフォントの色を設定する ExcelFont fontBlue = workbook.createFont(); fontBlue.setKnownColor(ExcelColors.LightBlue); ExcelFont fontGreen = workbook.createFont(); fontGreen.setKnownColor(ExcelColors.LightGreen); //注釈テキストの各文字のフォントを設定します range1.getComment().getRichText().setFont(0, 3, fontGreen); range1.getComment().getRichText().setFont(4, 6, fontBlue); range1.getComment().getRichText().setFont(7, 9, fontGreen); //結果ファイルを保存 workbook.saveToFile("AddComments.xlsx", ExcelVersion.Version2013); } }Excelのコメントを読む
Free Spire.XLS for Javaは、すべての注釈の読み取りをサポートしますまた、Excelワークシートの指定したセルに関連付けられた特定のコメント。import com.spire.xls.*; public class ReadComments { public static void main(String[] args){ //Excelドキュメントを読み込む Workbook workbook = new Workbook(); workbook.loadFromFile("AddComments.xlsx"); //最初のワークシートを入手する Worksheet sheet = workbook.getWorksheets().get(0); //ワークシートに含まれるすべてのコメントを印刷する for(int i = 0; i < sheet.getComments().getCount(); i ++){ String comment = sheet.getComments().get(i).getText(); System.out.println(comment); } //指定したセルに関連付けられたコメントを印刷します //System.out.println(sheet.getCellRange(5,1).getComment().getText()); } }Excelのコメントを削除する
Free Spire.XLS for Javaを使用すると、すべてのコメントを削除でき、Excelワークシートの指定したセルに関連付けられている特定のコメントも削除できます。import com.spire.xls.*; public class DeleteComments { public static void main(String[] args){ //Excelドキュメントを読み込む Workbook workbook = new Workbook(); workbook.loadFromFile("AddComments.xlsx"); //最初のワークシートを入手する Worksheet sheet = workbook.getWorksheets().get(0); //ワークシートのすべてのコメントを削除する for(int i = 0; i < sheet.getComments().getCount(); i ++){ sheet.getComments().get(i).remove(); } //指定したセルに関連付けられているコメントを削除します sheet.getCellRange(5,1).getComment().remove(); workbook.saveToFile("DeleteComments.xlsx", ExcelVersion.Version2013); } }
- 投稿日:2020-06-01T13:48:50+09:00
MacにJava開発環境をインストールする
最終更新日
2020年6月1日
検証を行ったmacOSのバージョンは下記です。
- macOS Catalina 10.15.5
インストールするもののバージョンは下記です。
- AdoptOpenJDK 11.0.7 (HotSpot)
- IntelliJ IDEA Community Edition 2020.1.1
- Maven 3.6.3
この記事が古くなった場合、下記の手順は最新のインストール手順とは異なっている可能性があります。
JDK
JDKとは
Java Development Kitの略です。Java開発に必要なコンパイラ・JVM(Java Virtual Machine : Java仮想マシン)などが一体になっています。
JDKは色々な団体・ベンダーが提供しています。今回はAdoptOpenJDKを利用します。
複数バージョンのJDKをインストールしたい場合は、SDKMAN!を使ったほうがよいでしょう。
JDKのインストール
(1) https://adoptopenjdk.net にアクセスしてください。
(2) [OpenJDK 11]・[HotSpot]を選択したあと、[Latest Release]をクリックしてください。
(3) [許可]をクリックしてください。
(4) ダウンロードされた.pkgファイルを実行してください。
(5) [続ける]をクリックしてください。
(6) [続ける]をクリックしてください。
(7) [同意する]をクリックしてください。
(8) [インストール]をクリックしてください。
(9) ①Touch IDを利用する、または②[パスワードを使用...]をクリックしてMacアカウントのパスワードを入力してください。
(10) [閉じる]をクリックしてください。
(11) ターミナル(未起動ならば起動してください)で下記コマンドを実行してください。これにより、環境変数
JAVA_HOME
が設定されます。cd ~ echo JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home >> .zshrc source .zshrc echo $JAVA_HOME1つ目のコマンド
cd ~
で、ユーザーホームフォルダ(/Users/ユーザー名)に移動しています。2つ目のコマンド
echo JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home >> .zshrc
で、ユーザーホームフォルダ直下の.zshrcファイル(無かった場合は作成される)の最終行にJAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
という内容を追記しています。この.zshrcファイルに書かれたコマンドは、ターミナルなどを起動した際に実行されます。
3つ目のコマンド
source .zshrc
で、.zshrcに書かれたコマンドを実行しています。2つ目のコマンド実行後にターミナルを再起動するならば、この3つ目のコマンドは不要です。4つ目のコマンドでは、環境変数
JAVA_HOME
の値を表示しています。正しく設定されていれば、設定したフォルダ名が表示されます。(設定されていない場合は何も表示されません)これら4つのコマンドをターミナルで実行すると、こんな感じになります。
この環境変数
JAVA_HOME
は、様々なJava関連ツールが「JDKのインストール先」として使われます。設定しておかないと、それらのツールが動かない場合があります。(12) ターミナルで下記コマンドを実行してください。これにより、環境変数
PATH
が設定されます。cd ~ echo PATH=$PATH:$JAVA_HOME/bin >> .zshrc source .zshrc echo $PATH1つ目のコマンド
cd ~
で、ユーザーホームフォルダ(/Users/ユーザー名)に移動しています。もし既にユーザーホームフォルダにいるのであれば、このコマンドは不要です。2つ目のコマンド
echo PATH=$PATH:$JAVA_HOME/bin >> .zshrc
で、ユーザーホームフォルダ直下の.zshrcファイル(無かった場合は作成される)の最終行にPATH=$PATH:$JAVA_HOME/bin
という内容を追記しています。3つ目のコマンド
source .zshrc
で、.zshrcに書かれたコマンドを実行しています。2つ目のコマンド実行後にターミナルを再起動するならば、この3つ目のコマンドは不要です。4つ目のコマンドでは、環境変数
PATH
の値を表示しています。正しく設定されていれば、 表示結果の最後に/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/bin
が含まれています。これら4つのコマンドをターミナルで実行すると、こんな感じになります。
この環境変数
PATH
は、ターミナルなどが「実行するコマンドを探すフォルダ」です。Javaの場合はjava
・javac
などのコマンドが/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/bin
フォルダにあるため、この設定が必要になります。(13) ターミナルで下記コマンドを実行してください。これにより、インストールされたJDKのバージョンが確認できます。
java --version javac --versionこれら2つのコマンドをターミナルで実行すると、こんな感じになります。
(14) ターミナルを閉じてください。
もしインストールが上手く行かなかったら
ls /Library/Java/JavaVirtualMachines
を実行して何も表示されない場合JDKのインストールができていませんので、(4)からやり直してください。
echo $JAVA_HOME
を実行しても何も表示されない、または違うフォルダが表示される場合環境変数
JAVA_HOME
の設定に失敗しています。.zshrcファイルをVSCodeなどで開いて修正するか、
rm -f ~/.zshrc
で.zshrcを削除後に(10)からやり直してください。
echo $PATH
を実行しても最後に/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/bin
が表示されない場合環境変数
PATH
の設定に失敗しています。.zshrcファイルをVSCodeなどで開いて修正するか、
rm -f ~/.zshrc
で.zshrcを削除後に(10)からやり直してください。IntelliJ IDEA
IntelliJ IDEAとは
チェコのJetBrains社が開発しているIDE(統合開発環境)です。高機能かつ動作が軽快なので、とても人気があります。
他のJava向けIDEとしては、EclipseやNetBeansがあります。
無償のCommunity Editionと、有償(30日間は評価版として無償で利用可能)のUltimate Editionがあります。
今回はCommunity Editionのインストール方法を紹介します。
Ultimate Editionのインストール方法もほとんど同じはずです。購入したい場合はサムライズムさんのWebサイトへどうぞ。
IntelliJ IDEA Community Editionのインストール
複数バージョンのIntelliJ IDEAをインストールしたい場合は、JetBrains Toolboxを使うとよいでしょう。
(1) https://www.jetbrains.com/ja-jp/idea/download/ にアクセスしてください。
(2) [コミュニティ]の[ダウンロード]ボタンをクリックしてください。
(3) [許可]をクリックしてください。
(4) ダウンロードされた.dmgファイルを実行してください。
(5) [IntelliJ IDEA CE]のアイコンを、右側にある[Applications]フォルダにドラッグしてください。
(6) 左上の赤い丸をクリックしてください。ウィンドウが閉じます。
(7) デスクトップにある[IntelliJ IDEA CE]を右クリック→["IntelliJ IDEA CE"を取り出す]を選択してください。
(8) Launchpadを開いて、[IntelliJ IDEA CE]をDockに追加してください。
(9) Dockから[IntelliJ IDEA CE]を起動してください。
(10) [開く]を選択してください。
(11) [I confirm that I have read and accept the terms of this User Agreement]にチェックを入れた後、[Continue]をクリックしてください。
(12) JetBrains社に匿名で統計情報を共有するか確認されます。共有してもよい場合は[Send Anonymous Statistics]、そうでない場合は[Don't Send]をクリックしてください。
(13) [Configure]-[Structure for New Projects]を選択してください。
(14) [Project SDK]で[11 java version 11.0.7]、[Project language level]で[SDK default]を選択した後、[OK]をクリックしてください。
IntelliJ IDEAを好みに設定する(ここの手順は必須ではありません)
(1) [Configure]-[Preferences]を選択してください。
(2) [Appearance & Behavior]-[Appearance]を選択して、[Theme]で好きなカラーテーマを選択してください。
(3) [Editor]-[Font]を選択して、好きな[Font]・[Size]などを選択してください。
(4) [Editor]-[General]-[Code Completion]を選択して、[Match case]のチェックを外してください。
デフォルト(Match case + First letter only)の設定では、大文字小文字まで厳密に書かないと補完されません。チェックを外すと、大文字小文字を無視して補完されます。
(5) ウィンドウ右下の[OK]をクリックしてください。
(6) [Configure]-[Edit Custom VM Options...]を選択してください。
表示されたウィンドウで
-Xms
と-XmX
の行を書き換えることで、IntelliJ IDEAが利用するメモリ量を変えることができます。もしMac本体のメモリに余裕があるならば、1G
や2G
などに増やしておくと、よりIntellij IDEAの動作が軽快になります。変更後は[Save]をクリックしてください。IntelliJ IDEAでHello World
(1) [Create New Project]をクリックしてください。
(2) 左側のメニューで[Java]、[Project SDK]で[11]を選択した後、[Next]をクリックしてください。
(3) そのまま[Next]をクリックしてください。
(4) [Project name]に適当なプロジェクト名を入力した後、[Finish]をクリックしてください。
(5) [Tip of the Day]は、IntelliJ IDEAを開くたびに使い方のTIPSを教えてくれるものです。必要のない場合は[Don't show tips]にチェックを入れた後に[Close]をクリックしてください。必要な場合は[Close]をクリックしてください。
(6) [src]フォルダを右クリック後、[New]-[Java Class]を選択してください。
[src]フォルダにカーソルを合わせた後にCommand + Nでも同じことができます。
(7) [Class]を選択後、「Hello」と入力→Enterしてください。
(8)
Hello
クラスを下記のように編集してください(保存は自動で行われますので不要です)。public class Hello { public static void main(String[] args) { System.out.println("Hello!"); } }クラス直下で
psvm
と入力→psvm
を選択してEnterすると、main()
メソッドが補完されます。
main()
メソッド内でsout
と入力→sout
を選択してEnterすると、System.out.println()
が補完されます。(9) クラス内で右クリック→[Run 'Hello.main()']を選択すると、実行されます。
クラス内で Shift + Control + Rでも実行可能ですが、macOS側のキーボード設定が[U.S.]でないとうまく実行されません。詳しくは@yusukeさんの資料をご確認ください。
Maven
Mavenとは
一般的には「ビルドツール」と呼ばれるものです。
javac
を利用したコンパイルや、JAR/WARへのアーカイブ、必要なライブラリのダウンロード+クラスパスへの追加などを行ってくれます。Mavenに関する説明は僕の資料をどうぞ!
Maven以外にはGradleも有名です。
Mavenのインストール
前述のSDKMAN!や、Homebrewでインストールすることも可能です。
(1) https://maven.apache.org/download.cgi にアクセスしてください。
(2) [apache-maven-3.6.3-bin.zip]をクリックしてください。
(3) [許可する]をクリックしてください。
(4) ダウンロードされたZIPファイルをダブルクリックしてください。ZIPが展開されます。
ブラウザの設定によっては、ダウンロード直後に既に展開済みになっていることがあります。その場合は、この手順は不要です。
(5) 作成されたapache-maven-3.6.3フォルダを、ユーザーホームフォルダ(/Users/ユーザー名)直下に移動させてください。
Downloadsフォルダ内でも使えるのですが、誤って削除したりしないよう、別のフォルダに移します。
(6) ターミナルで下記コマンドを実行してください。これにより、環境変数
PATH
が設定されます。cd ~ echo PATH=$PATH:~/apache-maven-3.6.3/bin >> .zshrc source .zshrc echo $PATH1つ目のコマンド
cd ~
で、ユーザーホームフォルダ(/Users/ユーザー名)に移動しています。もし既にユーザーホームフォルダにいるのであれば、このコマンドは不要です。2つ目のコマンド
echo PATH=$PATH:~/apache-maven-3.6.3/bin >> .zshrc
で、ユーザーホームフォルダ直下の.zshrcファイルの最終行にPATH=$PATH:~/apache-maven-3.6.3/bin
という内容を追記しています。3つ目のコマンド
source .zshrc
で、.zshrcに書かれたコマンドを実行しています。2つ目のコマンド実行後にターミナルを再起動するならば、この3つ目のコマンドは不要です。4つ目のコマンドでは、環境変数
PATH
の値を表示しています。正しく設定されていれば、 表示結果の最後に/Users/ユーザー名/apache-maven-3.6.3/bin
が含まれています。これら4つのコマンドをターミナルで実行すると、こんな感じになります。
(7) ターミナルで下記コマンドを実行してください。これにより、インストールされたMavenのバージョンが確認できます。
mvn -v
このコマンドをターミナルで実行すると、こんな感じになります。
- 投稿日:2020-06-01T12:13:09+09:00
JavaでTODOアプリを制作しよう2 まずはHello worldしたい
こんにちは。
JavaでTODOアプリを制作しよう1 MVCの簡単な説明の続きの記事です。今回はとりあえずControllerを作ってそこからViewを表示させるところまでやってみたいと思います。
TodoController作成
todo>src>main>java>com.example.todo>TodoController@Controller //① public class ToDoController { @GetMapping("/top") //② public String top(){ return "top"; //③ } }①コントローラーの宣言
@Controllerとすることでこのクラスがコントローラーであることを宣言できます。
@~~~という記述はアノテーションと呼ばれます。(色々便利なモノを呼び出せるやつって感じです。)②GetMapping
@GetMappingアノテーションは引数内のアドレスにHttp MethodのGet Methodでリクエストが来た時に直下のメソッドの処理行います。
③top.htmlをリターン
そのままです。詳しくは下記のHTMLの部分を参照!
HTMLを書く
Todo>src>resources>templates>top.html<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>hello world</title> </head> <body> <p>hello world</p> </body> </html>こんな感じでシンプルにHello worldを出力してみましょう。
templates下にHTMLファイルは上のコントローラーで書き方で呼び出すことができます!!実際に確認してみる
localhost:8080/topにアクセスするとhello worldが表示されると思います!
次回は実際に登録部分をやってみようとおもいます!
- 投稿日:2020-06-01T12:13:09+09:00
JavaでTODOアプリを制作しよう2 Spring Initializrで雛形を作ってHello worldしたい
こんにちは。
JavaでTODOアプリを制作しよう1 MVCの簡単な説明の続きの記事です。今回はとりあえずControllerを作ってそこからViewを表示させるところまでやってみたいと思います。
TODOアプリ作成リンク集
1: MVCの簡単な説明
2: Spring Initializrで雛形を作ってHello worldしたい(今ここ)Springの雛形を作成
まずはSpring InitializrでSpringの雛形を作っていきましょう。
シンプルにこんな感じで進めていきます。
今後JPAやlombokも追加していきますが、更新するのと同時に追加していくので今回はこの構成だけでOKです!
BuildしてRunする為の下準備
Buildする
InteliJの上部にカーソルを持ってくとメニューバーが出てくるのでBuild -> Build Projectを押してビルドします。ちょっと時間かかるかもですが待ちましょう。InteliJ最下部にビルド中みたいなのが出てるはず。
Edit ConfigurationsでRunする準備。
↓InteliJ上部のメニューバーからRun -> Edit Configurationsを押します。
↓こんな感じでハイライトしている部分を入力していきましょう。JREはJava11系のを選んでください。
TodoController作成
お次はいよいよコントローラーの作成です。
下記のパスに従ってコントローラーを作ってください。
todo>src>main>java>com.example.todo>TodoControllerimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller //① public class ToDoController { @GetMapping("/top") //② public String top(){ return "top"; //③ } }①コントローラーの宣言
@Controllerとすることでこのクラスがコントローラーであることを宣言できます。
@~~~という記述はアノテーションと呼ばれます。(色々便利なモノを呼び出せるやつって感じです。)②GetMapping
@GetMappingアノテーションは引数内のアドレスにHttp MethodのGet Methodでリクエストが来た時に直下のメソッドの処理行います。
③top.htmlをリターン
そのままです。こう書くことによってtemplates下にあるhtmlファイルを呼ぶことができます(拡張子は省略)
htmlを表示する時のクラスの戻り値はStringです。importについて
importはアノテーションを書くと自動で追加されると思いますが、されない場合はアノテーションをホバーしながらOption + Enter でも追加できます。
HTMLを書く
Todo>src>resources>templates>top.html<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>hello world</title> </head> <body> <p>hello world</p> </body> </html>こんな感じでシンプルにHello worldを出力してみましょう。
templates下のHTMLファイルは上のコントローラーの書き方で呼び出すことができます!!実際にRunして確認してみる
Runする方法
InteliJの右上に緑色の矢印があると思うのでそこをクリックしてプロジェクトを実行(Run)してみましょう!
すると
画面下部にこんなウィンドウが出てくるはずです。
Startedになっていたら無事起動しています。もしエラーが起きていた場合はその文でググってみよう!(結構出なくて困ったりする。)
いざアクセス
localhost:8080/topにアクセスするとhello worldが表示されると思います!
次回は登録部分の処理を書いてみます。
- 投稿日:2020-06-01T11:30:33+09:00
PlayframeworkでHikariCPのコネクション数をDataDogでモニタリング
アプリケーション側の設定
hikariCPのMbeansの設定を有効にする
application.confplay.db.prototype.hikaricp.registerMbeans = trueConnectionPoolにPoolNameを設定する
デフォルトだと HikariCP-1, HikariCP-2 みたいになってしまうので、わかりやすい名前をつける
application.confdb.default.hikaricp.poolName = default db.default-ro.hikaricp.poolName = default-ro db.accesslog.hikaricp.poolName = accesslogDataDog-agentの設定
参考: https://docs.datadoghq.com/ja/integrations/java
conf.d/jmx.d/conf.yaml を編集する
PoolごとにMBeanが登録されるので、
bean_regex
で指定するconf.d/jmx.d/conf.yamlconf: - include: domain: com.zaxxer.hikari bean_regex: - com\.zaxxer\.hikari.*[,:]type=Pool.* attribute: - ActiveConnections - IdleConnections - ThreadsAwaitingConnection - TotalConnections確認 ?
あとは Metrics Expoler とかでメトリクスが取れるか見てみればOK
- 投稿日:2020-06-01T08:55:38+09:00
Java(Jsoup)を使ってスクレイピングをしてみた
やったこと
Jsoupを使って、Yahoo! Financeの株価チャートをスクレイピングしてみました。
ちなみに、スクレイピングした株価チャートはアリババ(BABA)です。
アリババを選んだ理由は単純に伸びて欲しいからです。。。こんな感じ
コード
@Controller public class YahooFinanceController { private static final String YAHOO_FINANCE_URL = "https://stocks.finance.yahoo.co.jp/us/detail/BABA"; @RequestMapping("/") public String index(Model model) { Document YahooDoc = null; String imgSrc = null; try { YahooDoc = Jsoup.connect(YAHOO_FINANCE_URL).get(); Elements img = YahooDoc.select("div.styleChart img"); imgSrc = img.attr("src"); } catch (IOException e) { e.printStackTrace(); } model.addAttribute("imgSrc", imgSrc); return "index"; } }<body> <img th:src="${imgSrc}" title="アリババの株価!" /> </body>解説
Documentとは?
URLで指定したHTMLを格納します。
メソッド名は、connect()です。
例えば、今回のケースでは、Documentを次のように指定しています。Document YahooDoc = Jsoup.connect(YAHOO_FINANCE_URL).get();これを、コンソール上に表示すると、指定したページのHTMLを全て持ってこれます!すごい。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <title>アリババ・グループ・ホールディング【BABA】:株式/株価 - Yahoo!ファイナンス</title> <meta charset="utf-8"> <meta name="description" content="アリババ・グループ・ホールディング【BABA】の株価。NYSE(ニューヨーク証券取引所)とNASDAQに上場している全銘柄の株価やチャート、業績などを網羅。ADR日本株やランキングも充実しています。"> <meta name="keywords" content="株価,ダウ,ナスダック,アメリカ,ランキング"> ...省略... <meta property="og:description" content="アリババ・グループ・ホールディング【BABA】の株価。NYSE(ニューヨーク証券取引所)とNASDAQに上場している全銘柄の株価やチャート、業績などを網羅。ADR日本株やランキングも充実しています。"> <meta property="og:title" content="アリババ・グループ・ホールディング【BABA】:株式/株価 - Yahoo!ファイナンス"> ...以下省略Elementとは?
上で取得したDocumentオブジェクトから要素を格納します。
メソッド名は、select()です。
例えば、今回のケースでは、Elementを次のように指定しています。Elements img = YahooDoc.select("div.styleChart img");divタグのstyleChartクラスにあるimgタグを取得しています。
これを、コンソール上に表示すると、<img src="https://chart.yahoo.co.jp/?code=BABA&tm=1d&size=e" alt="チャート画像">取得してきたimgタグのsrc属性だけを取得するには?
attr()で指定した属性の値をElementオブジェクトから取得できます。
今回は、imgタグのsrc属性をString型のimgSrcという変数に格納しています。String imgSrc = img.attr("src");これをコンソール上に表示すると、
https://chart.yahoo.co.jp/?code=BABA&tm=1d&size=e最後にコントローラーからビューに値を渡し、ページを戻します。
model.addAttribute("imgSrc", imgSrc); return "index";意外と簡単にスクレイピングできることが分かりました。
以上です。最後まで読んでくださり、ありがとうございました。参考
jsoupによるWebサイトのスクレイピング
How to parse for image src using JSOUP?my
Thymeleaf conditional img src
- 投稿日:2020-06-01T08:55:38+09:00
Java(Jsoup)を使って株価チャートをスクレイピングをしてみた
やったこと
Jsoupを使って、Yahoo! Financeの株価チャートをスクレイピングしてみました。
ちなみに、スクレイピングした株価チャートはアリババ(BABA)です。
アリババを選んだ理由は単純に伸びて欲しいからです。。。こんな感じ
コード
@Controller public class YahooFinanceController { private static final String YAHOO_FINANCE_URL = "https://stocks.finance.yahoo.co.jp/us/detail/BABA"; @RequestMapping("/") public String index(Model model) { Document YahooDoc = null; String imgSrc = null; try { YahooDoc = Jsoup.connect(YAHOO_FINANCE_URL).get(); Elements img = YahooDoc.select("div.styleChart img"); imgSrc = img.attr("src"); } catch (IOException e) { e.printStackTrace(); } model.addAttribute("imgSrc", imgSrc); return "index"; } }<body> <img th:src="${imgSrc}" title="アリババの株価!" /> </body>解説
Documentとは?
URLで指定したHTMLを格納します。
メソッド名は、connect()です。
例えば、今回のケースでは、Documentを次のように指定しています。Document YahooDoc = Jsoup.connect(YAHOO_FINANCE_URL).get();これを、コンソール上に表示すると、指定したページのHTMLを全て持ってこれます!すごい。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <title>アリババ・グループ・ホールディング【BABA】:株式/株価 - Yahoo!ファイナンス</title> <meta charset="utf-8"> <meta name="description" content="アリババ・グループ・ホールディング【BABA】の株価。NYSE(ニューヨーク証券取引所)とNASDAQに上場している全銘柄の株価やチャート、業績などを網羅。ADR日本株やランキングも充実しています。"> <meta name="keywords" content="株価,ダウ,ナスダック,アメリカ,ランキング"> ...省略... <meta property="og:description" content="アリババ・グループ・ホールディング【BABA】の株価。NYSE(ニューヨーク証券取引所)とNASDAQに上場している全銘柄の株価やチャート、業績などを網羅。ADR日本株やランキングも充実しています。"> <meta property="og:title" content="アリババ・グループ・ホールディング【BABA】:株式/株価 - Yahoo!ファイナンス"> ...以下省略Elementとは?
上で取得したDocumentオブジェクトから要素を格納します。
メソッド名は、select()です。
例えば、今回のケースでは、Elementを次のように指定しています。Elements img = YahooDoc.select("div.styleChart img");divタグのstyleChartクラスにあるimgタグを取得しています。
これを、コンソール上に表示すると、<img src="https://chart.yahoo.co.jp/?code=BABA&tm=1d&size=e" alt="チャート画像">取得してきたimgタグのsrc属性だけを取得するには?
attr()で指定した属性の値をElementオブジェクトから取得できます。
今回は、imgタグのsrc属性をString型のimgSrcという変数に格納しています。String imgSrc = img.attr("src");これをコンソール上に表示すると、
https://chart.yahoo.co.jp/?code=BABA&tm=1d&size=e最後にコントローラーからビューに値を渡し、ページを戻します。
model.addAttribute("imgSrc", imgSrc); return "index";意外と簡単にスクレイピングできることが分かりました。
以上です。最後まで読んでくださり、ありがとうございました。参考
jsoupによるWebサイトのスクレイピング
How to parse for image src using JSOUP?my
Thymeleaf conditional img src
- 投稿日:2020-06-01T00:22:27+09:00
[Java] Date 関連用語メモ
久々に サーバー側プロジェクトを担当することになりました。
しかも環境がdb & windows & Java など (T、T)
ですので、用語など勉強絡みでメモします。用語
1。 ISO-8601暦体系
日付と時刻の表記に関するISOの国際規格
基本形式: YYYYMMDDThhmmss+0900
例)20200531T115959+09002。 GMT(グリニッジ平均時:Greenwich mean solar time)
英国のグリニッジ(経度0度)の地方平均太陽時
(平均太陽が南中する時を正午とする)
|グリニッジ天文台旧本館
3。 UTC(協定世界時:Universal time coordinated)
セシウム原子を利用したセシウム原子時計を基本
JST(日本標準時,Japan Standard Time)
UTC + 9時間(東経135度分の時差)UNIX時間(POSIX )
UTCでのUNIXエポックから形式的な経過秒数
※UNIXエポック(epoch): 1970年1月1日午前0時0分0秒4。グレゴリオ暦(新暦)
1582年10月15日(グレゴリオ暦)から行用されている暦法である。
(第226代ローマ教皇グレゴリウス13世がその前までの旧暦であるユリウス暦の改良を命じたである)参照
・Wiki-ISO-8601
・Wiki-GMT(グリニッジ平均時)
・Wiki-UTC(協定世界時
・Wiki-UNIX時間JAVA
(バージョン: 1.8)
1。OffsetDateTime
オフセットを使った日付/時間の不変の表現です。
UTC/グリニッジからのオフセットの他に、すべての日付と時間のフィールドをナノ秒の精度まで格納します。
例1)「2nd October 2007 at 13:45.30.123456789 +02:00」
例2)インスタンス生成
of(LocalDateTime date,ZoneOffset zone)
of(LocalDate date, LocalTime time, ZoneOffset zone)2。LocalDateTime
日付/時間(年-月-日-時-分-秒として表示されることが多い)を表す不変の日付/時間オブジェクトです。
他の日付と時間フィールド(「年の日」、曜日、「年の週番号」など)にもアクセスできます。時間は、ナノ秒の精度まで表されます。
例1)「2007年10月2日の13:45.30.123456789」
例2)インスタンス生成
of(LocalDate date, LocalTime time)3。Timestamp
java.util.Dateの薄いラッパーであり、JDBC APIはこれをSQL TIMESTAMP値として識別できます。
例1)インスタンス生成
valueOf(LocalDateTime date)参照
https://docs.oracle.com/javase/jp/8/docs/api/java/time/OffsetDateTime.html
https://docs.oracle.com/javase/jp/8/docs/api/java/time/LocalDateTime.html
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/Timestamp.htmlおまけ