ロリポップでPythonを使ってスクレイピング。モジュールを指定フォルダにインストールして環境構築。

phtyonロゴ

筆者は、レンタルサーバはロリポップを使っているのですが、Pythonでスクレイピングをするための環境構築で、ちょっと手こずりました。
原因がわかってしまえば単純なことだったので、記事として残しておきます。


環境情報


  • ロリポップレンタルサーバ
  • Python 3.4.1

モジュールのインストールコマンド


ロリポップでPythonのモジュールをインストールする方法は以下になります。
TeraTermにSSHで接続し、以下のコマンドを実行します。


/usr/local/bin/python -m pip install ※モジュール名

Pythonでスクレイピングをおこなうためには「beautifulsoup3」というモジュールが必要です。
しかし、上記のコマンドで「beautifulsoup3」をインストールしようとするとエラーが発生し、インストールすることができません。


$ /usr/local/bin/python -m pip install beautifulsoup3
Downloading/unpacking beautifulsoup3
  Real name of requirement beautifulsoup3 is beautifulsoup4
  Could not find any downloads that satisfy the requirement beautifulsoup3
Cleaning up...
No distributions at all found for beautifulsoup3
Storing debug log for failure in /home/users/0/oops.jp-sakusaku/.pip/pip.log
[oops.jp-sakusaku@users443 winningCollection]$ /usr/local/bin/python -m pip install beautifulsoup
Downloading/unpacking beautifulsoup
  Downloading BeautifulSoup-3.2.2.tar.gz
  Running setup.py (path:/tmp/pip_build_oops.jp-sakusaku/beautifulsoup/setup.py) egg_info for package beautifulsoup
    Traceback (most recent call last):
      File "<string>", line 17, in <module>
      File "/tmp/pip_build_oops.jp-sakusaku/beautifulsoup/setup.py", line 3
        "You're trying to run a very old release of Beautiful Soup under Python 3. This will not work."<>"Please use Beautiful Soup 4, available through the pip package 'beautifulsoup4'."
                                                                                                        ^
    SyntaxError: invalid syntax
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):

  File "<string>", line 17, in <module>

  File "/tmp/pip_build_oops.jp-sakusaku/beautifulsoup/setup.py", line 3

    "You're trying to run a very old release of Beautiful Soup under Python 3. This will not work."<>"Please use Beautiful Soup 4, available through the pip package 'beautifulsoup4'."

                                                                                                    ^

SyntaxError: invalid syntax

----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /tmp/pip_build_oops.jp-sakusaku/beautifulsoup
Storing debug log for failure in /home/users/0/oops.jp-sakusaku/.pip/pip.log

インストールとパス設定


インストール、および、Python実行時のパス設定にコツがあります。
前提として、以下のフォルダ構成を前提とします。


------
    |
    |---python
    |    |
    |    |---vendor         ・・・  Pythonの個別モジュールインストール先
    |
    |---test
      |
      |---scriping
           |
           |---scriping.sh  ・・・  作成したプログラムを実行するシェル
           |
           |---module       ・・・  作成プログラムの格納フォルダ

まず、インストールしたいモジュールである「beautifulsoup3」は個別モジュールインストール先である「python/vendor」にインストールする必要があります。
詳しい理由はわからないですが、「mysql-connector-python-rf」はインストール先を選択しなくても正常にインストールできたのですが、どうやら「beautifulsoup3」は自身で作成するフォルダにインストールする必要があるようです。


コマンドは以下になります。
「python」フォルダで以下のコマンドを実行します。


/usr/local/bin/python -m pip install BeautifulSoup --target ./vendor

このコマンドを実行することで、vendorフォルダ配下に「beautifulsoup3」のモジュールがインストールされます。


次にパス設定です。
実行するPythonのプログラムに「python/vendor」へのパスを設定する必要があります。
実行するPythonのプログラムは、「test/scriping/module」に格納されています。


#!/usr/local/bin/python3.4
# coding: utf-8
import os
import sys
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), '../../../python/vendor'))
from bs4 import BeautifulSoup 

これで、Pythonでスクレイピングのプログラムを実行する環境構築は完了です。



Apache+Tomcatのインストールと連携設定

apache

こんにちは。

さくさくTECHブロガーの「さく」です。


今回は、ApacheとTomcatをインストールし、連携をおこなうまでの方法を紹介します。


ApacheはHTTPサーバで、TomcatはWEBサーバになります。
どちらも単独で動かすことができますが、ちょっとしたWEBアプリケーションでは、連携して環境を構築するパターンが多いです。

その場合、フロント側にApache、バック側にTomcatを設置します。
WEBアプリケーションはTomcat上に乗せた場合、Apacheで受けたHTTPリクエストをTomcatに連携する必要があります。


環境情報


  • OS:Windows10
  • Apache:Apache 2.4.41
  • Tomcat:Tomcat 8.5.51

Apacheのダウンロードとインストール


今回は、Windows(64Bit)の「Apache 2.4.41」をダウンロードします。

Apacheのダウンロードは、以下のサイトから可能です。



Apacheのダウンロード

ZIPファイルを解凍すると、「httpd-2.4.41-win64-VC14」というフォルダが解凍されます。
「httpd-2.4.41-win64-VC14」フォルダ配下の「Apache24」を、Cドライブ直下に格納します。


次のDOSプロンプトを起動し、インストールの準備をおこないます。
DOSプロンプトを管理者権限で起動します。

管理者として実行

ユーザアカウント制御の確認ダイアログが表示されますが、「はい」を押下して先に進みます。

管理者としての実行

DOSプロンプトが開いたら、先ほどダウンロードした「Apache24」配下に存在する「\bin」フォルダに移動します。

コマンドプロンプト

以下コマンドを実行し、インストールを開始します。

httpd.exe -k install

インストールコマンドを実行していますが、実態はサービス化とサービスの起動をおこなっているようです。
なので、サービスの起動に失敗した場合は以下ようなメッセージが表示されます。

c:\Apache24\bin>httpd.exe -k install
Installing the 'Apache2.4' service
The 'Apache2.4' service is successfully installed.
Testing httpd.conf....
Errors reported here must be corrected before the service can be started.
(OS 10013)アクセス許可で禁じられた方法でソケットにアクセスしようとしました。  : AH00072: make_sock: could not bind to address [::]:80
(OS 10013)アクセス許可で禁じられた方法でソケットにアクセスしようとしました。  : AH00072: make_sock: could not bind to address 0.0.0.0:80
AH00451: no listening sockets available, shutting down
AH00015: Unable to open logs

「Errors reported・・・」以降がエラーの内容です。
筆者の場合は上記のようなエラーになりましたが、インストールしようとするマシンによってエラーの内容は異なるかと思います。


今回は、上記エラーの原因を探ります。
エラーメッセージの内容から、Apacheが使用する80ポートが既に使用されているようです。
「netstat -oab」コマンドを実行し、80ポートを使用しているアプリケーションを探します。

c:\Apache24\bin>netstat -oab
アクティブな接続
  プロトコル  ローカル アドレス      外部アドレス           状態            PID
  TCP         0.0.0.0:80             DESKTOP-U7JE3FQ:0      LISTENING       4

PID=4のアプリケーションが80ポートを使用しているようです。
PID=4のアプリケーションを特定します。


「tasklist」コマンドを実行して確認してみます。

c:\Apache24\bin>tasklist
イメージ名                     PID セッション名     セッション# メモリ使用量
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0          8 K
System                           4 Services                   0      1,492 K

「System」ってあるけど。。。なに?って感じです。


いろいろググりましたが、特定するのが面倒になってきたので、Apacheのデフォルトポートを変更することにします。
Apacheのデフォルトポートは、「C:\Apache24\conf\httpd.conf」に定義されています。
『Listen』で検索すると80と定義されている箇所があるので、アプリケーションが使用していないポートに変更します。
筆者は81に変更してみました。

# Change this to Listen on specific IP addresses as shown below to 
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
#80→81
Listen 81

再度、Apacheを起動してみます。
「コントロールパネル」→「サービス」からApacheを指定し、サービスの開始をおこないます。
状態が「実行中」になったら起動成功になります。

サービスでのApache起動確認

最後にブラウザからアクセスして、Apacheが起動したかを確認します。
「http://localhost:81/」をブラウザのURLバーに入力し、起動確認します。

Apacheの起動確認

WEB画面上に「It works!」が表示されていれば、Apacheがきちんと起動していることになります。


これで、Apacheのインストールと起動確認は完了です。


Tomcatのダウンロードとインストール


今回は、Windows(64Bit)の「Tomcat 8.5.51」をダウンロードします。
バイナリ版をダウンロードします。



Tomcatのダウンロード

ZIPファイルを解凍すると、「apache-tomcat-8.5.51」というフォルダが解凍されます。
そのフォルダをCドライブ直下に格納します。


ここから、Tomcat起動のための準備をおこないます。


最初に「CATALINA_HOME」の設定をおこないます。

「CATALINA_HOME」の設定

次に、tomcatのbin下に「パス」を設定します。

tomcatのパス設定

最後に「JAVA_HOME」です。

「JAVA_HOME」の設定

環境変数の設定は完了したらので、Tomcatを起動してみます。
Apacheのインストール時と同様に、管理者権限でDOSプロンプトをひらきます。
「c:\apache-tomcat-8.5.51\bin」に移動したら、「startup.bat」を実行します。

c:\apache-tomcat-8.5.51\bin>startup.bat

別ウィンドウでログが表示されれば起動成功です。
以下のようなログがウィンドウに表示されます。
以下のログは、Tomcatのログフォルダにも出力されます。

15-Feb-2020 16:59:55.242 情報 [main] org.apache.catalina.core.StandardService.startInternal サービス [Catalina] を起動します
15-Feb-2020 16:59:55.242 情報 [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.51
15-Feb-2020 16:59:55.253 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Webアプリケーションディレクトリ [C:\apache-tomcat-8.5.51\webapps\docs] を配備します
15-Feb-2020 16:59:55.583 警告 [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom セッション ID を生成するための SecureRandom インスタンスの作成に [147] ミリ秒かかりました。アルゴリズムは [147] です。
15-Feb-2020 16:59:55.599 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory ディレクトリ [C:\apache-tomcat-8.5.51\webapps\docs] の Web アプリケーションの配置は [346] ms で完了しました。
15-Feb-2020 16:59:55.599 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Webアプリケーションディレクトリ [C:\apache-tomcat-8.5.51\webapps\examples] を配備します
15-Feb-2020 16:59:55.898 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory ディレクトリ [C:\apache-tomcat-8.5.51\webapps\examples] の Web アプリケーションの配置は [299] ms で完了しました。
15-Feb-2020 16:59:55.898 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Webアプリケーションディレクトリ [C:\apache-tomcat-8.5.51\webapps\host-manager] を配備します
15-Feb-2020 16:59:55.944 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory ディレクトリ [C:\apache-tomcat-8.5.51\webapps\host-manager] の Web アプリケーションの配置は [46] ms で完了しました。
15-Feb-2020 16:59:55.945 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Webアプリケーションディレクトリ [C:\apache-tomcat-8.5.51\webapps\manager] を配備します
15-Feb-2020 16:59:55.972 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory ディレクトリ [C:\apache-tomcat-8.5.51\webapps\manager] の Web アプリケーションの配置は [27] ms で完了しました。
15-Feb-2020 16:59:55.972 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Webアプリケーションディレクトリ [C:\apache-tomcat-8.5.51\webapps\ROOT] を配備します
15-Feb-2020 16:59:55.995 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory ディレクトリ [C:\apache-tomcat-8.5.51\webapps\ROOT] の Web アプリケーションの配置は [23] ms で完了しました。
15-Feb-2020 16:59:56.000 情報 [main] org.apache.coyote.AbstractProtocol.start プロトコルハンドラー ["http-nio-8080"] を開始しました。
15-Feb-2020 16:59:56.011 情報 [main] org.apache.catalina.startup.Catalina.start Server startup in 797 ms

最後にブラウザからアクセスして、Tomcatが起動したかを確認します。
「http://localhost:8080/」をブラウザのURLバーに入力し、起動確認します。

Tomcatの起動確認

上記のTomcat画面が表示されれば、Tomcatの起動成功です。


ちなみに、起動は「startup.bat」ですが、終了は「shutdown.bat」になります。
「shutdown.bat」を実行すると、Tomcatは停止されます。


ApacheとTomcatのバージョン確認


インストールしたApacheとTomcatのバージョンを確認しておきます。

Apacheのバージョンは、DOSプロンプトで以下のコマンドを実行します。

c:\Apache24\bin>httpd -v
Server version: Apache/2.4.41 (Win64)
Apache Lounge VC14 Server built:   Aug 12 2019 10:48:01

インストールしたApacheのバージョンが「2.4.41」であることがわります。


次にTomcatのバージョンを確認します。
Tomcatのバージョンは、インストールされた「version.bat」を実行します。

C:\Program Files\Apache Software Foundation\Tomcat 8.5\bin>version.bat
Using CATALINA_BASE:   "C:\Program Files\Apache Software Foundation\Tomcat 8.5"
Using CATALINA_HOME:   "C:\Program Files\Apache Software Foundation\Tomcat 8.5"
Using CATALINA_TMPDIR: "C:\Program Files\Apache Software Foundation\Tomcat 8.5\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk1.8.0_60"
Using CLASSPATH:       "C:\Program Files\Apache Software Foundation\Tomcat 8.5\bin\bootstrap.jar;C:\Program Files\Apache Software Foundation\Tomcat 8.5\bin\tomcat-juli.jar"
Server version: Apache Tomcat/8.0.41.0
Server built:   Sep 28 2017 10:30:11 UTC
Server number:  8.0.41.0
OS Name:        Windows 10
OS Version:     10.0
Architecture:   amd64
JVM Version:    1.8.0_60-b27
JVM Vendor:     Oracle Corporation

インストールしたTomcatのバージョンが「8.0.41」であることがわります。



ApacheとTomcatの連携設定


最後に、ApacheとTomcatの連携をおこないます。
Apacheでリクエストを受け付け、受け付けたリクエストをTomcatに転送します。


Tomcatに連携するドキュメントルートを準備


Tomcatに新たなドキュメントルートを設けます。
最終的に、ここで作成するドキュメントルートについて、Apacheと連携します。


今回は、Tomcatのドキュメントルートに「test」というフォルダを作成し、HelloWorldを表示するHTMLを準備します。


Tomcatにアクセスし、配置した「helloWorld.html」がブラウザで表示されることを確認します。
ブラウザで「http://localhost:8080/test/helloWorld.html」を入力して確認します。

ドキュメントルートの設定

この時点では、まだApacheとTomcatの接続はおこなわれていません。
8080ポートでアクセスしているので、現時点ではまだTomcat直接アクセスになっています。


8080ポートを停止し、AJPプロトコルでの接続準備


現時点では8080ポートで直接接続が可能な状態ですが、Apache経由での接続に切り替えるため、8080ポートでの直接接続を出来ないようにします。


Tomcatインストールディレクトリの「\conf\server.xml」をひらき、8080ポートでの接続設定をコメントアウトします。

    <!--					
    <Connector port="8080" protocol="HTTP/1.1"					
               connectionTimeout="20000"					
               redirectPort="8443" />					
    -->					

server.xmlの修正が完了したらTomcatを再起動します。

再起動が完了したら、再度、8080ポートへのアクセスをおこない、アクセスできなかったら設定変更は成功です。

server.xmlの設定変更

次に、「AJP/1.3」を使用してApacheとの接続準備をおこないます。
インストール時点でserver.xmlに設定が入っている場合もあれば、設定が入っているがコメントアウトされている場合もあります。
筆者のTomcatインストール時点ではコメントアウトされていたので、Apacheとの接続設定部分についてコメントアウトをはずしておきます。

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443" />

server.xmlの修正が完了したらTomcatを再起動します。
しかし、上記の設定(デフォルト)では、エラーが出てしまい起動に失敗してしまいました。

15-Feb-2020 17:50:18.727 重大 [main] org.apache.catalina.core.StandardService.startInternal Failed to start connector [Connector[AJP/1.3-8009]]		
	org.apache.catalina.LifecycleException: プロトコルハンドラの起動に失敗しました	
		at org.apache.catalina.connector.Connector.startInternal(Connector.java:1057)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardService.startInternal(StandardService.java:440)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:766)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.startup.Catalina.start(Catalina.java:688)
		at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
		at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.lang.reflect.Method.invoke(Method.java:497)
		at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
		at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
	Caused by: java.lang.IllegalArgumentException: The AJP Connector is configured with secretRequired="true" but the secret attribute is either null or "". This combination is not valid.	
		at org.apache.coyote.ajp.AbstractAjpProtocol.start(AbstractAjpProtocol.java:274)
		at org.apache.catalina.connector.Connector.startInternal(Connector.java:1055)
		... 12 more

どうやら「secretRequired」というオプションの設定が必須のようです。
この設定は、AJPコネクタを信頼できないサイトと接続する際に使用するオプションのようです。
Tomcatのマニュアルに「信頼できるサイトと接続する場合にのみfalseを設定すること」とあるので、今回は「false」を設定します。


    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               secretRequired="false"
               redirectPort="8443" />

server.xmlの修正が完了したらTomcatを再起動し、エラーが発生せずに起動が完了したら変更完了です。


Apacheの設定


最後にApacheの設定をおこないます。
Apache側でproxy_ajpを使用するようにします。


proxy_ajpを使用するためには、Apacheのproxy_ajpモジュールを使用するようにします。
使用するモジュールは以下の2つです。


  • mod_proxy.so
  • mod_proxy_ajp.so

Apacheのhttpd.conf内をモジュール名で検索し、以下のようにコメントアウトをはずします。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

一応、Apacheを再起動して無事に起動すること(モジュールを使えるようになったこと)を確認します。

Apacheの起動確認

最後に、ApacheにTomcatとの接続設定をおこないます。
以下の設定を追加します。

<Location /test/>					
    ProxyPass ajp://localhost:8009/test/					
</Location>					

この設定を「httpd.conf」に追加すればよいのですが、Apacheの記述ルールに従って記述を追加します。
「httpd-proxy.conf」を作成し、上記の記述を追加し、「httpd.conf」の中に「httpd-proxy.conf」の読み込み設定をおこなえば設定完了です。


Include conf/extra/httpd-proxy.conf

最後にApacheを再起動して無事に起動が完了したら設定完了です。


これで、ApacheとTomcatがAJPを使用して接続されました。
以下のURLをブラウザに入力して、最終確認します。


http://localhost:81/test/helloWorld.html

ApacheとTomcatの接続設定

Apacheのデフォルトポートに設定した「81」を経由して、Tomcat上に格納したHelloWorldを表示するHTMLの表示がおこなわれました。




SpringBatchを始めよう!開発環境からサンプル実行まで

SpringFrameWork

皆さんは、Javaのバッチ処理をどのように構築しているでしょうか?

僕は、社内で用意しているライブラリを使用してバッチ処理をコーディングすることが多いです。

しかし、Web画面はSpringMVCをよく使っています。


SpringBatchの存在は前々から知から知っていたのですが、社内ライブラリを使ったバッチの参考処理が数多くあるので、なかなかSpringBatchに手を出せずにいました。

しかも、画面はSpringMVCを使っているのに、なぜバッチはSpringBatchを使わないのかという疑問を日々感じていました


今回は、SpringBatchを使うための開発環境構築とサンプルの実行までを解説していきます。

これからSpringBatchを使おうと思っている人の参考になればと思います。


SpringBatchとは

SpringBatchとは、バッチのJavaアプリケーションフレームワークです。

Springがもつ概念として「DI」「AOP」「トランザクション管理」がありますが、SpringBatchも同様の概念で構築されています。


まあ、ピンとくるようなこないような。。。ですが、まずは環境を作って動かしましょう!


環境情報

WindowsマシンにSpringBatchの開発環境を構築します。

今回は、STS(Spring Tools Suite)を使用します。

  • OS:Windows7
  • STS:Eclipse spring-tool-suite-4-4.2.1

STSの構築

STS(Spring Tools Suite)は、Spring用のIDEとなります。

今回は、EclipseベースのIDEを使用します。

Spring Tools 4 for Eclipseのダウンロード

Springのサイトから「Spring Tools 4 for Eclipse」をダウンロードします。

Spring Tools 4

Spring Tools 4 for Eclipseのダウンロード画面

ダウンロードが成功すると、以下のZIPファイルがダウンロードフォルダに保存されます。

  • spring-tool-suite-4-4.2.1.RELEASE-e4.11.0-win32.win32.x86_64.zip

SpringToolSuite4の設定

ダウンロードしたZIPファイルを解凍し、「SpringToolSuite4.exe」をダブルクリックしてSpringToolSuiteを起動します。

SpringToolSuite4の場所

通常のEclipseと同様にワークスペースの設定ウィンドウがひらきます。

ワークスペースフォルダを設定して「Launch」ボタンを押下します。

ワークスペースの設定


ウィンドウが起動すると気が付くと思いますが、英語版のままです。

日本語化するためには、まずは以下サイトから日本語化プラグインをダウンロードします。

MargeDoc Project

日本語化ツールのダウンロード


ダウンロードが成功すると、以下のZIPファイルがダウンロードフォルダに保存されます。

  • pleiades-win.zip

ZIPファイルを解凍して「setup.exe」をダブルクリックすると、日本語化のプラグインインストールが開始されます。

日本語化プラグインのsetup.exe

setup.exeをクリックすると、日本語化プラグインの設定ウィンドウが表示されます。

「日本語化するアプリケーション」で「SpringToolSuite4.exe」を選択します。

「eclipsec.exe」ではありません。

「日本語化するアプリケーション」を選択すれば、他2つのパスは自動的に設定されます。

パスが設定されていることを確認したら、「日本語化する」ボタンを押下します。

日本語化プラグインの設定ウィンドウ

完了ウィンドウが表示されれば成功です。

日本語化かの完了ウィンドウ

再度、 SpringToolSuiteを起動します。

念のためクリーン起動(SpringToolSuite4.exe -clean.cmd)で起動します。

日本語化が完了した画面

メニューが日本語で表示されていれば、日本語化は成功です。

プロジェクトの作成から実行まで

プロジェクトの作成

まずはプロジェクトの作成をおこないます。

ファイル → 新規 → プロジェクト を選択します。

プロジェクトの作成

新規プロジェクトウィンドウで、Spring Boot → Spring 入門コンテンツのインポート を選択して、「次へ」を押下します。

新規プロジェクトウィンドウ

インポートするテンプレートで「Batch Processing」を選択して「完了」ボタンを押下します。

コンテンツのインポート

パッケージエクスプローラーにプロジェクトが表示されたら、プロジェクトの作成完了です。

SpringBathプロジェクト作成完了

プロジェクトが2つできていますが、以下の2種類になります。

  • 完成版プロジェクト:gs-batch-processing-complete
  • テンプレートプロジェクト:gs-batch-processing-initial

プロジェクトの構成設定

完成版プロジェクトである「gs-batch-processing-complete」の構成設定をおこないます。

以下の手順でメインクラスを設定するのみです。

プロジェクトを右クリックで選択してメニューをひらき、実行 → 実行の構成 を選択します。

プロジェクトの実行の構成選択

実行構成ウィンドウがひらいたら、左メニューで「Javaアプリケーション」→ 「新規構成」を選択します。

右ペーンの「メイン・クラス」で検索ボタンを押下し「Application – Hello」クラスを選択します。

選択すると、「メイン・クラス」に「hello.Appication」が表示されるので、「実行」ボタンを押下します。


Application-helloのメイン・クラス設定

プロジェクトの実行

プロジェクトの構成で「実行」ボタンを押下したタイミングで、ビルドとプログラム実行がおこなわれます。

Spring Tool Suiteのコンソールに以下文字列が表示されたら、プログラム実行の成功です。



  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.4.RELEASE)

2019-05-06 01:57:42.101  INFO 9804 --- [           main] hello.Application                        : Starting Application on Ntomo-PC with PID 9804 (C:\SpringTools\workspace\gs-batch-processing-complete\target\classes started by Ntomo in C:\SpringTools\workspace\gs-batch-processing-complete)
2019-05-06 01:57:42.145  INFO 9804 --- [           main] hello.Application                        : No active profile set, falling back to default profiles: default
2019-05-06 01:57:45.698  INFO 9804 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2019-05-06 01:57:45.709  WARN 9804 --- [           main] com.zaxxer.hikari.util.DriverDataSource  : Registered driver with driverClassName=org.hsqldb.jdbcDriver was not found, trying direct instantiation.
2019-05-06 01:57:46.901  INFO 9804 --- [           main] com.zaxxer.hikari.pool.PoolBase          : HikariPool-1 - Driver does not support get/set network timeout for connections. (feature not supported)
2019-05-06 01:57:46.947  INFO 9804 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2019-05-06 01:57:49.255  INFO 9804 --- [           main] o.s.b.c.r.s.JobRepositoryFactoryBean     : No database type set, using meta data indicating: HSQL
2019-05-06 01:57:50.046  INFO 9804 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : No TaskExecutor has been set, defaulting to synchronous executor.
2019-05-06 01:57:50.574  INFO 9804 --- [           main] hello.Application                        : Started Application in 11.109 seconds (JVM running for 13.556)
2019-05-06 01:57:50.577  INFO 9804 --- [           main] o.s.b.a.b.JobLauncherCommandLineRunner   : Running default command line with: []
2019-05-06 01:57:50.754  INFO 9804 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [FlowJob: [name=importUserJob]] launched with the following parameters: [{run.id=1}]
2019-05-06 01:57:50.827  INFO 9804 --- [           main] o.s.batch.core.job.SimpleStepHandler     : Executing step: [step1]
2019-05-06 01:57:50.988  INFO 9804 --- [           main] hello.PersonItemProcessor                : Converting (firstName: Jill, lastName: Doe) into (firstName: JILL, lastName: DOE)
2019-05-06 01:57:50.989  INFO 9804 --- [           main] hello.PersonItemProcessor                : Converting (firstName: Joe, lastName: Doe) into (firstName: JOE, lastName: DOE)
2019-05-06 01:57:50.990  INFO 9804 --- [           main] hello.PersonItemProcessor                : Converting (firstName: Justin, lastName: Doe) into (firstName: JUSTIN, lastName: DOE)
2019-05-06 01:57:50.991  INFO 9804 --- [           main] hello.PersonItemProcessor                : Converting (firstName: Jane, lastName: Doe) into (firstName: JANE, lastName: DOE)
2019-05-06 01:57:50.991  INFO 9804 --- [           main] hello.PersonItemProcessor                : Converting (firstName: John, lastName: Doe) into (firstName: JOHN, lastName: DOE)
2019-05-06 01:57:51.023  INFO 9804 --- [           main] hello.JobCompletionNotificationListener  : !!! JOB FINISHED! Time to verify the results
2019-05-06 01:57:51.033  INFO 9804 --- [           main] hello.JobCompletionNotificationListener  : Found <firstName: JILL, lastName: DOE> in the database.
2019-05-06 01:57:51.035  INFO 9804 --- [           main] hello.JobCompletionNotificationListener  : Found <firstName: JOE, lastName: DOE> in the database.
2019-05-06 01:57:51.036  INFO 9804 --- [           main] hello.JobCompletionNotificationListener  : Found <firstName: JUSTIN, lastName: DOE> in the database.
2019-05-06 01:57:51.036  INFO 9804 --- [           main] hello.JobCompletionNotificationListener  : Found <firstName: JANE, lastName: DOE> in the database.
2019-05-06 01:57:51.037  INFO 9804 --- [           main] hello.JobCompletionNotificationListener  : Found <firstName: JOHN, lastName: DOE> in the database.
2019-05-06 01:57:51.043  INFO 9804 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [FlowJob: [name=importUserJob]] completed with the following parameters: [{run.id=1}] and the following status: [COMPLETED]
2019-05-06 01:57:51.085  INFO 9804 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2019-05-06 01:57:51.101  INFO 9804 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

「gs-batch-processing-complete」は、「resources」に格納されている「sample-data.csv」を標準出力するサンプルです。

そのため、”JILL””JOE”といった名前が標準出力されています

まとめ

いかがでしたでしょう?

まずはSpringBatchの開発環境が構築できたかと思います。

次回から、構築した環境を使用して様々なアプリケーションの構築を行っていきたいと思います。

 

それではまた!