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

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

timestamp status 999 error none message no message available

#状況
Spring boot でアプリを作っている。
Spring-security で認証機能の実装をする。

#問題
submitを押して認証処理を行うと、ログインフォームから表題のエラーが発生したページへ遷移する。
(表題エラーはJSONで表示されていた。)

#原因
認証処理で遷移するURLの許可がない場合に発生する。
認証に失敗した際に/login-errorに遷移するが、/login-errorへのアクセス許可がないため発生していた。

#解決
“`
@Override
protected void configure(HttpSecurity http) throws Exception {

http
.authorizeRequests() // 認可の設定
.antMatchers(“/”, “/find”, “/login”, “/signup”, “/login-error”).permitAll() // 全ユーザーアクセス許可
.anyRequ

元記事を表示

【Java】StringはStringBuilderの下位互換?

#背景
最近AtCoder問題を利用してJavaの文法とかを勉強しています。

[ABC146 F -Sugoroku](https://atcoder.jp/contests/abc146/tasks/abc146_f)
に出くわした際にStringを反転させたいなーと思ったところStringBuilderなるものに出くわしたお話です。

#StringとStringBufferの違い

これについては以下のリンクを見ればわかりやすいと思います。
https://qiita.com/shunsuke227ono/items/e8f34c67dcffa0fa28ad
https://www.javadrive.jp/start/stringbuilder/

簡単にまとめると、

– Stringはイミュータブルであり、StringBuilderはミュータブルである
– コード上ではStringもミュータブルのように記述できる(S = S + “a”など)
– 文字列の追加・挿入ではStringBuilderの方がメモリ・時間効率が良い

ということでStringBufferの使

元記事を表示

Java

“`java:Test.java
class Test {
public static void main(String[] args) {
System.out.println(“Test”);
}
}
“`
“`bash:bash
>javac Test.java
>java Test
Test
“`

“`java:Index.java
package test;

public class Index {
public static void main(String[] args) {
TokyoService tokyo = new TokyoService();

for (String city : tokyo.getCities()) {
System.out.println(city);
}

OsakaService osaka = new OsakaService();
System.out.println(osaka.getCity(0));
}
}
“`
“`java

元記事を表示

FindBugs-IDEAのエラー

##経緯
静的解析したかったので、AndroidStuidoにFindBugsを導入してみたがエラーが出て動かなかった。
以下のようなエラーが出ていた。

>Error:Internal error: (java.lang.ClassNotFoundException) com.google.wireless.android.sdk.stats.IntellijIndexingStats$Index

最初は設定がおかしいとは思っていたが、どうやらそうではないらしい。

##原因
どうやらjava9以降はFindBugsが使えないらしい…

>FindBugsはメンテナンスされておらず、Java 9以降用にコンパイルされたバイトコードをサポートしていないため、FindBugsプラグインは非推奨になり、Gradle 6.0で削除される予定です。 代わりにSpotBugsプラグインの使用を検討してください。

https://stackoverflow.com/questions/55844077/findbugs-idea-classnotfoundexception-com-googl

元記事を表示

オブジェクト指向について

#はじめに
私がこれまでプログラミングを勉強して学んできた中で、ちゃんと理解出来ているかどうかの復習も兼ねてよく聞く言語や言葉の意味を書いていこうと思います。

初めての投稿となりますので、多々至らぬ点があるとは思いますがどうぞよろしくお願いします。
#この記事の内容について
私が通っていたプログラミングスクールで学習を進めていた時によくオブジェクト指向という単語を聞くので、その事について改めて見直してみようということでこの記事を書いてみようと思いました。
オブジェクト指向はプログラミングを学習していたらよく聞く単語の一つだと思いますが、いざ説明してくださいと言われると難しいな・・・ってなりますよね。

まず、ザックリとした説明で言ってしまうと

#####「モノ」を組み立てていくように表現して、コンピュータに動作させていくという概念

です

正直、自分で書いてても???ってなるくらい簡潔に説明が難しいですね・・・

#何故難しく感じてしまうのか
そもそもオブジェクト指向の説明に明確な正解は存在せず、概念であるために皆さんも学習しているうちにオブジェクト指向について調べても、ほぼ全て

元記事を表示

【2020年1月版】QuarkusでAzure Key Vault を MicroProfile Config で参照

# Azure Key Vault の Microprofile Config 対応

以下の記事で Azure Key Vault のMicroProfile Config 対応について書かれておりました。

– [Azure Key Vault を使用した MicroProfile の構成](https://docs.microsoft.com/ja-jp/azure/java/microprofile/configure-microprofile-with-keyvault)

Quarkus での設定値やDBの接続文字列、APIキーなどのシークレット情報をプロパティファイルに直書きするのは嬉しくなかったんですよね!
これらのキーなどを管理するのに Key Vault を利用したいと考えました。

以下が Azure Key Vault をMicroProfile Config APIのConfigSourceとして接続するAPIなのですが・・・

– [Azure Key Vault Config Source for MicroProfile Config API](http

元記事を表示

【逆引き】Spring Security(随時更新)

# 概要

Spring Securityの利用にあたり、逆引きという形でまとめました。ここに載っていることが正解ではなく、あくまでもひとつの方法ですので実装に迷ったときに参考にしていただければ幸いです。

リファレンスは随時更新していきます。

# 環境
|項目|バージョン|
|:–|:–|
|Java|8|
|Spring Boot|2.2.4|

# 準備

以下は最低限必要なコードです。

“`java:全てのリクエストを制限

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest()
.authenticated();
}
}
“`

元記事を表示

gradle buildがwindowsでjava.nio.file.InvalidPathException: Illegal char <:> at indexというエラーになる

gradle buildをwindowsで実行したところ以下のようなエラーになった。以下エラー中のファイルパスは適当なものに書き換えている。

“`
* What went wrong:
Execution failed for task ‘:api:compileJava’.
> java.nio.file.InvalidPathException: Illegal char <:> at index 71: /usr/local/xxx/lib/aaa.jar:/xxx/bbb.jar:/usr/local/xxx/ccc.jar

“`

原因は依存性の中のあるjarのマニフェストファイルのClass-Pathだった。ここに以下のように”:”(コロン)区切りでファイルパスが指定されていた。クラスパスは、Linuxでは区切り文字は”:”(コロン)だが、windowsでは”;”(セミコロン)、で指定しなければならない。よって、windowsでだけビルドエラーになる。

“`
Class-Path: /usr/local/xxx/lib/aaa.jar:

元記事を表示

戸建て?マンション?診断チェッカー

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class HouseChecker {

public static void main(String[] args) throws IOException {
System.out.println(“戸建?マンション?”);
System.out.println(“あなたに合うお住まいを見つけましょう!”);
System.out.println(“「はい」の場合はyを、「いいえ」の場合はnを入力してください”);
System.out.println();
q1();
}

//q1
public static void q1() throws IOException {

boolean loop = true;
System.out.println(“「結婚をしていますか?(またはする予定がある)」”);

while(loop == t

元記事を表示

お姉さん問題を実際にコードで表現して計算してみた

# お姉さん問題って?

**『フカシギの数え方』 おねえさんといっしょ! みんなで数えてみよう!**

こちらのyoutubeの動画です。
組み合わせの爆発を伝えたいお姉さんが一生をかけて組み合わせのすごさを身をもって教えるという動画です。

ここで取り上げられている問題が、
「N × Nのマス目があり、左上のスタートから右下ゴールまで遠回りしてもいいから何通りの道順がとれるか」
というものです。みんなで数えてみようって言われているので数えるしかありません。

制約としては、同じ道を通ってはいけないというもののみです。

| N | 組み合わせ |
|:–|:–|
|1|2|
|2|12|
|3|184|
|4|8512|
|5|1262816|
|6|575780564|
|7|789360053252|
|8|3266598486981642|
|9|41044208702632496804|
|10|1568758030464750013214100|

**気になったので自分でも検

元記事を表示

Oracle Certified Java Programmer, Silver SE 11に合格した

Oracle Certified Java Programmer, Silver SE 11
に、先日合格した。ので、やったこと、感じたことをサクッと書いておく。

##私の経歴
独立系Sier。
大学はNOT工学系。
実務経験3年。
Java案件のPG経験はなし。
(業務でプログラミングしたのは.NET系の案件で1年程度)

##勉強方法
黒本を購入した。
試験2ヶ月前から対策開始。
1〜11章まで1問ずつ、問題見る→回答・解説見て理解するの流れで
とりあえず読んでいった。(紙には一切記載しなかった)

1章とポリモーフィズム・モジュールシステムあたりは理解に時間がかかった。
そういうとこはパパッともう1周、問題見る→回答・解説見るを繰り返した。

本番前1週間で、総仕上げ問題を2周解いた。
1周目は正答率40%無いくらいで愕然としたが、2周目は80%くらい解けた。
不安なまま本番に突入したが、80%くらい解けて受かった。
正直受かってるかギリギリかな、くらいの感触だったのでホッとした。

##感じたこと
正直思ってたよりずっと難しかった。

インターネットの海では
「簡単すぎクソワ

元記事を表示

STSでSpring Data JPAを試したときの備忘録

## 概要
STSを使ってSpring Data JPAを試したときの備忘録を残しておきます。
主に自分用。
Spring Data JPAとはSpringのO/Rマッパー、
モデル層のフレームワークです。

## 紹介の前に言葉の説明
### O/Rマッパー
DBのテーブルやビューのレコード1行を
Javaのインスタンス1個として扱い、
テーブルとインスタンスを
関連付けるモジュールです。
後ほどもう少し詳しく書いていきます。
※厳密には違いますがイメージは
 大体合ってると思います。

### モデル層
MVC(Model, View, Controller)のModelです。
DBそのものや、DBへのCRUD(**C**reate, **R**ead, **U**pdate, **D**elete)、
アプリケーションのロジック部分のことです。

## SpringでJPAを推す理由
Spring Data JPAの強みは
クラスやメソッドの命名規則などの
お約束を守ればインターフェースを作るだけで
CRUDできます。便利です。

ただし、SQLを書く必要があるとき、
SQLの代

元記事を表示

JavaFXで会話っぽく文字を出力する

#概要
JavaFXでゲームを作成した際に、`Label`に会話イベントを表示させたい場面があったので、そのことについて書きます。
##環境
– java 13.0.2
– JavaFX 13.0.2
– zsh 5.7.1 (x86_64-apple-darwin19.0.0)
– MacBook Pro (13-inch, 2017, Four Thunderbolt 3 Ports)

##実行例
![text.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520217/4730436b-f2ea-5663-9c82-f2ce465f6d7e.gif)

# 実装
## 考え方
今回やろうとしていることは、会話文を一文字ずつ公開範囲を広げつつその度に出力させれば実装できると考えました。
## 手順
1. fxmlファイルの作成(今回は[SceneBuilder](https://gluonhq.com/products/scene-builder/)を利用)
2. 起動するためのファイルを作成

元記事を表示

Spring Boot で graphql-spring-boot 使用時にエラーをどこかへ通知したいとき

`@RestControllerAdvice` とかで取れなかったのと、 `@ExceptionHandler` よりももう少し詳細な情報が欲しかったので。

# 環境

“`kotlin

val spring_version=2.2.2.RELEASE

implementation(“com.graphql-java-kickstart:graphql-spring-boot-starter:6.0.0”)
implementation(“org.springframework.boot:spring-boot-starter:$spring_version”)
implementation(“org.springframework.boot:spring-boot-starter-web:$spring_version”)
“`

# コード例
`Map` を Bean に登録すれば良さそう。

“`kotlin
@Configuration
class GraphQLConfig {
@Bean
fu

元記事を表示

【Java】入門 構造 クラス定義 クラスとインスタンスの関係 メソッド定義のフォーマット

アウトプット

クラスとは?
クラス=フィールド+メソッドである
処理を定義したものがメソッドである。

package javabase;//←パッケージ宣言
class Staff {//←テンプレート
String name;
int staffid;
String email;
}

1クラスの定義
public class StaffInfo {//←クラス定義

public static void main(String[] args) { //メソッドの定義

Staff yamada = new Staff();//←インスタンスの生成
yamada.name =”Taro Yamada”;

System.out.println(yamada.name);

}

}

Javaのプログラムを作る=クラスを作る

2クラスとインスタンスの関係
//クラス=テンプレート たい焼きの型
//インスタンス=テンプレートから生成された部品 たい焼きがインスタンスです。
//class Staff { //←Staffクラス (テンプレ

元記事を表示

[PostgreSQL]セッションをちゃんと切らないといけないよという話

##ある日

いつものようにPostgreSQLに接続しようとしたらこんなエラーが出た。
>FATAL: sorry, too many clients already

??
謝られるようなことはしていないはずだ。
調べるとクライアントがDBの設定を超過しているらしい…。

ここでまた疑問。
自分がテストで使っているだけなのでそんなことになるはずがないのだ。

一応“select * from pg_stat_activity;“で調べてみる。

>1234 datname.hoge 0000 postgres 000.000.0.000 2020/1/29 00:00
>1234 datname.hoge 0000 postgres 000.000.0.000 2020/1/29 00:00
>1234 datname.hoge 0000 postgres 000.000.0.000 2020/1/29 00:00
> … 以下100件

うん…使ってたねごめんね。こっちがsorryって感じだね。

原因としては。使っているサーバサイドのJavaのプログラムでDB接続を連続

元記事を表示

[Java]鋳型にはめるマルチスレッド

#はじめに
バッチ処理などで、時間のかかる似たような処理をマルチスレッドを使用して、
時間短縮させたいことありますよね。

例えば、単純化して考えるために、
1処理5分かかるものを10処理することを考えます。
1スレッドだと 5 * 10 = 50分かかりますが、
10スレッドだと5分で終わりそうな気がします。

そういった場合にスレッドセーフな処理で記述するというのは、
なかなか骨が折れます。
次回以降、似たような場面で心理的負荷を下げるために、
鋳型のようなものを作成しておきたいと思って書きました。

##実装例
とりあえずこの形ならスレッドセーフに書けるという大雑把な枠組みです。
欲しい情報の肝以外は省略しているつもりなので、
自分の必要な処理を埋め込んでいくと、
完成するような「鋳型」をイメージしています。

“`MultiThreadExecute.java
/**
* マルチスレッド化するクラス
* ここでスレッドを作成し実行させる
*/
public class MultiThreadExecute {
public static void main(String[]

元記事を表示

Java 月末のplusMonths

# 月末に対してplusMonthsとどうなるの?
2月には31日は存在しませんが、1/31に`plusMonths()`で1ヶ月を加算した場合はどうなるか気になり調べてみました。

[ドキュメント](https://docs.oracle.com/javase/jp/8/docs/api/java/time/LocalDate.html#plusMonths-long-)によると
>このメソッドは、3つの手順で、指定された量を月フィールドに加算します。
1. 入力された月数を、月フィールドに加算します
2. 結果となる日付が無効になるかどうかをチェックします
3. 必要に応じて、「月の日」を最後の有効な日に調整します
たとえば、2007-03-31に1月を加算すると、2007-04-31という無効な日付が生じます。無効な結果を返す代わりに、その月の最後の有効な日である2007-04-30が選択されます。

まずは月を足して、足した月に該当する日付があるかどうかチェックします。該当する日付がない場合は、月の最終日を返すようです。

# 確認

“`java
LocalDate dat

元記事を表示

Apache Commons BeanUtils はまりポイント

[Apache Commons BeanUtils](http://commons.apache.org/proper/commons-beanutils/)を使ったときにはまったことのメモ

##### 確認したバージョン

* Java 8
* Apache Common BeanUtils 1.8.3~1.9.4

##### 検証コード

Bean.java

“`java
public class Bean {
private Timestamp timestamp;

public Timestamp getTimestamp() {
return timestamp;
}
public void setTimestamp(Timestamp timestamp) {
this.timestamp = timestamp;
}
}
“`

Main.java

“`java
public class Main {
public static void main(String[] args) throws Exception {
Bean bea

元記事を表示

streamでFizzBuzzを出力する

#導入
こんにちは。けちょんです。
**皆さん、stream使ってますか?**
私は数日前に学んだのですが、めっちゃはまってます。
業務中も隙あらばいじってます。
今回はstreamを使ってFizzBuzzを出力してみます。

#やってみる
##なにはともあれ、1~100までを生成
“`java
IntStream.range(1,101);
“`
rangeClosedではなく、rangeの理由はショートコードを意識しました。
(最終的にそんなに短くならない)

##mapToObjを使って、FizzBuzzを作成

“`java
IntStream.range(1,101).mapToObj(i->i%3==0&&i%5==0?”FizzBuzz”:i%3==0?”Fizz”:i%5==0?”Buzz”:i).forEach(i->System.out.println(i));
“`
はい、書いてて辛いし、きっと皆さんも辛い。

“`java
i->i%3==0&&i%5==0?”FizzBuzz”:i%3==0?”Fizz”:i%5==0?”Buzz”:i
“`
この

元記事を表示

OTHERカテゴリの最新記事