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

JAVA関連のことを調べてみた2021年10月24日
目次

JUnit5で環境変数が指定されていない場合にテストを実行しないようにする

“EnabledIfEnvironmentVariable“アノテーションをクラスまたはメソッドに付与する。複数の環境変数が必要な場合は“EnabledIfEnvironmentVariables“を使用する。

“`java
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables;

@EnabledIfEnvironmentVariables({
@EnabledIfEnvironmentVariable(named = “HOGE”, matches = “.*”),
@EnabledIfEnvironmentVariable(named = “FUGA”, matches = “.*”)
})
public class SampleTests {
“`

Visual Studio Codeの場合は“settings.json“に

元記事を表示

[Kotlin] when式の表現力

Javaから派生した言語であるKotlinには、Javaのswitch 〜 case文の後継としてwhen式 (when expression) が用意されています。switch 〜 caseから重要な点が変更されていて単純比較はできないものの、表現力が増して読みやすく書ける場面が増えたといってよいと思います。Rubyのcase 〜 when式などよりも使える表現が多くなっています。

Kotlinではwhenは文でなく式として使えます。つまり値を返させることができます。もちろん、あえて式として使わず文として自由に使うこともできます。

本記事の対象は Kotlin v1.5 以上のバージョンです。本記事のコードは Kotlin v1.5.31 で検証しています。

## 引数ありwhen式

以下の引数ありwhen式の記述例は、`->` の左辺に `value` に対する条件を、右辺に条件に合致した場合の値(式、もしくは処理)を書いています。

“`kotlin
fun printKindOf(value: Number) {
println(
when (

元記事を表示

HerokuにSpring Bootアプリをデプロイするときにハマったことのまとめ

Herokuに初めてSpring Bootアプリをデプロイしたときにハマったことと、どうしたら解決したかをまとめておきます。一般論については[公式サイト](https://devcenter.heroku.com/ja/articles/deploying-spring-boot-apps-to-heroku)や多くの優れた記事が既にあるので、この記事では私がハマったときの状況や表示されたエラーメッセージ等と、それをどう解決したかを一般化せずそのまま書いていきます。同じ状況にある人の参考になれば幸いです。
#筆者の環境
openjdk version “11.0.2” 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
javac 11.0.2
Apache Maven 3.8.2
#Exception in thread “main” java.lang.UnsupportedClassVersio

元記事を表示

brainfuckインタプリタをJavaで実装

間違いがあったら指摘をお願いいたします。
GUI部分に関してはやっつけなので気にしないで…

“`Java
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

static int[] array = new int[30000];
static int ptr;
static ArrayList loopPtr = new ArrayList<>();

public static void main(String[] args) throws Exception {

JLabel outLabel = new JLabel();
JFrame frame = new JFrame(“out”);
frame.setSize(new Dimension(500, 500));
fram

元記事を表示

(Java)標準出力から二次元配列で受け取る方法

#(Java)標準出力から二次元配列で受け取る方法

####inputがint型の場合

例:
2(二次元配列の行数を指定)
600 200 200 400
900 800 400 500

“`java
//スキャナークラスのロード
Scanner scan = new Scanner(System.in);
//二次元配列の行数を取得
int count = scan.nextInt();
//二次元配列の行数を作成(配列の要素数は例に合わせて記載)
int[][] element = new int[count][4];

// トークン取得、二次元配列へ格納
for (int i = 0; i < count; i++) { element[i] = new int[4]; for (int j = 0; j < 4; j++) { element[i][j] = scan.nextInt(); } } ``` ####inputがString型の場合 例: XXOXO OXOXX OOOOO OXOX. XOXXO ```java //スキャナークラスのロ

元記事を表示

【初心者向け】SpringBootにおける単体テストの基本事項

# 【初心者向け】SpringBootにおける単体テストの基本事項
最近になってやっと単体テストの基本的な考え方・書き方がわかってきた(当社比)のでいったん自分なりにまとめようと思います。
以下の項目について簡単にまとめます。これらの項目を知っていれば、もちろん状況によって追加で調べることは必要ですが、特殊なケースを除いて単体テストの作成にはあまり困らないと思います。
以下のリンクにコードを残しておきます。
https://github.com/Shukupon/TestTemplate

– クラスの単位
– モック化
– コントローラークラスのテスト
– リポジトリクラスのテスト

## 前提条件
– Java11
– SpringBoot 2.5.6
– Junit5
– H2
– MyBatis
– REST API

## クラスの単位
単体テストを作成する単位は基本的に1つのクラスに対して1つのテストクラスです。
基本的にというのは、メソッド内の処理が適用されるプロファイルの内容によって分岐するため、プロファイルの数だけテストクラスを作った方が便利な場合などがあり得るため

元記事を表示

Couchbase Server Java SDK解説:分散トランザクション〜トランザクションライフサイクル

## はじめに

Couchbase Serverの分散トランザクションにおけるトランザクションライフサイクルは、基本的にRDB/SQLと同様のものとして理解することができますが、アプリケーション開発において利用するにあたって、独自の考慮点もあります。

– Couchbase Serverにおけるトランザクションは、クラスターへの処理リクエスト実行レベルで選択することのできるオプションです。つまり、アプリケーションには、トランザクションアクターと非トランザクションアクターが存在します。

– また、このことを別の視点から言い換えると、Couchbase Serverにおけるトランザクションは、SDK/クライアントが主体となって実現される機能であるといえます(中央集権的なプロセスは存在せず、そこから起因する性能影響もありません)。

## トランザクションライフサイクル

### トランザクションの初期化

`Transactions`オブジェクトの構築により、バックグラウンドプロセスが自動的に実行され、スレッドプールを含むいくつかのリソースが使用されます。
そのため、アプリケーション

元記事を表示

あったらいいなと思っていたスキルマップアプリをVueとGoで作ってみた

# 作ってみたもの
作ったWebアプリは [Graphyee](https://graphyee.com) と名付けました。
技術と技術は関連しているものなので、「スキルマップをグラフ構造で表現できたら分かりやすくて面白いかな」と思いついたのが経緯です。
まだβ版としていますが、一旦使える感じになったのでノリと勢いで公開してみました。

こんな感じで [サンプル](https://graphyee.com/sample/1) は誰でも使えます。

:::note warn
サンプルは実績を入力しても保存できないのでご注意下さい。
:::

![sample.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2201222/57ea423b-20f5-3dcf-8370-b8c19134a8d5.gif)

ユーザ認証すると、より細かい [スキルマップ](https://graphyee.com/graph/1) が使えます。

:::note info
ユーザ認証していただければ、入力した実績が

元記事を表示

Couchbase Server Java SDK解説:分散トランザクション〜ログとトレース

## はじめに

Couchbase Serverの分散トランザクションライブラリーにおける、ログとトレースについて、解説します。

## ログ

トラブルシューティングを支援するために、各トランザクションはログエントリのリストを維持します。そして、次のようにエラー発生時にログに記録できます。

同期APIの場合:

“`JAVA
} catch (TransactionCommitAmbiguous e) {
// The application will of course want to use its own logging rather
// than System.err
System.err.println(“Transaction possibly committed”);

for (LogDefer err : e.result().log().logs()) {
System.err.println(err.toString());
}
} catch (TransactionFailed e) {

元記事を表示

Couchbase Server Java SDK解説:分散トランザクション 〜N1QLクエリ

## N1QLクエリ
Couchbase Server 7.0以降、N1QLクエリはトランザクションラムダ内で使用できるようになりました。N1QLクエリとKey-Value操作とを同じラムダ内で組み合わせて利用することができます。

## トランザクションの開始
Couchbase Serverでは、SDK利用に限らずに見た場合、トランザクションを開始するには、トランザクションライブラリーを使用する方法と、Queryサービスへのリクエストとして、`BEGIN TRANSACTION`を使用する方法の2つがあります。後者の方法は、CLI、REST API、またはWebコンソールUIのクエリワークベンチを使用する場合を想定されています。アプリケーションでは、トランザクションライブラリーを使用します。トランザクションライブラリーは、下記の利点を持ちます。

– エラーと再試行を自動的に処理します。
– これにより、Key-Value操作とN1QLクエリを自由に組み合わせることができます。
– 自動的に`BEGIN TRANSACTION`、`END TRANSACTION`、`COMMIT`

元記事を表示

【logback】TimeBasedRollingPolicy以外とprudentモードを共存させ、単一ログファイルに複数フォーマットのメッセージを出力する(タイトルに偽りあり)

なぜこの記事を書くに至ったかの経緯をまず書いているので
どう対応したかは最初に***[ここ](https://qiita.com/o________o/items/c17a63f8d82d8dcb6557#%E6%9C%AC%E9%A1%8Ctimebasedrollingpolicy%E4%BB%A5%E5%A4%96%E3%81%A8prudent%E3%83%A2%E3%83%BC%E3%83%89%E3%82%92%E5%85%B1%E5%AD%98%E3%81%95%E3%81%9B%E3%82%8B)***から読んで見てください。

# ことの始まり

log4jの設定をlogbackに移行していたら以下のような設定に出会った。

– 2つファイルアペンダーがあるが、layout以外は全て同じ設定
– それぞれのアペンダーは異なるロガーがrefで参照している
 
つまり目的は

– `1つのログファイル`に`異なるロガーから異なるフォーマットのメッセージ`を出力したい
– バックアップファイル名は`ログファイル名.n`の連番でつけたい([log4j.RollingFileA

元記事を表示

Javaプロジェクトの簡単な記録(各階層コードの作成)

###各階層コードの作成

####1.Controller:対外暴露のAPIインターフェース
-クラスコメント
-@RertController
-@Request Mapping(「xxxx」)
-方法/属性コメント
-@Autowired
-@PreAuthorze
-@GetMapping
-@PostMapping
-@PutMapping
-@DeleteMapping
-Swaggerコメント
####2.Service:システムで他の種類の呼び出しのための方法は、自動注入によって使用されます。
####3.Domain:エンティティ類(一般的にはデータベーステーブル構造に対応する必要があります)
-Lombookプラグイン
#####改造前
“`
package comp.ruoyi.junnior.domain;

import org.apache.com mmons.lang.3 builder.ToStringBuider;

import org.apache.com mmons.lang.3 builder.ToStering Style;

import

元記事を表示

Couchbase Server Java SDK解説:分散トランザクション〜クリーンアッププロセス(設定と監視)

## はじめに

下記の記事で触れたように、Couchbase Server Java SDKには、分散トランザクションを実現するにあたり、クリーンアップメカニズムが含まれます。

https://qiita.com/yoshiyuki_kono/items/2d428b16b224b8c01239

まず、上記の記事でも触れた基本的な内容を振り返るところから始めます。

## クリーンアップの基本
失敗したトランザクションが、他のトランザクションを無期限にブロックしないようにするため、Couchbase SDKは、「クリーンアップ」と呼ばれるメカニズムを提供します。

トランザクションは、失敗が発生したときに、まず自分自身でクリーンアップしようとします。

### 非同期クリーンアップ
アプリケーションのクラッシュなどの原因で、そのトランザクション自身によってクリーンアップされなかった、「ロスト」トランザクションが作成される状況があります。

そのためクリーンアップメカニズムには、`Transaction`オブジェクトの作成時に開始される非同期クリーンアップのためのバックグラウンドプ

元記事を表示

HelloWorldと慣習(メソッド名とクラス名)

## はじめに
自分を含め、初学者に向けて書きます。

## 記事の構成
– JavaでHelloWorldの表示
– Javaにおけるクラスやメソッドの名付け慣習

## HelloWorld

“`java
class HelloWorld{
public static void main(String[] args){
System.out.println(“HelloWorld”);
}
}
“`

1. 以上のコードをファイル名「HelloWorld.java」として保存。
1. コマンドプロンプトを立ちあげ上記ファイルを保存したディレクトリに移動
1. コンパイル→javac ファイル名
– ファイル名では拡張子(.java)も忘れずに
1. 実行→java ファイル名
– ここでのファイル名はコンパイル後の.classのもので、拡張子はいらない

“`
cd ディレクトリ名 //保存したディレクトリへ移動
javac HelloWorld.java //コンパイル
java HelloWorld

元記事を表示

Java初学者が感じたSpring Bootと他の言語との違い~ORM~

### 今回のお題
今回は、私が感じたSpring Bootと他の言語との違いについて書きます。

メインテーマはORMですね。

タイトルにある通り、私はJava自体の初学者ですが、同じようにJavaの学習を始めたばかりの方、あるいは今後自分が他の言語の学習を始める際の参考になればという思いで残しておきます。
### 筆者の学習歴
プログラミング学習歴は4ヶ月程度。
スクールではRuby on Railsを、独学ではPHP Laravelを学習し、それぞれアプリらしきものの作成経験はあり。

Javaについては1ヶ月ほど前から学習を開始。
現在は書籍を見ながらSpring Bootアプリの作成手順を学習中。
### 本記事のターゲット
冒頭でも少し触れましたが、本記事は主に「既に学習済みの言語とSpring Bootの違いに戸惑っている方」向けに作成しました。

書籍やネットなどで学習をしていて、「なぜこのようなやり方をしなければならないのかが分からない。」、「他の(自分の知っている)言語と同じような手順でやってはダメなのか。」と言った疑問が湧くことがあるかと思いますが、それらの解決

元記事を表示

【更新/解決】Android12にしたら、FLAG_IMMUTABLEまたはFLAG_MUTABLEエラーでアプリが起動しない

#概要
2021/10/20にGoogle Pixel系(Pixel3以降)にAndroid12(Android S、 API31)が配布されたので遅ればせながら、自作アプリの動作確認をしてみた。
が、、、、起動さえしないという恐怖の状況に陥ったことから、原因を調査してみる。

#エラーの内容
手持ちのPixel3 XLにAndroid12をインストールして、開発者モードを有効にして、エラー原因を見ていく。
そうすると、どうもこんなエラーで落ちているようなのだ。

“`
E/AndroidRuntime: FATAL EXCEPTION: pool-16-thread-1
Process: com.sekai.tsukuru.app.quickmatome, PID: 25032
java.lang.IllegalArgumentException: com.sekai.tsukuru.app.quickmatome: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or

元記事を表示

SpringBootのGradleでWebjarsを利用しBootstrapを使う方法

#はじめに
今回は、SpringBootのGradleプロジェクトでWebjarsを利用してBootstrapを使用する方法を書いていきます。

MavenでのWebjarsを用いてBootstrapのバージョン管理をする記事が多くあったので、Gradleを使用している人の参考になればいいかなと思います。

#build.gradle

“`java
dependencies {
implementation(‘org.webjars:jquery:3.5.1’)
implementation(‘org.webjars:bootstrap:4.5.3’)
implementation(‘org.webjars:webjars-locator:0.40’)
}
“`
`dependenciesタグ`に上記3つをimplementationしてあげるだけです。

あとは、Bootstrapを使いたいHTMLファイルで必要な記述をするだけです。

##html

“`html
【Kotlin】value classをJava Reflectionのみでインスタンス化する

# TL;DR
– `value class`はインスタンス化のために幾つかの`static`メソッドを生成する
– 生成されたメソッドを`constructor-impl` -> `box-impl`の順で呼び出すことで、`value class`を`Java Reflection`のみでインスタンス化できる
– 付与したアノテーションは`impl`メソッドにも付与される

# やること
以下のように、`init`ブロックに入力チェックが有るような`value class`について、`Class`を取得できている状況から、`Java Reflection`のみで、入力チェックを機能させた上でインスタンス化する方法を紹介します[^with-reflect]。

“`kotlin
@JvmInline
value class Value(val value: Int) {
init { if (value == 1) throw TestErr }
}

object TestErr : RuntimeException(“試験用エラー”)
“`

[^wit

元記事を表示

BufferedReaderはJavaでどのくらいの速さで行を読み取ることができますか?

[前回の投稿](https://qiita.com/chenyh/items/ed86364a8bdb6c635a4d)で、C++のgetline関数がテキストファイルの行をどれだけ速く実行できるかを尋ねました。答えは約2GB / sで、確かに1 GB / sを超えていました。これは、いくつかの最高のディスクドライブやネットワーク接続よりも低速です。ソフトウェアが行に「ただ」アクセスするだけでよいことはめったにないことを考慮に入れると、ディスクやネットワークにバインドされるのではなく、テキストファイルの処理がプロセッサにバインドされるシステムを簡単に構築できます。

Javaはどうですか?Javaでは、テキストファイルの行にアクセスする標準的な方法は、BufferedReaderを使用することです。システムコールを回避するために、多くのテキスト行を含む大きな文字列を作成してから、文字列の長さを記録するだけの非常に単純な処理関数を呼び出します…

“`java
StringReader fr = new StringReader(data);
BufferedReader bf = n

元記事を表示

Couchbase Lite機能解説:競合解決概要

## はじめに

本稿では、Couchbase Liteを用いた開発における競合解決の概要を整理します。

実際の実装における、注意点などは、参考情報に掲載したドキュメントなどを参照してください。

## 競合の原因

アプリケーション間で、データが同期される場合、複数のアプリケーションによって同じドキュメントに変更が加えられた場合、ドキュメントの競合が発生する可能性があります。

競合は、次のいずれかのイベントの後に発生する可能性があります。

– レプリケーションプロセスが、ドキュメントの変更を保存: この場合、最も大きいリビジョンIDを持つ変更が優先されます。
– アプリケーションが、ドキュメントの変更を保存: この場合、最後の書き込みが優先されます。

競合発生時、削除操作は常に勝ちます。したがって、上記のいずれの場合でも、変更の1つが削除であった場合、ドキュメントは削除されます。

## レプリケーション時の競合

競合は、レプリケーションプロセスが変更を伝播する場合に発生する可能性があります。

### 自動競合解決

Couchbase Liteは、次のルール

元記事を表示

OTHERカテゴリの最新記事