JAVA関連のことを調べてみた2021年12月15日

JAVA関連のことを調べてみた2021年12月15日

MyBatis利用時に発生した例外から抜け出した話

はじめに

O/Rマッパーの一つであるMyBatisを使いQiitaのような質問投稿アプリを作成しています。
そこで悩んだ例外処理の発生原因について、忘備録兼同じことで悩んでいる方の手助けができればと思い投稿しました。
認識が異なる点があればご指摘いただけると嬉しいです。。。

org.apache.ibatis.binding.BindingException

①リポジトリクラスにアノテーションが抜けていた

“`
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.demo.repository.UserMapper.insert
at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:235) ~[mybatis-3.5.7.jar:3.5.7]
“`

こちらの例外は、ユーザー情報を入力

元記事を表示

AtCoder002をやった(Java)

AtCoder002をやった。
初めてC問題解けた。

##[A](https://atcoder.jp/contests/abc002/tasks/abc002_1)
大小の比較です。正直者を出力してあげてください()

“`
import java.util.*;

public class Main {
public static void main(String[] args) throws Exception {
// Your code here!
Scanner scan = new Scanner(System.in);
ArrayList list = new ArrayList();

list.add(scan.nextLine());
if(Integer.parseInt(list.get(0).split(” “)[0]) < Integer.parseInt(list.get(0).split(" ")[1]))

元記事を表示

【Spring】@Autowiredはコンストラクタインジェクションで使おう!

この記事は、[シアトルコンサルティング株式会社 Advent Calendar](https://qiita.com/advent-calendar/2021/seattleconsulting) 2021の15日目の記事です。

こんにちは、シアトルコンサルティングの 羽田野 と申します。
この度、弊社 シアトルコンサルティング株式会社 でAdvent Calendarに参加することになりました。

TeamTech Move the WorldをMissionに掲げ、日々全力で業務に取り組んでおります!
少しでも興味を持って頂けたら下記のサイトを覗いてみてください!

コーポレートサイト

ホーム


Wantedly
https://www.wantedly.com/companies/seattleconsulting
よろしくお願い致します!

## はじめに
今回はSpringフレームワークで用いるアノテーション`@Autowired`でのインジェクションの種類について見ていきます。
記事の対象としてはJavaは少

元記事を表示

勤怠管理の作成を目指す+α:Day2

 早起きに失敗したけど、とりあえずやっていきます!

やったこと
———-
https://eng-entrance.com/java-get-time

・上記サイトを読み進めて実践する

勤怠に関係しそうな整理としては。。。
朝の時間が足りなくなり、Dateクラスの実践&理解(中途半端)で断念。

・Udemyの動画進める
めっちゃ駆け足だけど、理解追い付いてないけどなんとか

明日やること
————-

元記事を表示

【Elasticsearch】メモリ32GBの境界を越えてゆけ

# はじめに

オークファンの@iwatake255です。
開発部 データソリューションチームでリードエンジニアをやっております。
`Elasticsearch歴2リットル`の初心者ですがElasticsearchについて書きたいと思います。

さて、オークファンでは膨大な量のオークションデータを保存・検索するためにElasticsearchを採用しております。

Elasticsearchでは自分が使用するJVMヒープメモリサイズを変更することもできるのですが、世間ではこのメモリサイズを32GB以上に設定すべきではないという`神話`が語り継がれてきていました。

しかし弊社サービスにおける性能チューニングの中で、JVMヒープメモリサイズを32GB→64GBに変更しただけで検索性能が劇的に向上したケースがあり、本記事ではこの`神話`の妥当性について検証してみようと思います。

# Elasticsearchの「32GB神話」について

## 公式ドキュメント等
かつて(Elasticsearch 7.10まで?)は`約32GBを超えないように`JVMヒープメモリサイズ(XmsおよびXm

元記事を表示

Spring MVC × MayaaテンプレートでHello World

# Spring MVC × Mayaaテンプレート

MayaaテンプレートはSeasar2の拡張機能として2000年台に登場したHTMLテンプレートエンジンです。
プログラマーとデザイナーの作業分担を意識した思想があり、主にMayaaファイルとHTMLファイルに分けられて画面が実装されます。

Seasar2としては2016年9月にEOLを迎えていますが、Mayaaテンプレート自体のサポートは2021年12月現在も継続しています。
元々Seasar2の一部として登場していますが、テンプレート自体はフレームワークに依存していないため、その他のMVCフレームワークでも動作させることが可能みたいです。

https://github.com/seasarorg/mayaa

Servlet APIのバージョンも4.0まで対応しているみたいなので、比較的新しいバージョンのAPサーバー上でも動作が可能です。
JavaについてもLTSバージョンに対応しているので、Springとの相性としても問題はなさそうです。

## Spring MVC側での設定実装

Mayaaテンプレートを動作させるた

元記事を表示

ラムダ式を用いて、拡張for文の可読性を上げる。

#問題
Listをループする際に便利な拡張for文ですが、どうしても冗長化してしまい
可読性に欠けることが多くある為、ラムダ式を用いて冗長化をなるべく防ぎたいと日々思っています。

例えばListを普通に拡張for文でループする場合は

“`
List list = new ArrayList<>();
list.add(“赤”);
list.add(“青”);
list.add(“黄色”);

for(String color: list){
System.out.println(color);
}
“`

これをラムダ式に置き換えると、、、

“`
List list = new ArrayList<>();
list.add(“赤”);
list.add(“青”);
list.add(“黄色”);

list.forEach(color -> System.out.println(color));
“`

上記の場合
①:「color」の部分にループする際に代入する変数を定義
②:「System.out.println(color)」の部

元記事を表示

[英語が苦手な人向け]英語でのググり方(JavaのScannerクラスのコンストラクタにSystem.inを入れた場合にCloseするべきか?問題を添えて)

ググって解決しづらかったこと Advent Calendar 2021 14日目の記事です。
すみません遅刻しました (_ _。)

## はじめに

Q 英語が苦手です。 英語でググれません。無理です。
A そこにGoogle翻訳があるじゃろ。

英語苦手でも以外と検索できますという事を伝えたかった

[茶番を飛ばして結論読みたい方](#補足まとめ)

## 茶番

後輩くん)うーん?
先輩さん)どうしました後輩くん?
後輩くん)ちょっとこのコードを見て下さい。

“`java
package test_java;

import java.util.Scanner;

public class App {

public static void main(String[] args) {
var s = new Scanner(System.in);
var input = s.nextLine();
System.out.println(input);
s.close();
}
}
“`
先輩さ

元記事を表示

勤怠管理の作成を目指す+α:Day1

 会社から「座学だけで勉強が進む性格していないでしょ? 勤怠管理作ってみてよ」と提案され、全くもってその通りだったので、JAVA SEの取得目標と合わせて進めていこうというログとなります。

 ひとまず、指針を決めにゃダラけ街道まっしぐらなので、今日は簡単な指針を決めるとこから。
 ついでに、その日の計画をその日に立ててもダレたりやらなかったりする甘ったれな性分なので、次の日の目標を立てて消化できたか否かを振り返ろうと思います。

今日やったこと
———
・勤怠管理の前に、打刻を通すことだけを考える必要がある
・打刻を通す前に、ボタンを押したら同じページに時間を出力する
上記から、下記サイトを参考にやってみる
https://eng-entrance.com/java-get-time

明日やること
———-
・上記サイトを読み進めて実践してみる
・勉強としてUdemyの動画を進める

元記事を表示

log4jとは

## 勉強前イメージ

apacheくらいしかしらない・・・
脆弱性で話題

## 調査

### log4jとは

正式にはApache log4j といい、オープンソースのJavaプログラム用のロギングAPIになります。
プログラムが正しく動作してるかを確認するために、
規模が大きくなればデバッグツールやロギングツールを使ってプログラムの流れを確認します。
Apacheのサブプロジェクトで、Apache Loggingプロジェクトで開発が進められています。
元々はApache関係なかったですが合流することになったようです。
Java以外の言語でもサポートされているものはあり、PerlやRuby、pythonなどがあります。

### 脆弱性について

JavaにはJNDI(Java Naming and Directory Interface)という
アプリケーションがDNSや [LDAP](https://qiita.com/miyuki_samitani/items/6c5ad9b213f89979da17) を利用するためのライブラリがあります。
Log4jの機能としてJND

元記事を表示

JAVA SE取得を目指す:Day1

 テックキャンプからSESの会社に就職、さらに現場が決まったのはいいけど、現実って厳しい。
 いま働いているところは、正直開発とかプログラミングとは無縁の環境で、この現場で学べるところは一切ない状態。

 ぬくぬくと現場の環境に居ても、そのうち切られるかもしれないし、何より会社へ回せる金を増やしてお賃金も増やしたいので、自分を追い込むためにもJAVA SEを目指す日記をつけていきます。

今日やったこと
————-
・参考サイトの確定
https://techgamelife.net/2021/02/14/java-silver-se-11/
ここの内容に沿って、進めていこうと思います、
明日の現場終了後に本屋へダッシュして購入しよう。

明日やること
———
・買った本と1時間は向き合う

さて、どれくらいで行けるようになるかなー。

元記事を表示

Jacksonでenumをシリアライズ/デシリアライズするときの注意点

#2.11以降では、enum(列挙型)の変換に`@JsonCreator`は必ずしも必要ではなくなった

https://github.com/FasterXML/jackson-module-kotlin/issues/336

下記のようにenumに独自の値を持たせているのであれば、そのフィールドに`@JsonValue`をつければシリアライズ、デシアライズともに取り計らってくれるようになったようです。

“`java:TestEnum.java
public enum TestEnum {
TEST_A(“testA”),TEST_B(“testB”);

TestEnum(String label) {
this.label = label;
}

@JsonValue
@Getter
private String label;

// このメソッドに@JsonCreatorは不要
public static TestEnum of(String value) {
for (var

元記事を表示

log4j1.x系は大丈夫なの?

# はじめに
[CVE-2021-44228](https://www.jpcert.or.jp/at/2021/at210050.html)でlog4jが注目を浴びている結果、log4j1.x系の処置が問題になったので自分なりに周辺事情やらを整理

# 結論を先に
– log4j1.x系はサポート切れで、今後なんらかの問題が発生しても修正されないので継続利用は問題がある
– とはいえCVE-20221-44228はlog4j1.xには影響なし
– また、既知重大脆弱性CVE-2019-17571についてもSocketServer/SimpleSocketServerいずれかの利用がなければ影響なし
– 緊急性はないものの継続利用は問題なのでよく検討して乗り換えましょう

# log4j1.x系のサポート
[とうの昔に切れている](https://logging.apache.org/log4j/1.2/#:~:text=On%20August%205%2C%202015%20the,upgrade%20to%20Apache%20Log4j%202.)

#CVE-2021-4422

元記事を表示

Javaを使用してバッチでWordの空白の段落を削除する方法

##テストドキュメント、期待される目標ドキュメントの効果

テストに使用されたWord文書を以下のように示します。含まれている空白の段落は、記事の全体的なレイアウトと美的な効果に影響を与えます。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/d5b7da9b-03c9-8adc-3428-77c739d12e2a.png)
**目標ドキュメントの効果**
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/200bae8c-205e-0fc7-6d70-462bd212eac3.png)
##補助ツール
クラスライブラリを使用する:**[Free Spire.Doc for Java](https://www.e-iceblue.com/Download/doc-for-java-free.html)**(無料版)
クラスライブラリjarファイルのインポート(参照用の2つのインポ

元記事を表示

AtCoder001をやった(Java)

AtCoder001をやった。
URL張り付けてて思ったけど、昔ってAtCoderの各問題の末尾は**abcxxx_[数字]**なんですね。。

##[A](https://atcoder.jp/contests/abc001/tasks/abc001_1)
引き算によって積雪を求める問題。
単純に1つ目の入力値から2つ目の入力値をひいてあげればよい

“`
import java.util.*;

public class Main {
public static void main(String[] args) throws Exception {
// Your code here!
Scanner scan = new Scanner(System.in);
ArrayList list = new ArrayList();

while (scan.hasNextLine()) {
String str = scan.nextLin

元記事を表示

【Java】クラス変数につけるprivate static finalについて

この記事は、[シアトルコンサルティング株式会社 Advent Calendar](https://qiita.com/advent-calendar/2021/seattleconsulting) 2021の14日目の記事です。

こんにちは、シアトルコンサルティングの 羽田野 と申します。
この度、弊社 シアトルコンサルティング株式会社 でAdvent Calendarに参加することになりました。

TeamTech Move the WorldをMissionに掲げ、日々全力で業務に取り組んでおります!
少しでも興味を持って頂けたら下記のサイトを覗いてみてください!

コーポレートサイト

ホーム


Wantedly
https://www.wantedly.com/companies/seattleconsulting
よろしくお願い致します!

## はじめに ~クラス内の定数にstaticいるの?~

今まで何も考えずにJavaのクラス定数の修飾子をprivate static finalとしていたけど、
クラス内

元記事を表示

【Android】ストレージ系を簡単にまとめる

株式会社パーソンリンクアドベントカレンダー14日目です!?
本日12/14は、南極の日だそうです。
> 1911(明治44)年のこの日、ノルウェーの探検家・アムンゼンと4人の隊員が人類で初めて南極点に到達した。
よろしくお願いします。

## はじめに
Anroidアプリでファイルや画像を保存する時に、
保存ディレクトリを取得することがあるのですが、どこに保存すれば良いのか、どんな違いがあるのか、すごくややこしいので簡潔にまとめます。

## その前に
Androidはメジャーバージョンが年に1回上がるらしいです。
Android9.0からAndroid10.0へ みたいな
バージョンが上がると非推奨になるメソッドや処理が当然ながら出てきますが、
今回は非推奨になっているものも含んで紹介します。
スマホ業界は、プライバシーを守るため、セキュリティの向上のために、バージョンを上げて対応していきますが、アプリ開発者はその対応に必死です。
→場合によってはこれに対応しないとリリースできないよーってなるみたいです。

## 内部ストレージ系
端末ストレージに保存する内部ストレージ系
Andr

元記事を表示

jOOλ で Java の Stream 記述は楽になるよ!(ものぐさな人向けな Stream ライブラリ)

## jOOλ とは
jOOQ シリーズの一部として提供されている
Java の lambda や Stream まわりを使いやすく+強化してくれるライブラリ
jOOQ とは独立して単体で利用可能

ちなみに jOOλ の発音は[公式によると](https://www.jooq.org/how-to-pronounce-jooq)

| Product | Pronunciation | Sounds like |
|:-:|:-:|:-:|
| jOOλ | dʒuːəl | jewel (although some people also call it jOO-lambda) |

だそうです

## jOOλ の概要
https://github.com/jOOQ/jOOL
https://www.baeldung.com/jool

## jOOλ の構成
– org.jooq.lambda.function → Function を 1~16 用意
Java は Function, BiFunction だけ
– org.jooq.lambda.tuple

元記事を表示

【java】スレッドセーフではないHashMap

#概要
以前マルチスレッド環境における「java.util.HashMap」に対し、複数のアプリがアクセスした際、応答が帰ってこなかっり、HashMapの値が入れ替るなどの事象がありました。
その原因や対応など備忘録的に以下を記載しようと思います。

#原因
とても単純で、「java.util.HashMap」は複数のスレッドから同時にputやgetが実行されると何が応答されるか保障されないことを理解していなかったり、排他制御をしないで使用していたからです。
この事象について調べてみると、昔からいろいろなサイトに記載されていることがわかります。

**■何が応答されるかわからない**
どうやらHashMap.putを実行すると、HashMap内のデータ構造が再構築されるみたいです。
この最中にgetが実行されると、指定されたキー情報を元に対象を検索しに行きますが、再構築中のため延々と検索したりして何を応答するのか予想がつかないみたいです。
これは、よく言われるputとgetが同時実行された際に起こる、無限ループやデータ構造が破壊される事象です。

**■HashMapの値が入れ替る**

元記事を表示

defaultString

# defaultString
**変換対象の文字列がNULLの場合、空文字に変換する。**

nullがわたる可能性がある箇所で、空文字を渡したかったので以下のように実装していたのですが、こういったメソッドがあるということを知ったので投稿します。
以下自分が書いた感じのコード

“`java
while (rs.next()) {
String number = “”;
String cumulative = “”;
String sNumber = “”;
String sCumulative = “”;
String nNumber = “”;
String nCumulative = “”;

cumulative = rs.getString(“TOTALCUMULATIVE”);
sNumber = rs.getStrin

元記事を表示

OTHERカテゴリの最新記事