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

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

フィボナッチ数列の初歩メモ

・フィボナッチ数列

**フィボナッチ数列**は、イタリアの数学者レオナルド・フィボナッチが考えた「[ウサギ算](https://talavax.com/usagizan.html)」から導かれる数列です。この数列は、自然界の現象に数多く出現し、ヒマワリの種の[配列](https://talavax.com/array.html)にも**フィボナッチ数列**の法則が働いているといわれている。

n番目のフィボナッチ数をFnで表すと、Fnは再帰的に

“`jsx
F0 = 0
F1 = 1

Fn+2 = Fn + Fn+1 (n≧0)
“`

で定義される。

1番目と2番目の値を足すと3番目の値になる。
言い方を変えると、ひとつ前とふたつ前の値を足した数が次の数となる。

・実際に書いたコード

“`java
public class TryJava0120 {

public static void main(String[] args) {

int f0, f1, fn;

f0 = 0;
System.out.println

元記事を表示

Java基礎 ファイルの読み書き(1)

## FileWriter、FileReaderを使ってファイルを読み書きする

まずファイル名を指定し、Fileオブジェクトを生成します。
それをもとにキャラクタストリームである「**FileWriter**」「**FileReader**」を使って、char単位で読み書きを行います。

ちなみにキャラクターストリームを使用すると、文字コードが自動的に変換されるので、ファイルが保存されているOSの文字コードを意識することなく入出力を行えます。

以下のコードは、「text.txt」というファイルを生成し書き込みを行ったのち、
そのファイルの中身を読み込んで出力しているというプログラムです。

“`Main.java
import java.io.*;

public class Main {
public static void main(String[] args) {
try (FileWriter text1 = new FileWriter(new File(“text.txt”));
FileReader text2 = new FileReader(new

元記事を表示

Oracle Autonomous Database 21c へJDBC Thin接続してみてみた

Autonomous DatabaseではTransport Layer Security (TLSv1.2)を使用するセキュアな接続が要求されます。 JDBC Thinドライバを使用するJavaアプリケーションには、Oracle WalletまたはJava KeyStore (JKS)が必要です。
ということで、[JDBCコード・サンプル](https://github.com/oracle/oracle-db-examples/tree/master/java/jdbc/ConnectionSamples)から[DataSourceSample.java](https://github.com/oracle/oracle-db-examples/blob/master/java/jdbc/ConnectionSamples/DataSourceSample.java)と[UCPSample.java](https://github.com/oracle/oracle-db-examples/blob/master/java/jdbc/ConnectionSamples/UCPSa

元記事を表示

意外と知られていない。SpringBoot のもう一つのPlatformTransactionManager

意外と知られていない。SpringBoot のもう一つのPlatformTransactionManager
それは:org.springframework.data.transaction.ChainedTransactionManager です。

使用するイメージ

“`java
@Bean(name = “chainedTransactionManager”)
public ChainedTransactionManager transactionManager(@Qualifier(“primaryDs”) PlatformTransactionManager ds1,
@Qualifier(“secondaryDs”) PlatformTransactionManager ds2) {
return new ChainedTransactionManager(ds1, ds2);
}
“`

“`java
@Transact

元記事を表示

MySQL workbenchでレコードを削除したらjavax.persistence.EntityNotFoundExceptionが発生

###環境
Spring Boot 2.4.0
java 1.8
thymeleaf 3.0.11
Spring Security 2.4.0
MySQL 8.0.22

###現象
MySQLWorkbenchで「いらんなぁ」って思ったレコードを消去しました。
`Delete row`でぽんと消しちゃったんですね。

そしたらシステムにログインできなくなりました。

別にしようとしてたログインとは関係ないレコードなんですけどね。

また元に戻せば大丈夫ですが、AutoIncrementがあるので、
1. AutoIncrementを外す
2. idを指定するinsertする
3. AutoIncrementをつける

ってめんどくさいことをしないと戻せない。

前にもやったんですけど、解決策がわからず前に進まなかったので、とりあえずめんどくさいけど上のやり方をしました。

でもまたあとから見て不要だと思ったので削除しようってやったら、「またかよ・・・」

これからもあるかもしれないので、ちょっと調べました。

###解決策
https://stackoverflow.com/que

元記事を表示

プログラミングで使われるなんちゃらケースってのを整理してみた

プログラミングのときに使われる「~~~ケース」ってやつを、整理してみます。

#キャメルケース

複数の単語をつなぐときに、先頭の単語の頭文字は小文字、2語目以降は頭文字を大文字で書くというルールです。

“`
hello world -> helloWorld
programing language -> programingLanguage
osaka city -> osakaCity
“`

利用例

・Javaのメソッド名や変数名

#スネークケース

複数の単語をつなぐときに、単語同士を「_(アンダーバー)」でつないで書くというルールです。

“`
hello world -> hello_world
programing language -> programing_language
osaka city -> osaka_city
“`

利用例

・リレーショナルデータベースのテーブル名やカラム名

#パスカルケース

複数の単語をつなぐときに、単語の頭文字を大文字で書くというルールです。

“`
hello world -> Hel

元記事を表示

Jersey – What is Difference Between bind and bindAsContract in HK2?

Great explain.

https://stackoverflow.com/questions/56262240/difference-between-bindascontract-and-bind-in-hk2

元記事を表示

SpringBootでログイン中のユーザーのUserDetailsクラスを継承したクラスの情報を取得したい

###環境
Spring Boot 2.4.0
java 1.8
thymeleaf 3.0.11
Spring Security 2.4.0

###実現したいこと
ログイン中のユーザーのUSERDETAILSを継承したクラスの情報を取得したい。

###いろいろ試してなんとか実現
ほぼ丸一日かかりました。というかちゃんとSpringBootを理解していないのだとは思いますが、いろんなサイトを見て試してみてなんとかうまく行ったので、記録として残しておきます。

###USERDETAILSを継承しているクラス

“`java
Tenantsクラス
Staffクラス
“`

###ログイン認証
MyUserDetailsServiceクラスのloadUserByUsernameメソッドで、返すクラスを分けています。

“`java:MyUserDetailsServiceクラス
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 引数がnul

元記事を表示

2021年、最近のJavaに浮いた話題がない (ポエム)

*ポエムです。

[Software Development Trends in 2021 – ソフトウェア開発トレンド予測記事](https://qiita.com/e99h2121/items/89c047f3c1852f257ff5)をせっかく頑張って読んだので、他にも2021年版的な某かをまとめた。

Developer Roadmaps
https://roadmap.sh/
[The 2021 Web Developer Roadmap](https://levelup.gitconnected.com/the-2020-web-developer-roadmap-76503ddfb327)
2021年版に更新されているようだ。

[What are your plans to read/learn in 2021?](https://dev.to/deveconomics/what-are-your-plans-to-read-learn-in-2021-3nkj)
に記載されている以下は便利かもしれない。無料ツール・リソース50。
[50 free tools an

元記事を表示

line-bot-sdk-java 自社サービスユーザーとLINEユーザーのアカウント連携

[line-bot-sdk-java](https://github.com/line/line-bot-sdk-java)を使用した、自社サービスの既存ユーザーアカウントとLINEユーザーのアカウントの連携手順についてメモ。
`※記事内のソースは例外処理等記述してないので、注意。`

[サンプルソースコード](https://github.com/try0/line-bot-java-sample/blob/main/line-bot-java-app/src/main/java/jp/try0/line/bot/sample/app/resource/WebhookResource.java)

[アカウント連携のシーケンス](https://developers.line.biz/ja/docs/messaging-api/linking-accounts/#%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E9%80%A3%E6%90%BA%E3%81%AE%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%

元記事を表示

RHEL/CentOSでの暗号化ポリシーで、Javaのセキュリティ設定が変わるという話

# What’s?

Red Hat Enterprise Linuxでは、システムの暗号化ポリシーを設定できます。

[システム全体の暗号化ポリシーの使用](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/security_hardening/using-the-system-wide-cryptographic-policies_security-hardening)

この内容で、Javaのセキュリティ設定も変わりますよ、という話です。

# 環境

CentOS 8で確認してみます。

“`shell
$ cat /etc/redhat-release
CentOS Linux release 8.3.2011
“`

使用するJavaは、OpenJDK 8とします。

“`shell
$ java -version
openjdk version “1.8.0_275”
OpenJDK Runtime Environment (build 1.8.0_275-

元記事を表示

Lombokの@Accessorsについて

@Accessors:getter/setterをカスタマイズするためのアノテーション
       @Getter/@Setterなどと一緒に使う
       オプションは “chain” “fluent” “prefix” の3種類

### 環境
Java : 1.8
Lombok : 1.18.16
(SpringBoot : 2.3.7)

## setterのメソッドチェーン化

`@Accessors(chain = true)`でsetterをメソッドチェーン化する

“`java
user.setName(“Tom”).setAge(24);
“`

のように連続して記述できる

<実際に生成されるコード>

“`java
public User setName(final String name) {
this.name = name;
return this;
}
“`

<ポイント>
つけるのはクラスでもフィールドでも可、ただしどちらに付けても**クラス内に一つでも存在すると全フィールドに適用される**

## getter/setterを

元記事を表示

InputStreamをStringに変換したい

必要になるたびにぐぐるのに疲れたので自分用のメモとしておいておきますね(´・ω・`)

`InputStream`をすべて読み込んで`String`に変換したい場合、おおよそ以下のように書いておけば大丈夫です。

“`java
public static String readAll(InputStream in) throws IOException {
byte[] b = new byte[1024];
ByteArrayOutputStream out = new ByteArrayOutputStream();
int len;
while ((len = in.read(b)) != -1) {
out.write(b, 0, len);
}
return out.toString();
}
“`

また`String`に変換したい`InputStream`の文字コードがUTF-8ではない場合、`ByteArrayOutputStream.toString(Charset charset)`を利用すればよい

元記事を表示

初心者が1から始めるJava開発-Vol.1- eclipseセットアップ編

今回はJava開発を1から始める初心者向けの投稿をしたいと思います。

Javaの記事はいつか書きます(自学のために)。

———————————
**Javaの初心者向けおすすめ本**

Spring Bootで、単体テスト実行時にFlywayを起動しない方法

# はじめに
現在のプロジェクトで、 `SpringBoot` と `Flyway` を使用していますが、
テスト実行時(当プロジェクトでは `Gradle`を使用しているため、 `./gradlew test` )に、
`Flyway` の `Migrate` が走ってしまう現象がありました。
その時の解決方法の一つになります。

# どのような解決をしたのか
ご存知の方からしたら当たり前のことかもしれませんが、
`SpringBoot` はテスト実行時に、設定ファイルの優先順位が変わります。
具体的には、下記のような構成だとして、

“`zsh
/project
├── build.gradle
├── gradlew
└── src
├── main
│ ├── com
│ │ └── …
│ └── resources
│ └── application.yml
└── test
├── com
│ └── …

元記事を表示

Bean scopeとBean Life Cycle

## Bean scope

Bean scope
Springで別途の設定をしない場合、default bean scopeはsingletonで構成されます。

singleton : spring default bean scope
prototype:アプリケーションリクエスト時に(getBean()メソッドが呼び出されるたびに)スプリングが新しいインスタンスを生成します。
request:HTTP リクエストごとにインスタンス化され、リクエストが終わると消滅します。
session:HTTP セッションごとにインスタンス化され、セッションが終了すると消滅します。
global session:ポートレート基盤のウェブアプリケーション用途で、全域セッションスコープが空のようなスプリングMVCを使用したポータルアプリケーション内のすべてのポートレートの間で共有できます。
thread:新しいスレッドから要請すると、新しいbeanインスタンスを作成します。 同じスレッドの要請には常に同じインスタンスが返されます。
custom : org.pringframework.beans

元記事を表示

【Java】DateクラスのcompareToメソッドの使い方

#compareToメソッドとは?
Dateクラスの日にちを比較するメソッドで、メソッドの呼び出し元の日付と引数の日付を比較します。

以下のように、引数と呼び出し元を比較し、値を返します
>メソッドの呼び出し元の値が、引数と等しい場合は0
>メソッドの呼び出し元の値が、引数より前の場合は-1
>メソッドの呼び出し元の値が、引数より後の場合は1

#使い方

“`java
SimpleDateFormat sdf = new SimpleDateFormat(“yyyyMMdd”);
Date date1,date2;
date1 = sdf.parse(“20210117”);
date2 = sdf.parse(“20210118”);

System.out.println(date1.compareTo(date2)); // -1 ->date1はdate2より前である
System.out.println(date2.compareTo(date1)); // 1 ->date2はdate1よ

元記事を表示

複雑なfor文(基礎)

# 複雑なfor文

### ❶初期化処理 ❷繰り返し条件 ❸繰り返し時処理の3つを工夫し、高度な繰り返しを実現
単に「◯◯回繰り返す」という単純な繰り返しではなく、下記のようにすれば少し高度な繰り返しが行える

“`java
//ループ変数を1からスタートする
for (int i = 1; i < 10; i++){...} //ループ変数を2ずつ増やす for (int i = 0; i < 10; i += 2){...} //ループ変数を10から1ずつ1まで減らしていく for (int i = 10; i > 0; i–){…}

//ループ変数を初期化しない
for (; i < 10; i++){...} //繰り返し時の処理を行わない for (int i = 0; i < 10;){...}  ```

元記事を表示

awtで”EXCEPTION_ACCESS_VIOLATION”が出たとき

前書き

大学のjavaの課題でawtを使おうとしたところ,大量のエラーが出て小一時間格闘したので解決策を残しておきます。
初めての記事なのでご了承ください。

環境

OS : Windows10
JDK : 15.0.1
JRE : 15.0.1

後述のエラー文にこのような記述があったのでそれを参考にしています。
vm_info: OpenJDK 64-Bit Server VM (15.0.1+9-18) for windows-amd64 JRE (15.0.1+9-18)

筆者はInteliJIDEA Ultimateをエディタとして利用しており,インストール時点でjdkもjreもなかったのでIDEAの指示に従って一番新しいものをインストールした形です。

症状

ソースコード

“`java:AWTGraphics.java
import java.awt.*;

public class AWTGraphics extends Canvas
{
static final int WORLD

元記事を表示

Azure Java開発用のサンプルコード集

[Azure-Java-SDK JavaDoc](http://azure.github.io/ref-docs/java/index-all.html)

[Github Azure-Java-SDK](https://github.com/Azure-Samples?q=&type=&language=java)

[MicroSoft公式 : コードサンプル検索サイト](https://docs.microsoft.com/ja-jp/samples/browse/)

元記事を表示

OTHERカテゴリの最新記事