- 1. JavaエンジニアのPrometheus監視入門
- 2. 乱数の作成(Math.random();)
- 3. GraphQLでMutation
- 4. kotlinのシンプルなmain関数内でHello Worldを出力する
- 5. API呼ぶ【コール編】
- 6. API呼ぶ【ハンドリング編】
- 7. API呼ぶ【コア編】
- 8. 【JUnit】前日まで正常に動いてたJUnitテストで急にinitializationErrorが出た;経緯と解決策覚書き
- 9. SpringBootアプリ開発中に「NotReadablePropertyException」が発生して悔しい思いをした話。
- 10. JUnit5 使い方メモ
- 11. java クラスの使い方
- 12. Java8 ラムダ式を変数に代入して再利用する
- 13. Javaエンジニアが今さらRubyの基礎文法を覚えるために対比した その2(クラス、メソッド編)
- 14. 五言語 基礎文法比較(C#,Java,Python,Ruby,Kotlin)
- 15. Java入門_第5章_練習問題5_4
- 16. API呼ぶ【準備編】
- 17. 初心者がVSCodeでSpringToolsSuite環境を作成する
- 18. Javaのスレッドの数や状態を確認するコマンド
- 19. java クラス、インスタンス、オブジェクト
- 20. JMockit StringのコンストラクタでUnsupportedEncodingExceptionをmockする
JavaエンジニアのPrometheus監視入門
### Prometheusって何?
Pull型の監視システム。OSS。
メモリ、CPUの使用量などが監視できるシステム。### プル型の監視システムって何?
通常の監視システム(Meckerel,Sensuなど)は、
監視する側にエージェントをインストールして、監視サーバーへ情報を送る。反対にPull型は、監視サーバーが監視する側から情報を取得する。
#### メリット・デメリット
Push型
[メリット]
・監視対象にアプリをインストールだけで簡単
・監視対象が増えてもサーバーの設定変更が少ない[デメリット]
・監視量が増えると、監視サーバーの負荷が多いPull型
[メリット]
・監視対象がダウンしていることがPush型より簡単に分かる
・監視サーバーの負荷がPushより低負荷[デメリット]
・監視対象のエンドポイントを設定しないといけない。単純インストールだけではない。
・監視対象が増えると、都度設定が必要#### 今回のゴール
Springのアプリケーションで、Promethusにデータを連携して、
Grafana(グラファナ)でいい感じに
乱数の作成(Math.random();)
# 乱数の作成
Javaの勉強の一環として「Hit & Blow」を作成するにあたって答えを作成するのに乱数が必要になったのでその時得た知識を少々アウトプットします。
### 【とりあえずの乱数が必要な時】
私が作成した「Hit & Blow」は、0〜9までの数が必要だったので以下の**「Mathクラス」**を使用しました。
“` java:qiita.java
Math.random();
“`このように**「Mathクラス」**を使用することで0.0〜1.0未満のdouble型の乱数を取得できます。
例えば、
“`java:qiita.java
(int)(Math.random() * 10);
“`
といったようにすれば0〜9の乱数が得られる。(ちなみに最初の(int)でintにキャストしています)##まとめ
いかがでしたでしょうか。
今回の記事では**「Mathクラス」**の使用でとりあえず乱数を取得するというものを紹介いたしました。
もちろん乱数の取得には他にもあるのでもっと詳しく知りたい方は調べてみてください。
またまだまだ初心者な
GraphQLでMutation
本記事では「[Spring BootでGraphQLを実装する](https://qiita.com/NagaokaKenichi/items/2770b151e86fb65ea11d)」で使ったサンプルアプリを例に記述します。
## Mutationのスキーマ定義
まずMutationの命名はアプリケーションと紐づく動詞が望ましいです。今回は、id、name、pageCountの3つを引数に取り戻り値はBook型のスキーマを定義してみます。
※この後の説明の都合上、nameフィールドは必須、それ以外は非必須となる引数としています。
※「!」の詳細は「[GraphQLのスキーマと型定義のエクスクラメーションマークの意味](https://qiita.com/NagaokaKenichi/items/d341dc092012e05d6606#%E3%82%A8%E3%82%AF%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%
kotlinのシンプルなmain関数内でHello Worldを出力する
## Homebrewを用いてKotlinをMacにインストールする。
“`bash
$ brew install kotlin
$ kotlin -version
=> Kotlin version 1.3.61-release-180 (JRE 11.0.1+13-LTS)
“`## KotlinでシンプルなHello Worldを記述する
“`kotlin:helloWorld.kt
fun main(args: Array) {
println(“Hello, World!”)
}
“`## Kotlin Compilerで上記ktファイルをコンパイルする
“`bash
$ kotlinc helloWorld.kt -include-runtime -d helloWorld.jar
$ hello_world ll
-rw-r–r– 1 user staff 1.3M Dec 27 22:34 helloWorld.jar
-rw-r–r– 1 user staff 62B Dec 27 22:33 hel
API呼ぶ【コール編】
##API呼ぶ
以下4つのパートに分かれています。(〇〇編は適当につけましたゆるして)
[API呼ぶ【準備編】](https://qiita.com/RO018/private/0335375a22ba51d15661)
[API呼ぶ【コア編】](https://qiita.com/RO018/private/19a9f1740e0dffbb7844)
[API呼ぶ【ハンドリング編】](https://qiita.com/RO018/private/609ce3dcb3079d44b69a)
API呼ぶ【コール編】##コール編
前回までで、Facadeを呼べばAPI関連の処理まとめてやってくれるように作れました
じゃあFacade呼ぼう“`service.java
package service;import exception.NantokaApiBadResultException;
import exception.NantokaApiUnknownException;
import facade.Facade;
import model.RequestBody;
API呼ぶ【ハンドリング編】
##API呼ぶ
以下4つのパートに分かれています。(〇〇編は適当につけましたゆるして)
[API呼ぶ【準備編】](https://qiita.com/RO018/private/0335375a22ba51d15661)
[API呼ぶ【コア編】](https://qiita.com/RO018/private/19a9f1740e0dffbb7844)
API呼ぶ【ハンドリング編】
[API呼ぶ【コール編】](https://qiita.com/RO018/private/1c9f4e603cd15b95acea)##ハンドリング編
コア層で実際にAPIをたたいたので、
今回の階層では出てきたエラーをハンドリングしますここでいうエラーとは、Exceptionだけでなく
処理結果が不正である場合も含まれます“`Facade.java
package facade;import client.Client;
import exception.NantokaApiBadResultException;
import exception.NantokaApiUnknown
API呼ぶ【コア編】
##API呼ぶ
以下4つのパートに分かれています。(〇〇編は適当につけましたゆるして)
[API呼ぶ【準備編】](https://qiita.com/RO018/private/0335375a22ba51d15661)
API呼ぶ【コア編】
[API呼ぶ【ハンドリング編】](https://qiita.com/RO018/private/609ce3dcb3079d44b69a)
[API呼ぶ【コール編】](https://qiita.com/RO018/private/1c9f4e603cd15b95acea)##コア編
実際にAPIにPOST送信をなげる、コアとなる部分を実装します“`client.java
package client;import javax.xml.ws.http.HTTPException;
import json.JsonUtil;
import model.RequestDto;
import model.ResponseDto;public class Client {
/**
* APIを実行する
*
*
【JUnit】前日まで正常に動いてたJUnitテストで急にinitializationErrorが出た;経緯と解決策覚書き
JUnitで単体テストを行っていたところ、前日まで正常に動いてたメソッドで急にinitializationErrorが出てしまいました。
以下、経緯と解決策の覚書きです。## 発生事象
Eclipseを使用し、JUnitテストを実行したところ、一部のテストメソッドでinitializationErrorが発生。
前日までは正常に動作していた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356958/4ec37b00-2cd8-6e31-9f15-4062677c29a0.png)## 環境
– Java:バージョン1.8.0
– Junit:バージョン4.12.0
– OS:Windows10## 経緯と調査
追加開発内容のカバレッジに漏れがないか確認するため、
開発前のコミットに戻して、テストを実施。
その後、最新のコミットに変更してテストを実施したところ、上記キャプチャのようなinitializationErrorが発生。
・・開発期限まで間もなかったため、頭が真っ白
SpringBootアプリ開発中に「NotReadablePropertyException」が発生して悔しい思いをした話。
表題の通りエラーにはまってしまって、コードを何度見返してもあってるようにしか思えかった。んで試行錯誤して何とか解決したけど非常に腑に落ちなく、でも他の人でもありえそうだなぁと思ったので備忘録として残します。
## エラー内容
“`java:コンソール
2019-12-27 09:13:27.304 ERROR 21044 — [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: “class path resource [templat
JUnit5 使い方メモ
# JUnit5 とは
言わずと知れた Java のテスティングフレームワークの、2019年現在最新のメジャーバージョン。# 環境
“`console
> gradle –version
————————————————————
Gradle 5.6.2
————————————————————Build time: 2019-09-05 16:13:54 UTC
Revision: 55a5e53d855db8fc7b0e494412fc624051a8e781Kotlin: 1.3.41
Groovy: 2.5.4
Ant: Apache Ant(TM) version 1.9.14 compiled on March 12 2019
JVM: 11.0.4 (AdoptOpenJDK 11.0.4+11)
OS: W
java クラスの使い方
昨日は三つの用語について
書きましたが、今日は実際の使い方について
書いて行きます。# 基本
クラスの基本的な使い方を確認するために、以下の内容のプログラムを作成します。* 参照クラスのオブジェクト変数を生成
* そのクラスのメンバ変数の参照
* メソッドの呼出し
* 取得した値を出力## メンバ変数
クラス定義をしている”{“と”}”の中
つまり波括弧の中に記述され
そしてメソッドの外に記述されている変数のことです。
インスタンス変数とも言います。“`java:メンバ変数
void nowTime(){
System.out.println(“現在 ” + time + ” です”);
}
“`# コードの例
“`java:TestClass.java
class TestClass {
// メンバ変数
public String name = “Samurai”;// メソッド
public String testMethod(){
return “Engineer”;
}
Java8 ラムダ式を変数に代入して再利用する
ラムダ式はオブジェクトと同じように、変数に代入して再利用ができます。
filter() メソッドを例にして、ラムダ式を変数に代入して再利用してみます。
以下のリストから、8文字以上の文字列のみをフィルタで取り出してみたいと思います。“`java
final Listmonths =
Arrays.asList(“January”, “February”, “March”, “April”, “May”, “June”, “July”, “Augast”, “September”, “October”, “November”, “December”);final List
jewelries =
Arrays.asList(“garnet”, “amethyst”, “aquamarine”, “diamond”, “emerald”, “pearl”, “ruby”, “sardonyx”, “sapphire”, “opal”, “topaz”, “turquoise”);
“`8文字以上の文字列のみをフィルタするラムダ式を lo
Javaエンジニアが今さらRubyの基礎文法を覚えるために対比した その2(クラス、メソッド編)
# はじめに
2回目はクラスとかメソッドです。# 環境
[paiza.io](https://paiza.io/)でこういう時は実行すると楽ですこれを作った時のバージョンは以下です。バージョンは[ヘルプ](https://paiza.io/help?locale=ja-jp)から確認できます。
Ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
Java openjdk version “12” 2019-03-19# スコープの話
JavaもRubyもpublic,protected,privateが存在していますが、概念が違うので、項を分けました。publicは同じで制限無しなのですが、protectedとprivateは違います。
詳しくは[こちら](https://qiita.com/tbpgr/items/6f1c0c7b77218f74c63e)を参考にさせていただきつつJavaエンジニア的な解釈で書いています。
なお、package privateの概念はRubyにはないようです。
##
五言語 基礎文法比較(C#,Java,Python,Ruby,Kotlin)
# 五言語 基礎文法比較
(C#,Java,Python,Ruby,Kotlin)#### 目次
– [コンソール出力](#コンソール出力)– [変数宣言](#変数宣言)
– [条件分岐](#条件分岐)
– [繰り返し処理](#繰り返し処理)
– [コレクション](#コレクション)
### コンソール出力
##### C#
“`C#
//Systemは省略可能
System.Console.Write(“Hello “);
Console.Write(“World”);
>>> Hello WorldConsole.WriteLine(“Hello “);
Console.WriteLine(“Workd”);
>>> Hello
World
“`
##### Java
“`java
System.out.print(“Hello “);
System.out.print(“World”);
>>> Hello WorldSystem.out.println(“Hello “);
System.out.pr
Java入門_第5章_練習問題5_4
#仕様書に沿った「calcTriangleArea」と「calcCircleArea」の作成
仕様書:
| | |
|:—————–|:——————|
|メソッド名|calcTriangleArea|
|戻り値の型|三角形の面積(double)|
|第1引数|三角形の底辺の長さ、単位はcm(double bottom)|
|第2引数|三角形の高さ、単位はcm(double height)|
|処理内容 |引数を使用して面積を求め、それを戻す。|| | |
|:—————–|:——————|
|メソッド名|calcCircleArea|
|戻り値の型|円の面積(double)|
|第1引数|円の半径、単位はcm(double bottom)|
|処理内容 |引数を使用して面積を求め、それを戻す。|#解答
“`Main.java
1 public class Main {
2 public sta
API呼ぶ【準備編】
##API呼ぶ
以下4つのパートに分かれています。(〇〇編は適当につけましたゆるして)
API呼ぶ【準備編】
[API呼ぶ【コア編】](https://qiita.com/RO018/private/19a9f1740e0dffbb7844)
[API呼ぶ【ハンドリング編】](https://qiita.com/RO018/private/609ce3dcb3079d44b69a)
[API呼ぶ【コール編】](https://qiita.com/RO018/private/1c9f4e603cd15b95acea)##準備編
まずは必要なモデル、Json変換、自作Exceptionを用意します。– モデル:リクエスト/レスポンスを入れる箱
– Json変換:API通信用にリクエスト/レスポンスをJsonに変換する
– Exception:結果に応じたExceptionを作り、処理の分岐の準備をする###モデル
Getter/Setterは省略してます“`リクエスト.java
package model;public class RequestDto {
初心者がVSCodeでSpringToolsSuite環境を作成する
## 目的
業務でSpringBootを使ったWEBAPIとお友達になりそうなので勉強のため
windows10環境にSpring tool suite 4の開発環境を作成。
とりあえずサンプルサイトを作ってみる。| 種類 | 名前 | バージョン |
| :-: | :-: | :-: |
| IDE | [Visual Studio Code](https://azure.microsoft.com/ja-jp/products/visual-studio-code/) | 1.14.1 |
| プラグイン | [Spring Boot Extension Pack](https:\\/marketplace.visualstudio.com/items?itemName=Pivotal.vscode-boot-dev-pack) | 0.0.8 |
| プラグイン | [Java Extension Pack](https:\\/marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack) |
Javaのスレッドの数や状態を確認するコマンド
Javaアプリケーションサーバの保守運用をしていると、現在起動しているスレッドの数や状況を知りたいということがあります。一般的なJavaアプリケーションサーバであれば、何らかのヘルスチェック機能が付属していると思いますが、状況によってはそのような機能が利用できないこともあると思います。そのような状況で、どのようにすればスレッドの数や状況を知ることができるでしょうか?
# 例
以下の`Server.java`はJavaアプリケーションサーバを模したプログラムで、3つの子スレッドをforkします。
“`java:Server.java
import java.util.ArrayList;
import java.util.List;public class Server{
public static void main(String[] args) throws InterruptedException {
// 3個の子スレッドをforkする。
Listthreads = new ArrayList<>();
java クラス、インスタンス、オブジェクト
今日はざっくりと書いて行きます。
クラス、インスタンス、オブジェクトについて簡単に書きます。# プログラムの状態
プログラミングに置いて
データは一塊の状態で考えるものとします。
そこでよく使われ、よく混乱しやすい三つの用語について説明します。* オブジェクト→紙
* クラス →記入フォーマットが書かれた紙 (身体測定用紙など)
* インスタンス→記入フォーマットにデータが書き込まれた紙 (個人情報が書かれた身体測定用紙)ざっくり書くとこんな感じです。
## オブジェクト
世の中にある状態と振る舞いを持つひとまとまりもの。
クラスとインスタンスは両方とも
オブジェクトになります。例:紙を想像して下さい。
## クラス
オブジェクトの共通の状態と振る舞いを集めた一つの型。設計書。
例:記入フォーマットが書かれた紙を想像してください。
身長、体重、視力などの身体測定用紙がわかりやすいかと## インスタンス
クラスから生成される実態。設計書から生成される実態。例:身体測定用紙に個人情報が書かれた状態
JMockit StringのコンストラクタでUnsupportedEncodingExceptionをmockする
# はじめに
カバレッジ100%達成しろというお達しを受けた底辺IT作業員が様々な制約から一つの答えを導き出した記録です。
# まとめ
そもそも引数にStringを渡しているせいなので、可能な限りCharsetを使うようにしよう。
# テスト対象コード
“`Java
try {
String foo = new String(“あいう”.getBytes(“Shift_JIS”), “Shift_JIS”);
} catch (UnsupportedEncodingException e) {
// ここを通したい
throw HogeException(e);
}
“`# テストコード
“`Java
new MockUp() {
@Mock
void $init(Invocation invocation, byte[] bytes, String charsetName) {
if (Arrays.equals(“あいう”.getBytes(“Shift_JIS”), bytes && c