今、SpingBootの勉強を行っています。
ようやくです。腰が重すぎました。。。
まだまだ前段階ですが、非常に軽くて使っていて気持ちがイイですね。
今回のテーマは、Gradleで生成したアプリ(jar)をCentOS7で自動起動化するところまでを行いましたので、その記録を掲載いたします。
今回の環境
- IDE: Spring Tool Suite4 Version: 4.9.0.RELEASE
- SpringBoot: 2.4.3
- Gradle Version: 6.8.2
- JDK8
build.gradle
まずは、Gradleの定義から。bootJarタスクが重要でした。これが無いと実行可能なjarファイルにはなりませんでした。「java -jar demo-0.0.1-SNAPSHOT.jar」では起動できたけど・・・。
plugins { id 'org.springframework.boot' version '2.4.3' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '8' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' testImplementation 'org.springframework.boot:spring-boot-starter-test' compile 'org.springframework.boot:spring-boot-starter-web' compile 'org.springframework.boot:spring-boot-starter-thymeleaf' compile 'org.springframework.boot:spring-boot-devtools' } test { useJUnitPlatform() } //実行可能jarのmodule bootJar { launchScript() }
Build→Jarファイルの作成
STS上で、GradleのBuildを実行すると、下記のパスにjarファイルが作成されました。
プロジェクトDir/build/libs
今回は「demo-0.0.1-SNAPSHOT.jar」というjarが作られました。
CentOS7での操作
※CentOSには、JDKがインストールされている前提です。
まずは、jarファイルをCentOS7に格納します。
アプリ起動ユーザーの作成
# useradd demo_user
jarファイルの権限設定
# chown demo_user:demo_user /opt/demo-0.0.1-SNAPSHOT.jar # chmod ug+x /opt/demo-0.0.1-SNAPSHOT.jar
demoアプリのサービス化
demo.serviceファイルを作成します。
先に作成したdemo_userで起動させる設定にしています。
# vim /etc/systemd/system/demo.service
[Unit] Description=demo After=network.target [Service] User=demo_user ExecStart=/opt/demo-0.0.1-SNAPSHOT.jar SuccessExitStatus=143 [Install] WantedBy=multi-user.target
リロード実行
# systemctl daemon-reload
自動起動の設定
# systemctl enable demo # systemctl is-enabled demo enabled
demoアプリの起動 / 確認
いざ、demo開始です!
# systemctl start demo # systemctl status demo ● demo.service - demo Loaded: loaded (/etc/systemd/system/demo.service; enabled; vendor preset: disabled) Active: active (running) since ... Main PID: 2140 (demo-0.0.1-SNAP) Tasks: 29 Memory: 228.6M CGroup: /system.slice/demo.service tq2140 /bin/bash /opt/demo-0.0.1-SNAPSHOT.jar mq2156 /usr/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -jar /opt/demo-0.0.1-SNAPSHOT.jar
「http://ServerIPアドレス:8080/demo」にアクセスしますと・・・
無事、お約束の「Hello World」が出力されました。
Server再起動後も、きちんと表示できたので、オッケーでしょう。
エラー等で起動できない場合には、「/var/log/messages」を見てみれば、何かわかるかもしれません。
自分は、恥ずかしながら、jarの権限ではまってしまいました。
まずは、オッケーでございまーす!!!