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

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

Spring Bootアプリケーションのコンテナ化を試してみた

この記事は[ZOZO Advent Calendar 2021](https://qiita.com/advent-calendar/2021/zozo) #5 23日目の記事になります。

# はじめに
Spring Bootアプリケーションのコンテナ化をしてみました。

またSpring BootではSpring Boot2.3からCloud Native Buildpacksに対応しているため、
Dockerfileを使ったパターンとCloud Native Buildpacksの2パターンでコンテナ化を行ってみました。

# コンテナとは
仮想化技術の一つでアプリケーションの実行環境も含めてコンテナとすることで
環境に依存せずアプリケーションを実行することができる技術です。

# Dockerとは
コンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンプラットフォームです。

# Cloud Native Buildpacksとは
Cloud Native Buildpacksはアプリケーションのソースコードから任意のクラウドで実行できるイメージに変換してく

元記事を表示

[Java]ArrayListとLinkedListの違いについて

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

##はじめに
今回はJavaのコレクションフレームワークであるListについて調べてみました。
その中でもArrayListとLinkedListのそれぞれの特徴について説明します。

##ゴール
ArrayListとLinkedListの違いについて理解する。

##はじめに
JavaのコレクションフレームワークであるListについて説明します。

## Listクラス
java.util.ArrayList
・配列型のリスト
・指定位置の要素の取得が速い
・要素の挿入、削除が遅い

java.util.LinkedList
・線形リスト型のリスト
・指定位置の要素の取得が遅い
・要素の挿入、削除が速い

## ArrayList
Listインタフェースを実装したコレ

元記事を表示

Log4Shellデモ(実証〜検出〜修正)を公開しました

#Log4Shellデモ(実証〜検出〜修正)
世間を騒がせている重大な脆弱性Log4Shellを、実際に体験して、修正するところまでを見ることができる動画を公開しました。ぜひご覧ください。

#参考リンク
* [記事『Log4Shellの脆弱性が公開されました:Version 2.17.0にアップデートしてLog4j RCEを防ぐ』] (https://qiita.com/SnykSec/items/fccc10bd25cd5de0b56f)
* [Proof of Concept 用アプリ

元記事を表示

AtCoder Beginner Contest 009 をやった(Java)

AtCoder Beginner Contest 009をやった。

##[A](https://atcoder.jp/contests/abc009/tasks/abc009_1)
3個の段ボールだとして両手で持った時何回往復が必要かを実装してください

“`Java
import java.util.*;

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

if(N == 1 || N == 2){
System.out.println(1);
} else {
if(N % 2 == 0){
System.out.prin

元記事を表示

Stream API の裏を覗いてみた

この記事は [セゾン情報システムズ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/sisco) の 23 日目の記事です。

※ 注意:本記事は **Stream API の使い方を説明するものではありません**。

# Java の Stream API を使ってますか?

Java 開発者のみなさん、Stream API を使っていますか?もちろん、使っていますよね。(反論は認めません)

Stream API をうまく使うと表現力の豊かなソースコードを書けるから、 Java 開発者なら学ばない理由はないでしょう。

もし Stream API の使い方にまだ自信持っていないなら、Java 8 以降を対象とする入門書籍なら必ず取り上げているので、ぜひご自分の好みに合う一冊を見つけて熟読して身につけましょう。

そんな普段何気になく使っている Stream API ですが、今日はその裏にあるものを覗いてみたいと思います。

なお、この記事では以下のような用語の使い分けを意識しています。

* `Stream`

元記事を表示

Java 例外を投げ直せ

[Javaのカレンダー | Advent Calendar 2021](https://qiita.com/advent-calendar/2021/java)の14日目の記事です

※ 北斗の拳のようなタイトルになってしまって申し訳ありません

# 概要

`@SneakyThrows` を使って検査例外(チェック例外)を非検査例外(非チェック例外)?に投げ直すやり方
Stream API では、検査例外は try – catch で握る必要があるので、非検査例外にすることでコードをシンプルに保ちます

## 参考

– [@SneakyThrows](https://projectlombok.org/features/SneakyThrows)
– [Lombokの@SneakyThrowsを使うとSpring Bootの@Transactionalはロールバックされるのか調べる](https://www.greptips.com/posts/1320/)
– [jOOQ/jOOL: jOOλ](https://github.com/jOOQ/jOOL)

# やり方

## b

元記事を表示

JavaのMapについて

# 概要

[JavaのCollections Framework](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-reference.html) は多くの便利なMap実装を提供しています。

ここではそれらについて簡単に紹介していきます。

## Collections Framework におけるMapの全容

Collections Frameworkで提供しているMap系のインターフェース、抽象クラス、具象クラスの全容は以下のようです。

“`plantuml
interface Map {
}
abstract class AbstractMap implements Map {
}
interface SortedMap extends Map {
}

interface NavigableMap extends SortedMap {
}

interface ConcurrentMap extends Map {
}
interface Co

元記事を表示

[Spring]Doma2で複数データソース設定

## やること
内部DBだけでなく、外部DBにも接続したいよーってときありますよね
SpringBootとDoma2で複数データソースに接続していきます

## 環境
Java 11
Spring Boot 2.6.1
Doma 2.50.0
MySQL 8.0.25
Gradle 2.24

## 実装

### データベース接続設定

“`application.properties
# DB1
datasource.one.jdbcUrl=jdbc:mysql://sample1.com:3306/sample1?autoReconnect=true&useSSL=false
datasource.one.username=sample
datasource.one.password=sample
# DB2
datasource.two.jdbcUrl=jdbc:mysql://sample2.com:3306/sample2?autoReconnect=true&useSSL=false
datasource.two.username=sample
datasource.t

元記事を表示

Javaを使用してExcel画像を追加、読み取り、削除する方法

##背景
この記事では、JavaプログラムでExcelテーブルに画像を追加する方法を紹介します。画像を追加するときは、画像のサイズ、位置、回転、ハイパーリンク、オプションのテキストなどを設定できます。また、エクセルテーブル。

ツール:無料のSpire.XLS for Java(無料版)
注:パッケージを公式Webサイトから**[ダウンロード](https://www.e-iceblue.com/Download/xls-for-java-free.html)**して解凍し、libフォルダー内のjarファイルをjavaプログラムにインポートするか、Mavenウェアハウスからダウンロードしてインポートすることができます。

**Jarのインポート効果:**
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/e8026e17-bdfe-5a71-db85-84d8c73f1ca6.png)

##Javaコード一覧
###画像を追加する
“`
import com.spire.xls.

元記事を表示

CVE-2021-44228 の Log4j 1.x への影響を調査しました

[Apache Log4j Security Vulnerabilities](https://logging.apache.org/log4j/2.x/security.html) で [CVE-2021-44228](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228) の Log4j 1.x への影響について追記がありました。脆弱性の影響があるかどうかの確認方法を調査したので、参考情報として掲載します。

Apache Log4j 公式サイトには、次の通り記載されています。

> Log4j 1.x does not have Lookups so the risk is lower. Applications using Log4j 1.x are only vulnerable to this attack when they use JNDI in their configuration. A separate CVE (CVE-2021-4104) has been filed for this vu

元記事を表示

Gradleでコンパイル警告を100件より多く表示する

### 背景

コンパイル警告があまりに多いプロジェクトだと、最初の100件までしか警告内容が出力されない。そもそもコンパイル警告が多い状態で放置していること自体が問題だが、途中で省略させずにすべてを確認したいこともある。

“`
$ ./gradlew clean build
Starting a Gradle Daemon (subsequent builds will be faster)

ノート:一部の入力ファイルは推奨されないAPIを追加使用またはオーバーライドしています。
ノート:入力ファイルの操作のうち、未チェックまたは安全ではないものがあります。
ノート:詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。
警告100個
“`

### 対応方法

`-Xmaxwarns` の値としてすごく大きな値を指定してやることで回避することができる。

“`gradle
compileJava {
sourceCompatibility = 17
targetCompatibility = 1

元記事を表示

AtCoder Beginner Contest 008をやった(Java)

AtCoder Beginner Contest 008をやった。

##[A](https://atcoder.jp/contests/abc008/tasks/abc008_1)
差分を出してあげて、ひと工夫すれば終わります。

“`Java
import java.util.*;

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

int num1 = scan.nextInt();
int num2 = scan.nextInt();
System.out.println((num2 – num1) + 1);

}
}
“`

##[B](https://atcoder.jp/contests/abc008/tasks/abc008_2)

元記事を表示

Spring Bootを使ったWebアプリケーションのテンプレートを社内OSSとして開発・メンテナンス

# 概要

筆者は、Java向けOSSであるSpring Bootを使ったWebアプリケーションのテンプレートプロジェクト(以下、「本テンプレート」と記します)を、日立ソリューションズ内のOSSとして2年半開発・メンテナンスしてきました。

本テンプレートを開発するにあたって、社内ニーズ・メンテナンスコストの低減・ノウハウの実装と展開を実現するためにさまざまなツールを利用し、実装を行いました。本記事では本テンプレートにて実装している内容と各種ツールの活用方法を記します。

# 動機

2年半前、筆者は全社に対してソフトウェア技術の知見の収集と伝達を行う部署に所属していました。特に、社内でもニーズが高かったJavaによるWebアプリケーションの開発について知見を収集・伝達を行うことが主な業務でした。
その業務を通して、社内からお話を伺っていると、以下のようなご意見・ご要望を頂くことが多くありました。

– Javaを使ったWebアプリケーションを開発したいが、数あるOSSのから何を選べばよいか分からない
– [The Twelve-Factor App](https://12factor

元記事を表示

業務システムの画面仕様をコードベースで書けるようにして開発者体験を爆上げした話

# はじめに

* 業務システムの要件定義をする際に、開発者体験を向上させる取り組みとして「Javaのコードで定義し、画面仕様(画面モック)とソースコードのひな形が出力できる」というコンセプトを試したくて、実現するツールを試作しました。
* 注意点として、BtoCのような自由度の高い画面仕様を検討するものではなく、BtoBで業務でのみ利用する用途におけるシステムの画面仕様定義といったシーンに限られる感じです。過度にUI/UXを求める場合は、向いてないと思います。
* このコンセプトが開発者体験をどの程度向上されるのか、実プロジェクトに適用して検証してみた結果を報告します。

# 画面仕様をコードベースで書くとは何か?

業務システムの要件定義において、重要な要素として **「画面仕様を決める」** があります。
いざ、画面仕様を書くとなるとパワーポイントで書いたり、エクセルで書いたり、最近だと、詳しくないですが、Adobe XD とかで書くのでしょうか?

パワーポイントやエクセルでの限界は、差分管理(把握)やコンポーネントの再利用には難があります。一方、Adobe XD はこの点

元記事を表示

JavaGold一夜漬けチャレンジ

## この記事について
**JavaGold取りたいな…でも試験、明日なんだよな…**
一夜漬けでも取れるのかな…って人が不安になって調べたりすること、あると思います。
私がそうでした:sweat_drops:
申込日は自分で決められるのに…24時間前までなら試験日時の変更可能なのに…

**そうです。予約日時の変更が間に合うかもしれません!**
Java Programmer IIの試験日時変更は、予約した試験日時の24時間前までできますよ。
もしまだ間に合う方は予約日時を変更し、気合を入れて勉強してから受けた方が安心でしょう。

この記事はもう間に合わない、あるいはOracle2回目受講無料キャンペーンなどでとりあえず受ける!
そんな方に向けて書きます。
しかしながら、当然落ちても補償はできませんので…。。

**なに?再受講無料キャンペーンを知らない?**
ついでに記載します。

## 再受講無料キャンペーンについて
毎年、Oracleはオラクル認定資格試験の再受講無料キャンペーンをしています。[^1]

12月から始まり翌年5月いっぱい。
くわしくは[検索](https://w

元記事を表示

今ホットなLog4j脆弱性対応をきっかけにJava版LambdaをDocker版Lambdaへ急遽構成変更した2021年の末

この記事は [マイナビ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/mynavi) の22日目の記事です。

そろそろクリスマスが近づいて参りました。
只今12月20日の23:21です。明日の昼12時までにこの記事を書き上げる必要があります。(いつもギリギリや・・)

今回は、2021年末に世間を騒がせている大変ホットなLog4J脆弱性対応をきっかけに、今更ながらDocker版Lambdaを試してみた!という記事を書こうと思います。

実は他のネタを書こうと思っていたのですが、Log4j脆弱性関連の対応により、こんなタイミングで平日だけでなく土日も溶かしてしまったためLog4J対応しか用意できる記事がないや!ってこととなりこのネタにしました!!わーいわーい :laughing:

# お話の概要
– 技術キーワード
– aws lambda(Java)
– aws lambda(Docker)
– 脆弱性発覚からLambdaのDocker化までの流れ
– Log4j脆弱性により、本L

元記事を表示

Javaでヒープサイズ測定 JUnit5編

[Javaのカレンダー | Advent Calendar 2021](https://qiita.com/advent-calendar/2021/java)の13日目の記事です

# 概要

Javaの単体テストでヒープ(メモリ)を簡単に測定したいときに使える方法

## 参考

– [quick-perf/quickperf: QuickPerf is a testing library for Java to quickly evaluate and improve some performance-related properties](https://github.com/quick-perf/quickperf)
– [Quickly remove some big performance bottlenecks with QuickPerf by Jean Bisutti](https://www.youtube.com/watch?v=cEkoJL09kKI)

# やり方

正直、以下のページを見たまんま

[JUnit 5・quick-perf / doc Wik

元記事を表示

Java Silver SE11 1章

# Java Silver SE11 1章
[黒本](https://www.amazon.co.jp/gp/product/4295007625/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)をもとに学んだことをアウトプットしていきます。
主に問題を解いていて、間違えた箇所もしくは知らなかった内容になります。

## package
コンパイラやJVMはクラス名の重複を防ぐために、「完全修飾クラス名」で取り扱う。
(名前空間を提供する)

完全修飾クラス名(full qualified class name) FQCN は先頭行に記述する。
`package パッケージ名.クラス名;`

* パッケージ単位でアクセス制御が可能になる
* 公開、非公開に分けることができる
* クラスは必ず何らかのパッケージに属する
* (記載がない場合、無名パッケージに属するものと解釈される)
* ソースの先頭行に記述する
* コメントは記述可能
* 無名パッケージに属するクラスは、
同じく無名パッケージに属するクラスからしかアクセスするこ

元記事を表示

Javaで使用すべきでないモジュール

Javaではエラーも出ずにちゃんと動作するが、パフォーマンスやセキュリティの観点から使用すべきでないモジュールが存在します。
今回は非推奨のモジュールとそれに代わるものを紹介します。

## java.util.Date/java.util.Calendar
Java8以降、java.util.Dateとjava.util.Calendarの使用は非推奨となっています。
代わりに、java.time.LocalDateやjava.time.LocalDateTimeなどを利用すべきです。

## SimpleDateFormat
SimpleDateFormatはnewでインスタンス化が必要。また、スレッドセーフではありません。
代わりに、DateTimeFormatterの利用が推奨されます。

## 繰り返し処理中の+演算子による文字列連結
繰り返し処理の中ではStringBuilderを利用して文字列を連結するべきです。
+演算子による連結と比べると、連結回数が多い程、StringBuilderのほうが処理が早くパフォーマンスが良いので、
こちらを利用するべきです。

元記事を表示

JavaでABC232(C問題まで)

ABC232の問題を解いたので、解き方とコードを投稿します。
使用言語はJavaです。

# A問題(QQ solver)
https://atcoder.jp/contests/abc232/tasks/abc232_a

#### 方針
文字列の先頭と末尾の文字を取り出して、それぞれ数値に変換してから計算します。

#### コード
 標準入力と出力は以下の記事を参考にしています。

https://qiita.com/p_shiki37/items/a0f6aac33bf60f5f65e4

“`Main.java
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.NoSuchElementException;

public class Main {
public static void main(String[]

元記事を表示

OTHERカテゴリの最新記事