kurodakazumichi / issues

0 stars 0 forks source link

【Java】Spring #42

Open kurodakazumichi opened 6 years ago

kurodakazumichi commented 6 years ago

Springとは

Javaで使われるWeb Frameworkとのこと

開発環境

Windows 10 Java 8 Sprint Tools Suite 3.9.4.RELEASE D:Works/java/stsを開発ルートにする。

kurodakazumichi commented 6 years ago

Spring開発の準備

Spring Tool SuiteをDownload

https://spring.io/tools

2

default

Based on Eclipse 4.7.3.a Windows 64bit 版を取得

ダウンロードしたフォルダを開発ルートへ移動

D:/Works/java/sts/sts-bundleとすればOK。

kurodakazumichi commented 6 years ago

起動

  1. D:/Works/java/sts/sts-bundle/sts-3.9.4.RELEASE/STS.extを起動する。
  2. 起動時に「Workspace」をどこにするか聞かれる
  3. D:/Works/java/sts/workspaceにする。(workspaceフォルダは新たに作る。)
  4. Launchを押す。
kurodakazumichi commented 6 years ago

新規プロジェクトの作成

  1. File > New > Spring Legacy Projectを選択
  2. Project name: HelloWorld
  3. Templates: Simple Spring Web Maven
  4. その他の項目: そのまま
  5. Finishを押す。
  6. プロジェクトが作成される。

Spring Legacy ProjectとSpring Starter Project?

Spring Legacy Projectは古いタイプのプロジェクトで 基本的な要素しかないので、必要なものは自分でいれていく系

SPring Starter ProjectはSpring Bootといういい感じのものが既にはいってて まともに開発するならこっちを使うっぽい

が、学習する時はなるべくミニマムがモットーな俺はLegacyでいくZE

kurodakazumichi commented 6 years ago

Maven Update

  1. Package Explorer(左ペインにあるはず)のHelloWorldを右クリック
  2. Maven > Update Project...を選択
  3. Update Maven Projectウィンドウが開く
  4. HelloWorldにチェックが入っている事を確認。
  5. OKを押す。

Maven Install

  1. HelloWorldを右クリック > Run As > Maven Install

Maven InstallをするとHelloWorld直下のpom.xmlに記述されている Spring Framework等がプロジェクトのライブラリとして使えるようになる。

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building HelloWorld 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.4/maven-install-plugin-2.4.pom
[INFO] Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-~~~~~~~
~~~~~~~
~~~~~~~
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.419 s
[INFO] Finished at: 2018-05-09T19:35:05+09:00
[INFO] Final Memory: 15M/204M
[INFO] ------------------------------------------------------------------------

こんな感じのログがでる。 BUILD SUCCESSとなればOK。

kurodakazumichi commented 6 years ago

アプリケーションをサーバーに登録してサーバーを起動する

サーバーに登録。

  1. ServerウィンドウのPivotal tc Server Developer Edition v4.0を右クリック
  2. Add and Removeを選択
  3. Add and Removeウィンドウが開く
  4. Avaiable:のHelloWorldを選択してAdd >
  5. Configured:にHelloWorldが追加される。
  6. Finishを押す。
  7. Add and Removeウィンドウが閉じる。

サーバーを起動

  1. ServerウィンドウのPivotal tc Server Developer Edition v4.0を右クリック
  2. Startを選択
  3. ファイアーウォールウィンドウが開いたら許可する。
  4. コンソールにServer startup in xxxx msと表示されればOK

ブラウザからアクセスする

http://localhost:8080/HelloWorldにアクセス

kurodakazumichi commented 6 years ago

http://tech.pjin.jp/blog/2016/04/28/springframework1/

【第七回】Spring Frameworkを使ってみる ~データベースにアクセスする①~にて詰み。 そもそも第1回と第7回でSpringのバージョンが違うんだが? まったく連載になってない。 バージョンに関係する依存問題でエラーが出てまともに進まない。 連載にそって試したら確実にエラーで進めないとか結構悪質なサイトなんだけど。

kurodakazumichi commented 6 years ago

【第四回】Spring Frameworkを使ってみる ~画面遷移~ 【第五回】Spring Frameworkを使ってみる ~データ受け渡し~ 【第六回】Spring Frameworkを使ってみる ~入力値チェック~ 【第七回】Spring Frameworkを使ってみる ~データベースにアクセスする①~ 【第八回】Spring Frameworkを使ってみる ~データベースにアクセスする②~ 【第九回】Spring Frameworkを使ってみる ~データベースにアクセスする③~ 【第十回】Spring Frameworkを使ってみる ~データベースにアクセスする④~

kurodakazumichi commented 6 years ago

【第六回】Spring Frameworkを使ってみる ~入力値チェック~ 【第七回】Spring Frameworkを使ってみる ~データベースにアクセスする①~ 【第八回】Spring Frameworkを使ってみる ~データベースにアクセスする②~ 【第九回】Spring Frameworkを使ってみる ~データベースにアクセスする③~ 【第十回】Spring Frameworkを使ってみる ~データベースにアクセスする④~

kurodakazumichi commented 6 years ago

DBアクセス

【第七回】Spring Frameworkを使ってみる ~データベースにアクセスする①~

記事がおかしい1

下記のソースをpom.xmlのpropertiesに足してください。

<hibernate.version>4.3.10.Final</hibernate.version>

追加って書いているが、そもそも最初から書いてある。 追加すると2重定義になってエラーになる。

記事がおかしい2

下記のソースをpom.xmlのdependenciesに足してください。

<!-- Hibernate -->
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-entitymanager</artifactId>
  <version>${hibernate.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>4.2.5.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-jpa</artifactId>
  <version>1.8.1.RELEASE</version>
</dependency>

<!-- db connection -->
<dependency>
  <groupId>commons-dbcp</groupId>
  <artifactId>commons-dbcp</artifactId>
  <version>1.4</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.38</version>
</dependency>

まず元記事はインデントがない、入門サイトでしょ?インデントつけなさい。 そしてspring-data-jpa、下記に抜粋するが、これを書くと もうずっとInternal Server Error 505になる。

<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-jpa</artifactId>
  <version>1.8.1.RELEASE</version>
</dependency>

エラー内容

java.lang.NoSuchMethodError: org.springframework.beans.factory.annotation.InjectionMetadata.needsRefresh(Lorg/springframework/beans/factory/annotation/InjectionMetadata;Ljava/lang/Class;)Z

needsRefreshというのがSpring4から追加されたものらしい

https://stackoverflow.com/questions/24674760/org-springframework-beans-factory-annotation-injectionmetadata-needsrefresh

連載記事には

Springのバージョンが4未満のものの場合は、4.X.Xに変更しましょう。 今回の記事では「4.2.5.RELEASE」に変更します

と書いてあるが、4.x.xにしたところでエラーが変わるだけ。 そもそも最初の記事ではSTS 3.7.xだったはず なぜ4.2.5.RELEASEになっているのか? 環境変わってない?そして動くか確認せず適当に書いただろう。 そもそもこういう記事書くときはかならず使ってるツールとかのバージョンを 一番最初に書けと言いたい。 書いてない記事は、正しいバージョンが解ってないと言ってるようなもの。

データベース作成

別途MySQLをインストール(もともとMySQL5.7入れてた)

データソースの作成。

Eclipseからデータベースに接続するデータソースを作成していきます。 「window」⇒「show view」⇒「other…」を選択します。 開いたポップアップの中で「Data Management」⇒「Data Source Explorer」

ない、「Data Source Explorer」なんてないよ?

解決方法

Eclipseのプラグインを入れる。というかSTSには最初から入ってないみたい。 ならプラグイン入れるところから書けよという苛立ち しかもEclipseのプラグインも、Eclipseのバージョンに依存するっぽい いったいどうやって探せというのか、初Javaerな俺には辛すぎる。

頑張る事半日。

Spring Tool Suite(STS)にEclipse Data Toolsを追加 ここを参考にした。

Eclipse Data Tools Platform(DTP)というプラグインを入れないといけないらしい

STSのHelp -> Install New Software...

Work with:という項目にリポジトリのURL?入れないといけないらしい わけがわからん。

さらにリポジトリはEclipseのバージョンによってURLも違うみたい 絶望ばかり感じる。

STSのHelp > About Spting Tool Suite ここからEclipseのバージョンが確認できた。

Platform: Eclipse Oxygen.3a (4.7.3a)

https://eclipse.org/datatools/downloads.php ここにDTPとEclipseのバージョンの関係が載ってるっぽい

Oxygenのリポジトリが1.14.1と1.14の2つあるみたいだが どっちかわからないので1.14.1にした。

STSのHelp -> Install New Software...のWork withに http://download.eclipse.org/datatools/1.14.1.201712071719/repository/

を入力してEnterするとEclipse Data Tools(中に2つくらい含まれてる)がでたので 全て選択してインストール。

インストールが終わるまで待つ。 というかインストールされてるかどうかがわからない。 インストールしたのにうまくいかないなんでって諦めかけたその時 インストール完了したからSTS再起動するよってダイアログが出た。 Eclipseもいろいろ不親切すぎるだろ。

Database Connectionの作成

これもまったく記事通りにいかない、めちゃくちゃにもほどがあるぞ。 事前条件がまったく示されていなさ過ぎて話にならない。

次にJDBCドライバーの指定をします。 Systemversion 5.1のMySQL JSBC Driverを選択して、Driver nameを入力します。

ここで死ぬ。

Unable to locate JAR/zip in file system as specified by the driver definition: mysql-connector-java-5.1.0-bin.jar.

こんなエラーがでてて選択できない。 もう力尽きた。