JAVA関連のことを調べてみた2023年01月29日

JAVA関連のことを調べてみた2023年01月29日

【Spring Boot】Resilience4jのRateLimiterでリクエストパラメータごとの流量制御を導入する。

# 流量制御とは

アプリケーションで一度に実行できる処理の最大値を設定し、同時にリクエストされる回数を制限することです。サーバの負荷が一定以上になるのを防ぐことで、安定的にアプリケーションを稼働させることができます。APIを外部に公開する場合など、リクエストの回数がものすごく多くなる懸念があるときに使用すると有効でしょう。

Javaでは`Resilience4j`というライブラリに`RateLimiter`という仕組みがあるので、それを用いて実現することができます。

– [Resilience4j公式ドキュメント](https://resilience4j.readme.io/)

# リクエストパラメータごとに流量制御を適応する

通常流量制御はコントローラーに設定したURLごとに適応することが一般的でしょう。このような使い方に関しては、以下のサイトでわかりやすく解説されていました。

https://qiita.com/d-yosh/items/31fad6b4f6a9bb518e6d

本記事ではURLのエンドポイントに加え、リクエストパラメータごとでも制御する回数を分け

元記事を表示

Java ユーティリティクラス

開発の現場で〇〇Util.javaというのがあり、どのような役割があるのか疑問に思ったので調べました。

## ユーティルティクラス
Utilとはユーティルティクラスを指していたことが分かりました。
ユーティルティクラスとは、多くのクラスで使いそうな共通の処理をstatic領域にまとめて、簡単に処理を呼び出すためのクラスらしいです。
例えば、オブジェクトがnullや空文字なのか判定するメソッド、バリデーションチェックをするメソッドなどは多くのクラスで使いそうなのでユーティルティクラスに保存しておく実装になります。

## 使用例
“`java
class MsnUtil {
private MsnUtil(){}; //インスタンス化させないようにコンストラクタをprivate
public static boolean isempty(String msn) {
if(msn == null || msn.equals(“”)) {
return true;
} else {
retur

元記事を表示

JSF入力チェック

# bootstrap-5-jbvalidator

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106550/208dfb37-d39d-acc8-5ab0-342af72f9b9a.png)

“`.html

“`

“`.js
$(function () {

let validator = $(‘form.needs-validation’).jbvalidator({
errorMessage: true,
successClass: true,
language: ‘static/lib/boot

元記事を表示

React Native で react-native-sqlite-storage を使用する方法

[React Native で react-native-sqlite-storage を使用する方法](https://naoto-kagaya.com/articles/2022-12-18-react-native-sqlite-storage)

https://naoto-kagaya.com/articles/2022-12-18-react-native-sqlite-storage

# 上記記事の目的
React Native で expo を使わずに react-native-sqlite-storage を使えるアンドロイドアプリ開発環境を構築する。

# 記述内容

– react-native-sqlite-storageの導入方法
– 動作テスト

元記事を表示

Android+OpenCVで特徴点マッチングをやってみた

# はじめに
Android Application(Java)上で画像認識をやってみたいなと思い、OpenCVを使ってて特徴点マッチングをやってみました。

Windows 10 64-bit
Android Studio バージョン:Dolphin 2021.3.1 Patch 1
Android APIレベル:33
OpenCV SDKのバージョン:4.7.0
開発言語:Java

# OpenCVの取り込み
Android StudioへのOpenCVの取り込みはすでに分かりやすくい記載されている方がいるので以下を参照

https://qiita.com/tifa2chan/items/a2ec4f5d90eeb9cf1802

※GradleのSync errorが発生する場合は以下を参照

https://qiita.com/yoshiyuki-N/items/b6dba2c7167681dba7b2

# 特徴点マッチングについて
画像認識の手法の一つ(という理解)です。
画像中に含まれている特徴量を計算して特徴点を抽出します。
異なる画像間で抽出した特徴量を比較し、近

元記事を表示

String型やInt型に直接拡張関数を生やすのはいかがなものか(value classを検討しよう)

## 要約
– プリミティブ型に拡張関数を書くと、必要以上に広いスコープが対象になってしまう
– `value class`を活用するとスコープと用途を限定できて良いかも
– 絶対こうすべきという強い思想はまったくなく、検討する価値のある方法の1つという意

## よくある場面

?<`1500`のようにIntで扱っている値を画面に表示する際に、`1,500円`のようにカンマ区切りにして「円」をつけたStringに変換したいな ```kotlin val formatedPrice: String = "%,d".format(1500) + "円" println(formatedPrice) // -> 1,500円
“`

?<この変換はいろいろな箇所で使うから`Int.kt`ファイルに拡張関数として追加しておこう ```kotlin Int.kt fun Int.format(): String = "%,d".format(this) + "円" ``` ?<簡単に呼び出せるようになって、コードもスッキリした ```kotlin val formatedPrice

元記事を表示

ファイルアクセスと例外処理

proになるJava 第12章

・多くのプログラムでは、データを外から受け取り、処理結果をプログラムの外に出力する必要があります。
 プログラムで想定してないデータがやってきた場合などに例外として対応する場合の処理を見ていきます。

ファイルへの保存を行います。

sample code
projava/Writefile.java

package projava;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class WriteFile {
public static void main(String[] args) {
var message = “””
test
message

元記事を表示

MybatisのInvalid bound statement (not found)でぼんやりはまった

# Mybatis + Java + SpringBoot4

パッケージ割を変えたら、
Mapper XMLのSQLを実行できなくなった・・・。
JavaのRepositoryで定義したメソッドと紐づけできなくなったらしい。

### エラー内容
Invalid bound statement (not found)

### 原因

MyBatisConfigのJavaクラスで定義している@MapperScanのベースパッケージ

“`
@MapperScan(basepackage=”com.example.xxx.yyy.zzz”)
“`

– レポジトリ(Javaクラス)の場所
com.example.xxx.yyy.zzz.aaa.bbbパッケージに配置。
– Mapper XML ファイルの場所
src/main/resource/xxx/yyy/zzz/aaa/bbbフォルダに配置。

### 解決

– Mapper XMLファイルの場所

MapperScanと同じ階層に配置する
src/main/resource/xxx/yyy/zzz

##

元記事を表示

Stream#max()

max,minは、Comparatorを渡す
“`java
public class Outer {
public static void main(String[] args) {
List l = List.of(“C”,”X”,”A”);
l.stream().max((a,b) -> a.compareTo(b)).ifPresent(System.out::println);
l.stream().min((a,b) -> a.compareTo(b)).ifPresent(System.out::println);
}
}
“`
“`
X
A
“`

元記事を表示

String#compareTo()

sortに渡すComparatorのbaseになる考え方
returnが1以上になるとsortはひっくり返す

“`java
public class Outer {
public static void main(String[] args) {
String s1 = new String(“A”);
String s2 = new String(“B”);
System.out.println(s1.compareTo(s2));
System.out.println(s1.compareTo(s1));
System.out.println(s2.compareTo(s1));
}
}
“`
“`
-1
0
1
“`

元記事を表示

findAny findFirst method with parallelStream

findFirstは1個目の要素が保証される
findAnyは1個目の要素が保証されない
“`java
public class Outer {
public static void main(String[] args) {
List l = List.of(1,2,3,4,5);
l.parallelStream().findAny().ifPresent(System.out::println);
l.parallelStream().findFirst().ifPresent(System.out::println);
}
}
“`
“`
3
1
“`

元記事を表示

stream map method

Function interfaceを渡す
return type is Stream\
“`java
public class Outer {
public static void main(String[] args) {
List l = List.of(1,2,3,4,5);
l.stream().map(a -> String.valueOf(a) + “xxx”).forEach(System.out::println);
}
}
“`
“`
1xxx
2xxx
3xxx
4xxx
5xxx
“`

元記事を表示

stream reduce method

reduce methodは、BinalyOperatorを引き渡し累積的に処理する
return type はOperator<T>
初期値を渡すと、初期値の型を返す

“`java
public class Outer {
public static void main(String[] args) {
List l = List.of(1,2,3,4,5);
l.stream().reduce((a,b) -> {
System.out.print(“a:” + a);
System.out.println(” b:” + b);
return a+b;
}).ifPresent(System.out::println);
int sum = l.stream().reduce(100,(a,b) -> {
System.out.print(“a:” + a);
Syst

元記事を表示

AndroidTVでインジケーターを実装

# はじめに
初めましての方ははじめまして。

最近仕事でAndroidTVアプリの開発をすることが増えてきたので備忘録です。
AndroidTV(またはFireTV)はAndroidと違ってリモコンを用いて操作するので特有のUIになります。
トレイアートを横に並べるデザインが主流ですのでインジケーター等で視認性を上げる必要があります。

# 実装方法
いくつかあり、RecyclerViewで並べたりfor文で並べたり[jetpack Compose](https://developer.android.com/jetpack/androidx/releases/tv?hl=ja)を用いたりと実装方法自体はAndroidと変わりません。

今回はわかりやすさも兼ねてfor文で紹介します。

# 実装

レイアウトファイルにインジケーターの挿入位置を決めます。
“`xml
【AndroidStudio】ToolBarを使うときに気を付けること(戒め)

アプリを開発してできた!と思いリリースするとライトモードのスマホでは起動するのに、ダークモードのスマホでは落ちる。
これはToolBarを使うときにThemeをNoActionBarに変更しないといけないが、ダークモードのthemeを変更することを忘れていた自分への戒め。

## themeの設定
アプリにはもともとActionBarがあり、ToolBarとほぼ同じような働きをするものがついている。
そのためToolBarを使うときは、下の画像のようにthemesをダブルクリックしてtheme.xmlを開いてstyleのparentをActionBarを使わないものに変更、もしくはitemでActionBarを使わないことを記述する必要がある。
![themeLight.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/b9cd532e-f228-de04-daf5-3afd4e6d4c4b.png)
“`xml:parentを変更する場合
WindowsにJDKをインストールする方法

# WindowsにJDKをインストールする方法

ダウンロードサイトが古いバージョンの記事が多いため、投稿します。

## 対象

– 動作環境が以下であること
– Windows 10 Pro
– 64bit
– [Windows10が32bit・64bitかを確認する方法](https://miya-system-works.com/blog/detail/119)

## JDKのダウンロード

1. Oracleのダウンロードサイト [Java Downloads(Oracle)](http://www.oracle.com/technetwork/java/javase/downloads/index.html) に遷移する
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547575/736b3574-618c-cc72-7ce2-78b268a8696c.png)
1. スクロールし、Windowsタブを選択する
![2.PNG](h

VSCodeでSpring Bootをデプロイするまでに詰まった話【失敗談】

# 概要
タイトルの通りです。
VSCodeでSpring Bootのモジュールをデプロイするまでに詰まった結果の解決方法のメモになります。
基本的に頭弱い人が環境構築した失敗談なので、茶のおともにでもお読みください。

## 対象読者
効率的な情報共有を目的とした文ではないので、なんか暇つぶしに読み物をしたい人。

## 筆者のスキル
* Spring Boot
* ずいぶん昔にHello Worldくらいは表示させたような、しなかったような
* Spring Boot2.x系とSpring Boot3.x系の違いは分かってない
* IDEの使用歴
* JavaのIDEは今までEclipse
* VSCodeはjavascriptを使用するときに使ってる
* その他
* ぶっちゃけ、新規でアプリ作るのってあんまりやってない
* 英語から逃げ出したい

# 本記事の環境
* OS
* Windows 11
* 使用IDE
* VSCode(Visual Studio Code)
* 拡張機能(主要なもののみ)
*

元記事を表示

SpringBootでストップウォッチアプリを作ってみる

# はじめに
SpringBootで簡単なアプリ作成としてストップウォッチアプリを作ってみます。
自分の手で自分の作りたいものを手を動かしながらしたほうが、
習得早いのかなって思い始めました。
(ずっとインプットばかりだと、細かいところばっかり気になるし、
 インプットしたらしたで結局どう作るの?って感じなので…)

イメージとしては、スタートボタンとストップボタン、その時間何するか入力欄を
おいて、自分用の記録を取っていく感じです。
少しずつこの記事も更新していきます。(目標:2/3完成)

# 画面イメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118881/4b6a0438-6b65-cc3c-978d-43086dabadfc.png)

元記事を表示

【Java】Spring Bootで作るRESTAPIサンプル

実務でREST APIのソースを読む機会があり、自分でも簡単なものを作成してみたので備忘録として残しておく。

# 作成するアプリの概要

リクエストを投げるクライアント側とレスポンスを返すホスト側の2つを用意する。

クライアント側がブラウザで入力した文字列をホスト側にリクエストを投げる。

受け取った文字列をホスト側でコンソールに出力するというシンプルすぎるもの。

コンソールへの出力が成功した場合は「0」を、失敗した場合は「1」の処理結果コードをクライアントに返却する。

クライアントもホストのどちらもSpring Bootで実装し、どちらもローカルに存在しているものとする。

使用ライブラリはJackson、lombook。テンプレートエンジンはthymeleafを使用している。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/935552/da49798b-b03b-7d55-98b4-fe13b716e7a3.png)

# クライアントの実装

プロジェクト

元記事を表示

Intellij IDEA をアップデート(2021.1 → 2022.3)したら起動しなくなった

## 起きたこと
Intellij IDEA CE 2021.1 → 2022.3にアップデートしたところ起動できなくなりました。
アイコンをタップしてもピコピコ上下に少し動くだけで全く起動しない・・・。

## とりあえずログを見てみる
以下パスまで移動
“`
cd /Applications/IntelliJ\ IDEA.app/Contents/MacOS
“`
idea バイナリーを実行
“`
./idea
“`

するとこのようなログが
“`
IntelliJ IDEA CE.app/Contents/MacOS
❯ ./idea
2023-01-26 21:43:55.570 idea[2219:29511] allVms required 1.8*,1.8+
2023-01-26 21:43:55.573 idea[2219:29515] Current Directory: /Applications/IntelliJ IDEA CE.app/Contents/MacOS
2023-01-26 21:43:55.573 idea[2219:29515] par

元記事を表示

OTHERカテゴリの最新記事