JAVA関連のことを調べてみた2020年03月26日

JAVA関連のことを調べてみた2020年03月26日

Java EE(Jakarta EE)で「私はロボットではありません」を作る

# 0.環境

### 今回のこの記事を書いた環境
OS…Windows 10
IDE…Eclipse 2020-3
Java…Open JDK 14
サーブレットコンテナ…Apache Tomcat 9.0.33

# 1.reCAPTCHAを作成する
###
まずreCAPTCHAのサイトにアクセスします。
[reCAPTCHA](rhttps://www.google.com/recaptcha/)

+ボタンで作成。

自分のサイトの情報を入力していきます。

![SS1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607960/b65f27d3-cec4-0416-8fb7-6d908b02be51.png)

ラベルにはわかりやすい名前を入力します。

reCAPTCHA タイプは、「私はロボットではありません」をやりたいのでreCAPTCHA v2を選択。
すると、「私はロボットではありません」チェックボックスというのが出てきますので選択されていることを確認します。

元記事を表示

一対多によるリレーション

自分用の備忘録も兼ねて実装にあたり苦労したので投稿します。

#概要
* レストラン(親)は複数のメニュー(子)を持つ関係
* Java、SpringBootにて一対多によるリレーションを関係するエンティティに記述
* 親テーブル(@OneToMany)、子テーブル(@ManyToOne)使用

#親テーブル

“`RestaurantsEntity.java
@Entity
@Table(name=”restaurants”)
public class RestaurantsEntity {

//各フィールド変数記述 略……

@OneToMany(mappedBy=”restaurantId”)
private List restaurantMenuEntityList;

//下記setter/getter 略……

}
“`
「一対多」の一側のフィールドには、多側のエンティティのコレクションを保持させてます(private List<RestaurantMenuEntity> restaurantMenu

元記事を表示

Javaのデザインパターン

# 目次

1. デザインパターンの説明 
1. Facadeパターン
2. Strategyパターン
3. デザインパターンまとめ
4. 参考文献

– – –

# デザインパターン(概要)

– GoFという頭のいい人が考えた全23パターン
– 対象はオブジェクト指向言語
– 他にもいくつかの種類がある
– Javaの機能を活用して(主に)拡張性の向上を図っている
– 継承
– ポリモーフィズム
– カプセル化など
– 優秀なベテランはこう考えている!という考え方集
– 具体的な実装方法ではない
– 考え方を理解して自分のプログラムに応用


#デザインパターン(効果的な使い方)

– 考え方を応用して自分のソースに反映する
– ≠パターンに合わせて実装する
– 効果が期待できる場合のみ使う
– ≠可能な限り適用する
– ≠デザインパターンの効力を妄信する
– 無理に使うと逆効果
– 状況に合わせて柔軟に適用判断する
– ≠設計時に適用判断をしたのでプログラムに絶対に反映する

元記事を表示

==演算子とeqalsメソッドの違い

どーも、ふぎとです。

今回はちょっとした備忘録。
##==演算子とequalsメソッドとはどう違うのか?
結論を言うと、

「**==演算子は同一性を判定し、
equalsメソッドは同一性及び同値性を判定する**」

という違いがあるそう。

#「同一性の判定」とは
「同じインスタンスであるか否か」ということ。

#「同値性の判定」とは
「インスタンスに格納されている値が同じであ
るか否か」ということ。

例を以下に示します。
##サンプルプログラム

~~~ruby:
public class Example{
public static void main(String[] args){
String s1 = “012”;
String s2 = new StringBuilder(“012”).toString();

if(s1 == s2){
System.out.println(“true”);
}else{
System.out.println(

元記事を表示

ファッ⁉ enumってなんや?

どーも、ふぎとです。

最近はオブジェクト指向の学習を進める日々・・・。
進めるうち、classでもinterfaceでもない、
enumなる型に遭遇。

調べてみると「列挙型」というものだそう。

##列挙型?
列挙型はclassでもinterfaceでもない、「第3のクラス宣言」。
特徴は、**宣言と同時にその型のインスタンスが生成される**
ということ。そしてそれ以降、その型のインスタンスは生
成できず、宣言時に作られたインスタンスしか使えない。
この「間違った値を使えない性質」を「**型の安全性が保証
されている**」という(らしい)。

~~~ruby:
public enum Language{
JAPANESE,
ENGLISH,
CHINESE
}
~~~
↑宣言した時点で、Language型のインスタンス”JAPANESE”,
“ENGLISH”,”CHINESE”が作成される。どんな天才でもこれ
以降Language型のインスタンスを新たに作ることはできない

##使い方
列挙型のインスタンスを使うときは、”(型名).(列挙子=インスタンス名

元記事を表示

java配列

### 宣言
長さ指定は必須

“`java
int[] a; // 初期化しない
int[] a = new int[5]; // 0で初期化
int[][] a = new int[2][3]; // 二次元配列
“`

### 初期化
初期化しない時、初期値0

“`java
int[] a = {1, 2, 3}; // 長さ3
int[][] a = {{1,2},{3,4}}; // 二次元の初期化
f(new int[]{1, 2, 3}); // 関数の引数として by @saka1029
“`

### 長さ
– 属性。関数ではない。
– 長さは変更不可。

“`java
a.length
a[0].length // 二次元の場合
“`

### 代入
– 添え字 0 始まり
– 最大添え字は length – 1
– 超えると「java.lang.ArrayIndexOutOfBoundsException」例外投げられる
– java.util.Arrays.fill(配列, 値) 指定値で配列全体を埋める
– java.util.Arrays.

元記事を表示

AzurePipelinesでMavenプロジェクトのCI

以下の記事の続きで、今回はAzurePipelinesを使ってみます。
https://qiita.com/kasa_le/items/b152f91a61315a2b12b2

# Azure Pipelines
言わずとしれた、MicrosoftのクラウドサービスAzureの中の、Azure DevOpsに含まれるCIになります。
https://azure.microsoft.com/ja-jp/services/devops/

## 特徴
Azure Repos(AzureのGitリポジトリサービス)だけでなく、Githubや汎用Gitとも接続できます(※)。
当然、.NETやC#のプロジェクトのビルド環境が充実していて、Windows開発者は、実質AppVeyorかこちらかの二者択一でしょうね。もっとも、少し前まではAppVeyorしかなかったので、選択肢ができたことは良いことではないでしょうか。
Visual StudioやVisual Studio Codeとの連携やExtensionが充実しているのも流石です。

※ただし、SSH公開鍵方式での接続には非対応で、かつ、

元記事を表示

Springのapplication.propertiesでシステム環境変数を扱う

# はじめに
Spring(Boot)でアプリを作成する際にシステム環境変数から値を取得したい場合がある。
メモ書きも兼ねて取得方法を紹介する。

# どんな時にシステム環境変数を使うか

例えばDBに接続したい場合、`application.properties`には以下のような設定をする必要がある。

“`application.properties
### DB接続設定値 ###
spring.datasource.url=<データベースのURL>
spring.datasource.username=<ユーザー名>
spring.datasource.password=<パスワード>
“`

こういった場合、各設定値をシステム環境変数から取得するようにしておけば、以下のようなメリットが考えられる。

①__環境ごとに設定ファイルを作成する必要が無くなる。__
環境変数を前もって設定しておくか、実行時に設定するようにすれば、同じ設定ファイルを他の環境でも利用することが出来る。
各環境ごとの設定ファイル(例えば、`application-devXX.properties`)を複

元記事を表示

AWS Lambda で Javaを使う ー実装編 – EC2を止める/立ち上げる

##やりたいこと
Lambdaで実行するJavaでEC2を起動・停止する
(↓をJavaで書いてみて、ちょっとだけカスタマイズする。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/)

##目次
・[Eclipse準備編](https://qiita.com/t_ookubo/items/a71a9bd05282bf20e023)
・登録実行編(次回以降)
・実装編 – EC2を止める/立ち上げる(今回)
・実装編 – CloudWatchの引数を確認する

## とりあえずクラス作成
前回Eclipseでサンプルクラスを作成できるようにしたので、
それを使って、入力タイプ「Custom」のLambdaプロジェクトを作る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559813/eb8e09b1-5ac5-5d43-68eb-4c694cff8ea3.png

元記事を表示

JavaアプリをDockerイメージにするならjibを使うと便利だよ

##メリットの多いDocker
コンテナ化技術の一つであるDockerですが、使ってみると数多くのメリットがあります。
実際のメリットについてはネットで検索すると色々出てくるので、この記事ではDockerそのものに関する解説はいたしません。
ただ個人的に強調しておきたいのは、本番環境などへ直接Javaのモジュールやアーカイブなどを配置するようなデプロイしている場合、Dockerイメージをリポジトリにpushするという作業に変えることでたくさんの恩恵を得ることができると思います。

##Dockerの面倒さ
メリットの多いDockerですが面倒な面もあります。
Dockerfileを書かないといけない。書くためのコマンドやベストプラクティスも学習するとなるとそれなりに面倒です。
ローカル開発環境がWindowsの場合にDocker環境を構築するのも面倒です。

##jibが解決
もしDockerコンテナ上で動くアプリケーションがJavaで開発されている場合、Googleが提供している[jib](https://github.com/GoogleContainerTools/jib)を利用

元記事を表示

【Java】日付から差分を算出したい

開始日付、終了日付をもとに処理時間を算出したかった。

“`java:date.java
import java.text.SimpleDateFormat;
import java.util.Date;

public class date {

public static void main(String[] args) {

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy/MM/dd HH:mm:ss”);
Date start = null;
Date end = null;

// Date型に変換
try {
start = sdf.parse(“2020/03/23 12:30:12”);
end = sdf.parse(“2020/03/23 12:31:12”);
} catch (java.text.ParseException e) {
e.printStackTrace();
}

long timeStart = start.getTime();
lo

元記事を表示

spring-batchでメタデータとstepで異なるTransactionManagerを使う

spring-batchで2つ以上のデータソースを使う場合、step定義作成時に“`StepBuilderHelper#transactionManager“`でトランザクションマネージャを指定する。

以下は設定例。

“`java
import java.util.stream.Collectors;
import java.util.stream.IntStream;

import javax.sql.DataSource;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframe

元記事を表示

【Android】 Broadcast Recieverでintentを受け取る

# Broadcast Recieverとは?
– BroadcastReceiver(ブロードキャストレシーバー)とは、ブロードキャストしたインテントを受け取る仕組みのこと
– OSのAndroidシステム側でブロードキャストされるイベント(スクリーンのON/OFFなど)以外でも、自分で作成したアプリでも独自のインテントを生成してブロードキャストできる

# intentとは?
– intentとは、アプリケーションの中の1つ1つの機能のこと。たとえばアプリケーション同士や、アプリケーションとウィジェット、アプリケーションとシステムを橋渡しする仕組みのこと
– BroadcastRecieverを使わずとも、intentだけでも利用が可能で、例えば電話をかけたりカメラを起動することもできる
– BroadcastRecieverでは、例えばアプリをインストールした際などに発生するintentを検知することができます。例えば…
– スクリーンのON/OFFを検知する
– 電池の状態を検知する
– アプリのインストールを検知する
– 振動を検知する 等

#

元記事を表示

【AtCoder Beginner Contest 152 C問題】TLEについてと、printデバッグ位置のコツ

# printデバッグを入れる位置で混乱していませんか?

お久しぶりです。宇宙意志です。

今回はいつものように書き捨てのSeleniumではなく、[ABC152-C](https://atcoder.jp/contests/abc152/tasks/abc152_c)問題を見ていきたいと思います。__別にリングフィット購入の自動転売で大儲けしようとしたのにLambdaが動かなくてキレていた訳ではないです。__

今回の趣旨ですが__考え方とデバッグの位置を說明__です、まだTLE(時間切れ)で解けていません。

#問題の概要

1.N個の順列がバラバラに並んでいます
2.前からiを走査させます
3.走査中のiよりも手前にある順列全て(ここではjと定義されてます)と比較して、~~j!>=i!~~ j>=iが常に成立するならi 1つに付き1カウント
4.条件が成立するiの合計カウントを求める

という問題です。

#解法の考え方

1.まずこの問題を聞いた時に、__2重for文を使って配列のiの位置を記憶させて、
 jを配列として左端からiの位置まで走査すれば良いな__、というのはす

元記事を表示

java bronze silver合格

大分前ですがOracle認定のJava bronzeとsilverのSE8合格しました。
bronzeもsilverも対策は一緒なのでひとまとめに。

# 勉強時間の目安(bronze)
1. プログラミング未経験:50h
1. 何らかのプログラミング言語を習得している:30h
1. java経験者:10h

いきなりsilverを受験する場合は+10h程度

# 参考資料
[黒本](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5-Java-Silver-%E5%95%8F%E9%A1%8C%E9%9B%86-1Z0-808/dp/4844339931/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5+Java+SE+8+Silver+%E5%95%8F%E9%A1%8C%E9%9B%86&qid=1584927815&sr=8-1)と[白本](htt

元記事を表示

GCPでJava版Minecraftサーバを建てた話(ついでにホワイトリストも設定)

# はじめに
前回建てた ubuntu のサーバにそのまま Java 版 Minecraft サーバを建てたときのメモです。
Java のチューニングについては書かないので別途調べてください┏(<:) AlwaysFree(一生無料)の「f1-micro」だとメモリサイズが小さすぎるので、事前に「n1-standard-1」に拡張しておきました。 # 1. Java 版 Minecraft サーバの構築 ## 1.1. Java のインストール サーバに SSH で接続して、root ユーザにスイッチしておきます。 ```shell su ``` root ユーザでログインしたら mkdir コマンドでサーバをインストールするディレクトリを作ります。 作ったら cd コマンドで移動します。 ```shell mkdir /mcjava cd /mcjava ``` Minecraft サーバをインストールしようと思いましたが、Java が入ってなさそうなので先に Java を入れましょう。 ```shell apt install default-jre ``` ディス

元記事を表示

AtCoderの挑戦環境構築(Java8)

# はじめに
AtCoderの挑戦環境が自分として満足できるところまで構築できたので
皆様のお役に立てるかはわかりませんが情報共有を兼ねて記事にまとめさせていただきました。

# モチベーション
– 自社風潮よりJavaを学習しておいたほうが良さそうに感じだしていた
– 3/1より本格的にJava学習を開始
– 習うより慣れよということで[CodingBat](https://codingbat.com/java)にて問題を解きまくり
– 問題の易しさもあり飽きが来ていたので情報収集から[AtCoder](https://atcoder.jp/?lang=ja)に到達
– 2020/3/14(土)開催の[パナソニックプログラミングコンテスト2020](https://atcoder.jp/contests/panasonic2020)にて初参加。
平方根の誤差調整ができずA,B2問のみという惨敗を喫した。
– その後過去問題の演習に励むが、はじめに利用していたCodingBatとは違い、
テストケースの容易や提出が徐々に手間と感じるようになる。
(問題選択ミスや言語選

元記事を表示

Java(jdk1.8以降)のファイル入出力のサンプルプログラム

Javaの(jdk1.8以降)のファイル入出力のサンプルプログラムのメモです。

# 1. バイナリファイルの読み込み

### 1.1. 一括読み込み

`C:/dk/input.xlsx`を一括で読み込み、16進数で標準出力に出力するサンプルプログラムです。
一括で読み込む場合、Outofmemoryにならないようサイズに注意する必要があります。

“`java:BinaryFileInputNio.java
package test.nio;

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

/**
* バイナリーファイルを読み込む
*/
public class BinaryFileInputNio {

/**
* @param args
*/
public static void main(String[] args) {

// 読み込みファイルの名前
Path path

元記事を表示

spring-batchで複数DataSource定義時に使用する@BatchDataSource

spring-batchで複数のDataSourceを定義する場合、“`@BatchDataSource“`でspring-batchのauto-configurationで使用する方を指定できる。“`@BatchDataSource“`のjavadocによると“`2.2.0“`で追加されたものらしい。

その定義は以下のようになっており、実態は単なる“`@Qualifier“`。javadocによると典型的な使い方としては、“`@Primary“`を付与するメインのDataSourceと、このアノテーションを付与するspring-batch用のセカンドDataSource、というもの。メインとなるDBと、メタデータ格納先DBが分かれてる場合にこれを使う、といった感じだろう。

“`java
/**
* Qualifier annotation for a DataSource to be injected into Batch auto-configuration. Can
* be used on a secondary data source, if t

元記事を表示

【Java】JavaでMethod/ConstructorからKFunctionを取得する【Kotlin】

# やること
`Java`の`Method`/`Constructor`から`KFunction`を取り出します。

# やり方
下記の`Method.kotlinFunction`/`Constructor.kotlinFunction`を`Java`から呼び出せばできます。

– [kotlin/ReflectJvmMapping\.kt at master · JetBrains/kotlin](https://github.com/JetBrains/kotlin/blob/master/core/reflection.jvm/src/kotlin/reflect/jvm/ReflectJvmMapping.kt)

具体的には以下のようになります。

“`java
KFunction function = ReflectJvmMapping.getKotlinFunction(Foo.class.getConstructors()[0]);
“`

## 注意点
`Class`からの`Method`/`Constructor`取得にはジェネリクスの型パラメータ

元記事を表示

OTHERカテゴリの最新記事