Java Runtimeが相違することによるError
コンパイルされたClassのバージョンと実行される環境のランタイムが異なる場合、以下のようなエラーが出力される
java.lang.UnsupportedClassVersionError: com/example/backend/BackendApplicationKt has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0
このメッセージの場合、Java17(61)でコンパイルされたClassだが、現在のラインタイムがJava11(55)なので実行不可
Gradleプロジェクトで使用するJavaのversionを指定する
PCに導入しているversionのJavaをGradleプロジェクトが認識しない場合、build.gradleに使用するJava versionを記載することで回避可能
エラーメッセージ
Here are the highlights of this release: - Aggregated test and JaCoCo reports - Marking additional test source directories as tests in IntelliJ - Support for Adoptium JDKs in Java toolchains For more details see https://docs.gradle.org/7.4.1/release-notes.html Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details > Task :bootRun FAILED エラー: メイン・クラスcom.example.backend.BackendApplicationKtのロード中にLinkageErrorが発生しました java.lang.UnsupportedClassVersionError: com/example/backend/BackendApplicationKt has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0 FAILURE: Build failed with an exception.
対応方針 build.gradle.ktsに以下を記載する
java { toolchain{ languageVersion.set(JavaLanguageVersion.of(17)) } }
docker コンテナイメージを完全に削除する手順
dockerのイメージを完全に削除する手順
- コンテナの削除
docker ps -a docker rm
2.イメージの削除
docker images docker rmi
3.ボリュームの削除
docker volume ls docker volume rm
lsコマンドでファイル名のみ抽出する
特定の列を抽出するには awk '{print $n}' で指定する。 $nには列数を指定する。
よって、以下のコマンドでlsでファイル名のみ抽出することが可能。
ls -lh | awk '{print $9}'
Android StudioでDevice File Explorerが表示されない場合の対応
Android SDK Command-line Tools がインストールされていない場合、表示されないのでインストールすると表示される。(今回はAndroid Studioの再起動を実施)
LambdaでRDSに接続する(python)
LambdaからRDSに接続した際のメモ。
1. EC2のLinuxを起動し、作業用のディレクトリを作成する
2. viでlambda_function.py を作成する
import sys import logging import rds_config import pymysql #rds settings rds_host = rds_config.db_endpoint name = rds_config.db_username password = rds_config.db_password db_name = rds_config.db_name logger = logging.getLogger() logger.setLevel(logging.INFO) try: conn = pymysql.connect(host=rds_host, user=name, passwd=password, db=db_name, connect_timeout=5) except: logger.error("ERROR: Unexpected error: Could not connect to MySql instance.") sys.exit() logger.info("SUCCESS: Connection to RDS mysql instance succeeded") def handler(event, context): """ This function fetches content from mysql RDS instance """ item_count = 0 with conn.cursor() as cur: cur.execute("create table Employee3 ( EmpID int NOT NULL, Name varchar(255) NOT NULL, PRIMARY KEY (EmpID))") cur.execute('insert into Employee3 (EmpID, Name) values(1, "Joe")') cur.execute('insert into Employee3 (EmpID, Name) values(2, "Bob")') cur.execute('insert into Employee3 (EmpID, Name) values(3, "Mary")') conn.commit() cur.execute("select * from Employee3") for row in cur: item_count += 1 logger.info(row) #print(row) return "Added %d items from RDS MySQL table" %(item_count)
3. lambda_function.py より参照される rds_config.py を作成する
※下記はRDSの設定に合わせること
#config file containing credentials for rds mysql instance db_endpoint = "RDS:エンドポイント" db_username = "RDS:ユーザーID" db_password = "RDS:パスワード" db_name = "RDS:DB名"
4. pymysqlを作業用ディレクトリに追加する
pip install pymysql -t .
5. 作成したソース及びpymysqlをアーカイブする
zip -r app.zip ./*
6. lambda関数を作成し、作成したzipをアップロードする
氏名での検索等のスペースの対応
検索画面から入力された「氏名」の検索などで検索用のDBカラムを定義せずに検索でヒットさせたい。 正攻法はテーブルにブランクを除いて連結したカラムを追加する方法だが、カラム追加が出来ない場合の手段として、SQLのLikeを使用して実現する方法がある。
例えばDB項目が以下のように「姓 + " "(全角スペース) + 氏名」のように登録されている状態で鈴木太郎、鈴木 太郎、鈴木 太郎 のどのパターンでもヒットさせたい。
氏名 |
---|
鈴木 太郎 |
DBから取得した該当項目のスペースを'%'に置き換えlike検索にてSQLにてヒットさせることが可能。
String name = Name.replaceAll(" ", "%").replaceAll(" ", "%"); String[] strArray = name.split(""); String searchKey = ""; for(String key : strArray) { searchKey = searchKey + "%" + key; }