タイガー!タイガー!じれったいぞー!(SE編)

AS400, Java, JavaEE, JSF等の開発、習慣など。日々の気づきをまとめたブログ(備忘録)

【SpringBoot】CentOS7でjar(Gradle)を自動起動させるまで

今、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」にアクセスしますと・・・

f:id:no14141:20210225191546j:plain

無事、お約束の「Hello World」が出力されました。

Server再起動後も、きちんと表示できたので、オッケーでしょう。

エラー等で起動できない場合には、「/var/log/messages」を見てみれば、何かわかるかもしれません。

自分は、恥ずかしながら、jarの権限ではまってしまいました。

まずは、オッケーでございまーす!!!