質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

解決済

Mysql環境をdockerで作成しアプリケーションと連携したい(spring boot)

sanezane
sanezane

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

1回答

0評価

0クリップ

8閲覧

投稿2019/01/29 15:43

編集2022/01/12 10:58

□環境情報□
macOS:10.14.2
spring boot:2.1
Docker:version 18.09.1
mysql:8.0

やりたいこと

dockerにて構築したmysql環境から値を取得し画面に表示する
※docker環境の中のmysqlの今回の対象のテーブル情報を以下に載せます
イメージ説明

現状

findAll()メソッドにて値が取得できない

ソース情報

データベース名:demo
テーブル名:Account
カラム:id,email,password

以下デバッグ画像のfindAll()にてカラムid,email,passwordが取りたいのに、、、sizeが0で返ってくる。
イメージ説明

その他ソース

githubリンク
※findAll()はこちら側で別個定義が必要なのでしょうか?
それともDBと連携ができていない?
ご意見を宜しくお願いいたします。

applicationproperties

spring.datasource.url=jdbc:mysql://localhost:3306/demo?useSSL=false spring.datasource.username=root spring.datasource.password=p@ssw0rd spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.database=MYSQL spring.jpa.hibernate.ddl-auto=update

Entity

package com.example.demo; import lombok.Data; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "Account") @Data public class AccountEntiry { @Column @Id private int id; @Column private String email; @Column private String password; }

Repository

package com.example.demo; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface AccountRepository extends JpaRepository<AccountEntity,Integer> { }

Service

package com.example.demo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class AccountService { @Autowired AccountRepository accountRepository; }

Controller

package com.example.demo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator; @Controller @RequestMapping("/") public class IndexController { @Autowired AccountRepository accountRepository; @RequestMapping(value = "/", method = RequestMethod.GET) public String index(Model model) { List<AccountEntiry> emplist=accountRepository.findAll(); model.addAttribute("emplist", emplist); model.addAttribute("message", "Hello Springboot"); return "index"; } }

■修正情報■

■1/31■成果振り返り

まず、JpaRepository<Account,String>としていたものをidの属性であるJpaRepository<Account,Integer>へ変更。

デバッグ実行後、事象変わらず、、、SimpleJpaRepositoryを掘っていたら以下のエラーが出ていることが判明。

Error

Method threw 'java.lang.IllegalStateException' exception. Cannot evaluate com.sun.proxy.$Proxy84.toString()

イメージ説明
今日はここまで。眠って、明日の業務後にデバッグします!

■2/1■成果振り返り

空いていたWindowsPCでローカル環境に直接MySql環境を構築し同じプロジェクトをgithubより落としてきて実行した。
→データベース連携成功...
dockerと何が違うのか...
以下Windowsでのデバッグ時画面とMacでの同じ場所での画像比較
■Windows
Windows画面
■Mac
イメージ説明

Macでは以下のエラーが出ている。

((SimpleJpaRepository)((SingletonTargetSource)((ProxyFactory)((JdkDynamicAopProxy)this.h).advised).t = No such instance field: 'h'

■2/2■成果振り返り

前回まででMysqlをローカルで環境構築してアプリケーションの動作がどうなるかを検証しました。
Windowsにて検証を行ったのですが同じソース、同じデータベース構造でデータベースの内容を画面へ表示することができました。
dockerとローカルで何が違うのか...

現在詰まっている箇所

イメージ説明
ローカルで実行した際には出ないエラーの調査をしています。

((SimpleJpaRepository)((SingletonTargetSource)((ProxyFactory)((JdkDynamicAopProxy)this.h).advised).t = No such instance field: 'h'

hフィールドを探す

hどこやねん

/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home/lib/src.zip!/java.base/java/lang/reflect/Proxy.java

上記パス中にいました。
Proxy.javaてなんだ?
イメージ説明

・macのローカル環境あんまり汚したくなかったけど仕方なくローカルにMysql環境構築しデータベース連携できるか確認
→連携成功。。。やはりdockerの設定に問題がある模様。
そして散々調べていたhフィールドですが、これはmac環境固有のもの?らしく、こちらが発生していてもデータベースとの連携は下図のように成功していました。。。

2月2日現状...どのように切り分けするべきかわからなくなっております。。。。ご意見をください。よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

asahina1979
asahina1979

2019/01/29 23:47

データが登録されてないだけ
sanezane
sanezane

2019/01/30 03:13

asahima1979さん ありがとうございます。しかし、最上部の画像(画像下部)にある通り1レコードだけですが、登録は確認しています。
asahina1979
asahina1979

2019/01/30 03:37 編集

見てる場所が違うきがしないでもないが
sanezane
sanezane

2019/01/30 05:02

リポジトリが生成されているので接続自体は成功してると認識してますが、、そこからのアプローチをどうしようか考えております。 帰ったらまたデバッグしてみます!

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。