- 1. よく使うSpring Boot の アノテーションまとめ
- 2. 「マイクロサービスパターン」の復習 1章 モノリシック地獄
- 3. JSFのサンプル
- 4. Effective Java 第3版まとめ(項目5)
- 5. フォルダ量産
- 6. Javaでの乱数記述の仕方
- 7. 【Jackson】AnnotationIntrospectorでJsonGetter同様の動作を実現する
- 8. auカブコム証券のkabuステーションREST APIで自前のトレイル注文を作ってみる(ツール完成編)
- 9. Javaプログラミングにおけるストリーム
- 10. (初心者向け)Spring Data JPAの基礎知識
- 11. [Docker][Java] Java プロセスのコンテナで jstat が採れない
- 12. 例外の学習
- 13. サーブレットJSPについて
- 14. Java開発環境を構築
- 15. staticメソッドで非staticなDIオブジェクトを使いたい
- 16. 【Java】正規表現で最後にマッチした文字列のみを置換する方法
- 17. Stream/Optionalで例外をthrow出来ないからと処理を解体された話
- 18. コンピュータとオセロ対戦52 ~ネットワーククラス~
- 19. Nablarch Webアプリケーションのデバッグ方法について
- 20. Effective Java 第3版まとめ(項目4)
よく使うSpring Boot の アノテーションまとめ
Java/Kotlinのフレームワークとして有名な、「Spring Boot」を仕事で使っています。
Spring Bootを使っていると、アノテーションと呼ばれる@マークで始まるタグのような目印が出てきて、最初は面食らいました。
よく使うアノテーションは比較的限られているので、それをまとめてみました。# Component アノテーション
## `@Component`
[Component (Spring Framework 5.3.18 API) – Javadoc](https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/stereotype/Component.html)
> アノテーション付きクラスが「コンポーネント」であることを示します。このようなクラスは、アノテーションベースの構成およびクラスパススキャンを使用する場合の自動検出の候補と見なされます。
他のクラスレベルのアノテーションも、コンポーネント、通常は特別な種類のコンポーネントを識別
「マイクロサービスパターン」の復習 1章 モノリシック地獄
## 1章 モノリシック地獄からの脱出
– モノリシック地獄
– マイクロサービスアーキテクチャの基本的な考え方
– マイクロサービスアーキテクチャの利点・欠点
– パターン言語とマイクロサービスアーキテクチャパターン
– マイクロサービスアーキテクチャと組織## モノリシック地獄
– 最初は、綺麗に設計できていれば開発もスムーズだけど、大きくなるにつれてそうもいかなくなる
– 変更の影響範囲が分からなくなるので、開発が遅くなる
– 一つのコードベースだと、常に不安定で、ビルドが通らない
– 自動テストをやっていても、テストに時間がかかる
– (垂直)スケーリングしづらい
– CPUが必要なモジュールもあれば、メモリが必要なモジュールもあるので## マイクロサービスアーキテクチャの基本的な考え方
– スケールキューブという考え方がある
– X軸:いわゆる水平スケーリング
– Z軸:パーティショニングによるスケーリング
– Y軸:機能分割によるスケーリング
– マイクロサービスアーキテクチャは、Y軸によるスケーリングを実現する– SOAの
JSFのサンプル
# 構成
– JsfTest
– src
– main
– java
– bean
– IndexBean.java
– InputBean.java
– webapp
– index.xhtml
– next.xhtml
– WEB-INF
– faces-config.xml
– web.xml
– pom.xml# pom.xml
“`
com.sun.faces
jsf-api
<
Effective Java 第3版まとめ(項目5)
# 項目5.資源を直接結び付けるよりも依存性注入を選ぶ
## 書かれている内容
* 多くのクラスが一つ以上の下層の資源に依存している
* たとえば、スペルチェッカーは辞書に依存している
* このようなクラスが静的なユーティリティやシングルトンで実装されていると、
柔軟性に欠けてテストできない(例えばテスト用の辞書を使うことができない)
* スペルチェッカーに辞書を変更するためのメソッドを追加すると、扱いにくく、間違いやすく、並行な環境では機能しない
* 新しいインスタンスを生成するときにコンストラクタに資源を渡す
* または、コンストラクタに資源ファクトリを渡す
* Supplierインタフェースは、ファクトリを表現するには最適
フォルダ量産
public static void main(String[] args) {
try{
for(int i=1;i<=作りたいフォルダ数;i++) { Path p = Paths.get("パス"+String.valueOf(i)); Files.createDirectory(p); } }catch(IOException e){ System.out.println(e); } }
Javaでの乱数記述の仕方
# Javaでの乱数の記述の仕方について
乱数の表記表には複数種類存在する。
#### 1.Random関数を用いた記述
Randomクラスは、疑似乱数を生成するためのクラスである。戻り値はint型であり、乱数のように見えるが、実際には一定の規則で生成されている数字。
Randomクラスを使用するには`java.util.Random`をimportする必要がある。
#### ソースコード
~~~Java
import java.util.Random;public class Main {
public static void main(String[] args) {
Random r = new Random();
int r = random.nextInt(➀);
//0以上➀未満までの間で乱数を取得する
}
}
~~~
import文も含めて1文にまとめることも可能である。`int r = new java.util.Random().nextInt(➀);`
また、コンストラクタに初期値(シード)を与えると、生成される疑似乱数列
【Jackson】AnnotationIntrospectorでJsonGetter同様の動作を実現する
# TL;DR
– `AnnotationIntrospector`には`JsonGetter`同様の動作を再現するための明示的なメソッドは用意されていない
– `findNameForSerialization`を実装することで、`JsonGetter`同様の動作を実現できる# 本文
## JsonGetterとは
`Jackson`では、名前が`getter`に当たるメソッドしかシリアライズ対象になりません。
一方、`JsonGetter`アノテーションを付与したメソッドは名前に関わらずシリアライズ対象となります。“`java
// シリアライズすると{“foo”:1,”bar”:2}が出力される
class Src {
public int getFoo() { return 1; }
@JsonGetter public int bar() { return 2; }
}
“`## やりたいこと
`Jackson`の挙動をカスタムして、特定条件で`JsonGetter`同様の動作をさせます。
今回は以下の`MyAnnotation`が設定されてい
auカブコム証券のkabuステーションREST APIで自前のトレイル注文を作ってみる(ツール完成編)
# はじめに
前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モック
Javaプログラミングにおけるストリーム
## ストリーム (プログラミング)とは
メモリ領域やファイル、ネットワークに記載・格納されたデータを読み取る、
反対にそれらにデータを書き込むためのオブジェクトや、そのための機能を持つデータ型。
接続や切断、書き込みや読み込みなどを簡易な操作で行える。## InputStream/OutputStream
Javaのストリームオブジェクトで
データをバイナリ形式で読み取り/書き込みを行う。必ずしもバイナリデータをやり取りするわけではなく、
FileOutputStreamなど、ファイルへの文字の書き込みをバイナリで行う事もできる。## バッファリング
ストリームオブジェクトがストリーム処理を、
一定のデータ量でまとめて行う事で、処理性能を上げられる機能。
バッファリングをしない場合、ストリームは1バイトずつ行われるが、
バッファリングをすることで、ストリームを最大1024バイトずつ行える。
Javaでは、BufferedOutputStreamクラスがバッファリング機能を提供している。## Writer/Reader
J
(初心者向け)Spring Data JPAの基礎知識
現在学習しているSpring bootの中で、Spring Data JPAを利用する機会があったので、復習も兼ねて投稿します。
## Spring Data JPAとは
Spring bootでデータベースにアクセスできるライブラリ/フレームワークのこと。Spring Data JPAでは、JavaクラスとDBテーブルをつなぎ合わせてくれるHibernate(ハイバーネート)ライブラリを内部実装している。
## Spring Data JPAでDBを自動生成してみる
今回は練習も兼ねてMySQLとSpring Data JPAを繋げてみます。
## MySQLでデータベースの設定を行う。
### データベースの作成。
“`sql
create database db_sample;
“`
### ユーザーとパスワードの設定
“`sql
create user ‘username’@’localhost’ IDENTIFIED BY ‘password’;
“`
### 権限の設定
“`sql
GRANT ALL PRIVILEGES ON * . * TO ‘us
[Docker][Java] Java プロセスのコンテナで jstat が採れない
docker コンテナで動かしている Java プロセスの jstat を採る話。
以下のように実行してみると。。
“`
$ docker exec -t –user 1000 {container-id} jstat -gc 1
“`こんなエラーになりました。
“`
sun.jvmstat.monitor.MonitorException: 1 not found
at jdk.internal.jvmstat/sun.jvmstat.perfdata.monitor.protocol.local.PerfDataBuffer.(PerfDataBuffer.java:84)
at jdk.internal.jvmstat/sun.jvmstat.perfdata.monitor.protocol.local.LocalMonitoredVm.(LocalMonitoredVm.java:68)
at jdk.internal.jvmstat/sun.jvmstat.perfdata.moni
例外の学習
https://qiita.com/ts7i/items/d7f6c1cd5a14e55943d4
## 理解が深まったところ
– 多段の呼び出し階層への対応
### 検査例外
>Exceptionクラス配下のRuntime Exception以外のクラスが対象。
Javaがコンパイル時に検査を行う例外なので、try-catchで例外ハンドリングを行わないといけない。
何故このような仕様になっているかというと、検査例外は基本的に正しいプログラムを書いていても避けられない例外だからです。
例えば、ファイルが壊れたりしているとIOExceptionが起きますが、どれだけ頑張ってプログラムを書いてもファイルが壊れていたら防ぎようがありません。
同様にDB障害などでSQLExceptionが発生するのもプログラムではどうしようもありません。
そういった例外たちを集めて、「お前らがハンドリングを忘れないようにtry-catchの記述を強制させてやるぜ~」ってJavaがドヤ顔しているのが検査例外だと思えば良いでしょう。検査例外とは、呼び出し元に何らかの対処を強制する例外である。
対処し
サーブレットJSPについて
## サーブレットJSPの基本を学ぶ。
サーブレットJSP、業務でがっつり使ているが、UI的な。動的な画面表示のようなことは全くイメージもついていないので、ここで触っておく。
>TomcatにはWebサーバー機能はありますが、ApacheのWebサーバーとしての性能(高速処理、安定性)と同等にはなりません。
>WebサーバーとしてならApacheを使うのが一般的です。
>そこでHTMLや画像などの静的なコンテンツは処理速度が高速なApacheに処理させ、Javaサーブレットで作成された動的コンテンツをTomcatに処理させます。まずは、ApatcheとApatche Tomcatの違いについてだが、Apatcheは静的コンテンツなどの配信や、動的リクエストの振り分け?などに特化しており、Tomcatは。その動的リクエストをうまくさばくことができるものである。名前は似ているが、やっていることは別物であることは覚えたい。
TomcatにもApatcheの機能があるということで、覚えやすくなるのではと思う。
### 全体のイメージ図![image.png](https://qi
Java開発環境を構築
## Java実行環境を構築
### Javaをインストールする
まずはJavaをインストールする。職場で使用しているので、Amazon Corretto 11 をインストールする。
公式のドキュメントから、Windows_×64のJDK .msiをダウンロード。https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/windows-7-install.html
※自動でJAVA_HOMEとPATHを通してくれているようだ。
もし、PATHが通っていなかったらPATHを通す。
https://www.javadrive.jp/start/install/index4.html#section3
https://qiita.com/sta/items/63e1048025d1830d12fd
インストールされているかを確認。
“`cmd
C:\Users\User1>java –version
openjdk 11.0.13 2021-10-19 LTS
OpenJDK Runtime En
staticメソッドで非staticなDIオブジェクトを使いたい
# はじめに
staticメソッド内でmybatis用のmapper interfaceを@Autowiredして使いたかった時の話。
もちろんそのままだとstaticメソッドから非staticメソッドの参照だしそもそもinterfaceだしで使うことは出来ないので、回避策が必要。# NGパターン
“`MyMapper.java
package com.my.mapper;public interface PhoneInfoMapper {
int selectByHogeHuga(String hogeFuga);
}
“`
“`MyMapper.xml
【Java】正規表現で最後にマッチした文字列のみを置換する方法 正規表現で最初にマッチした文字列のみを置換する方法としてreplaceFirstメソッドが存在するが、最後にマッチした文字列のみを置換するreplaceLastメソッドはない。
探してみたところ、replaceFirstを応用して自作している人がいた為、使わせていただいた。“`java:replace.java
public static void main(String[] args) throws Exception {String str = “hoge 0123 PIYO 4567 hoge 890 FUGA”;
// 小文字アルファベットの1回以上の繰り返しを””abc””に置換
String result1 = replaceLast(str, “[a-z]+”, “abc”);System.out.println( result1 ); // hoge 0123 PIYO 4567 abc 890 FUGA
}public static String replaceLast(String str, String
Stream/Optionalで例外をthrow出来ないからと処理を解体された話
# はじめに
上流のアーキテクチャをされている方が非検査例外から検査例外に変更したのを機に、投稿者の実装処理内のラムダ式を全部for文に変更して、動作チェックをこっちにぶん投げてきたので、小さなの抵抗と後学のためにラムダ式の検査例外を非検査化する方法を調べた際のメモです# 前提
Javaのラムダ式にて検査例外(Exceptionを継承した例外)を処理した場合
“` java
private void func1() throws java.io.IOException {
java.util.List.of(1, 2, 3)
// 例外が実際に発生した場合の想定
.forEach(e -> {
throw new java.io.IOException();
});java.util.Optional.ofNullable(“val”)
// 例外が実際に発生した場合の想定
.map(val -> {
throw new java.io.IOException();
});
}
“`
この場合だ
コンピュータとオセロ対戦52 ~ネットワーククラス~
https://qiita.com/tt_and_tk/items/068f2afde6db637e189f
[前回](https://qiita.com/tt_and_tk/items/5249541e6bdf307c28ad)
# 今回の目標
ネットワーククラスを作成する。
# ここから本編
## 現在のディレクトリ構成“`
MyNet2
├── Matrix.java
├── actFunc
│ └── 活性化関数クラス
├── layer
│ └── 層クラス
├── network
│ └── ネットワーククラス
└── tests
└── テストクラス
“`## 修正点
全ての層で共通するデータ型を使用するため、ConvとMaxPoolingのforwardメソッドを変更しました。
また、二次元と四次元の相互変換のため、MatrixクラスにtoMatrix4dメソッドを、Matrix4dクラスにflattenメソッドをそれぞれ追加しました。“`Conv.java
/**
* Doing forward propag
Nablarch Webアプリケーションのデバッグ方法について
# はじめに
こんばんわ、きりです。
本記事は[Nablarchを使ってみよう](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17)のサブ記事として作成しております。[Nablarchを使ったWebアプリケーションの作成](https://qiita.com/kirin1218/items/c537cb8a444ee59763cd)にて、NablarchのWebアプリケーションのテンプレートプロジェクトをダウンロードし、実行までを行いました。
今回は開発作業のお友達、デバッグの方法を整理します。
いくつか方法はあると思いますが、今回は
* waittコマンドを使ったデバッグ
* tomcatを利用したデバッグについて整理します。
本記事以外のコンテンツは[こちら](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17#nablarch%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%
Effective Java 第3版まとめ(項目4)
# 項目4.privateのコンストラクタでインスタンス化不可能を強制する
## 書かれている内容
* ユーティリティクラスは、インスタンス化されるようには設計されていない(インスタンスには意味がない)
* 明示的なコンストラクタがなければ、コンパイラはデフォルトコンストラクタを提供する
* ユーザにとってこのコンストラクタは、他のコンストラクタと区別がつかない
* 抽象クラスもうまくいかない。サブクラスを作成できるし、サブクラスをインスタンス化できる。継承するために設計されていると誤解される
* privateのコンストラクタでインスタンス化できないようになる
* privateのコンストラクタでAssertionErrorをthrowすることで、クラス内から誤って呼び出された場合の保険となる