欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

将Spring Boot应用程序部署到Tomcat中

程序员文章站 2024-02-01 10:39:28
...

部署应用程序很困难。 通常,您需要从控制台获取对服务器的控制台访问权,从该服务器中获取最新代码,然后手动实例化到您的容器中。 在本教程中,您将看到使用Tomcat的更简单方法:创建经过身份验证的Web应用程序,并使用最新版本的Tomcat,Spring Boot和Java通过浏览器进行部署。

Start Your Java 11 App

打开控制台并运行Java版本查看您使用的Java版本。

[aaa@qq.com demo]$ java -version
openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-b16)
OpenJDK 64-Bit Server VM (build 25.111-b16, mixed mode)
[aaa@qq.com demo]$

Java 8显示为版本1。8。0。

小号DKMAN is a great tool for keeping your development libraries up to date. To install it run

$ curl -s "https://get.sdkman.io" | bash

Note that SDKMAN only works on Linux and Unix-like systems. Windows users will need to install the latest Java manually.

如果SDKMAN安装正确,您将看到有关在当前终端中使该命令运行的说明。

All done!

Please open a new terminal, or run the following in the existing one:

    source "/home/karl/.sdkman/bin/sdkman-init.sh"

Then issue the following command:

    sdk help

Enjoy!!!
[aaa@qq.com demo]$

跑过资源显示的命令和sdk命令应处于活动状态。

现在只需使用以下命令安装最新的JavaSDK安装Java。

[aaa@qq.com demo]$ sdk install java

Downloading: java 11.0.2-open

In progress...

完成后Java版本应该显示11。0。2。

Done installing!

Setting java 11.0.2-open as default.
[aaa@qq.com demo]$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
[aaa@qq.com demo]$

注意:如果您已经有了SDKMAN! 并安装了Java 11,则可以使用以下命令将其设置为默认值SDK默认Java 11。0。2-open。

Create a Spring Boot Project for Tomcat

The most popular way to start a Spring project is with Spring Initializr.

将Spring Boot应用程序部署到Tomcat中

在您喜欢的Web浏览器中导航至start.spring.io,然后选择项目选项:

  • 保留为Maven,Java和最新的稳定Spring Boot(2.1.4)如果需要,请更改组和工件点击更多选择然后选择Java 11在里面依存关系框,键入并选择网页,安全和开发工具。 它们应显示为依存关系 selected在右边

现在点击产生专案一个zip文件将随项目一起下载。 只需解压缩并从命令行输入目录。 如果你ls您会看到五个文件和一个目录(src)。

[aaa@qq.com demo]$ ls
HELP.md mvnw mvnw.cmd pom.xml src

v是一个脚本,可让您使用Maven而不进行全局安装。v.cmd是此脚本的Windows版本。pom.xml描述您的项目,并src里面有您的Java代码。 (请注意,还有一个隐藏的.mvn嵌入式maven文件所在的目录!)。

让我们看看项目的工作。 类型./mvnw spring-boot:运行然后按回车。 可能需要一段时间才能安装所有内容,但最终,您应该看到类似以下的内容:

Tomcat started on port(s): 8080 (http) with context path ''
2019-03-17 19:56:49.342 INFO 10744 --- [restartedMain] com.karl.demo.DemoApplication : Started DemoApplication in 3.022 seconds (JVM running for 3.56)

注意消息Tomcat在端口8080上启动。 打开浏览器窗口以http://本地主机:8080您应该会看到一个登录页面。

将Spring Boot应用程序部署到Tomcat中

您可以使用“用户”来验证用户名和已打印到终端的密码。 登录后,您会看到404错误页面,因为您尚未创建任何代码来显示登录页面/。

Add Secure Authentication to Your Spring Boot App

让我们添加Okta身份验证。 为什么选择Okta? 因为您不想担心管理用户和哈希密码的麻烦,对吗? 朋友不要让朋友写认证-让Okta的专家代您为您做吧! 毕竟,Okta的API也是用Java和Spring Boot构建的!

Once you’ve signed up for a free account, go to Applications on your dashboard. Click Add Application, select Web, and click Next.

您现在应该在“应用程序设置”页面中。 更换登录重定向URI具有以下内容的字段:

http://localhost:8080/login/oauth2/code/okta

请点击完成在底部。 复制您的客户编号和客户机密 from the Client Credentials section和keep them somewhere safe. Now right at the top click the API标签(旁边应用领域)和then 授权服务器。 记下发行者URI看起来像:

https://{yourOktaDomain}/oauth2/default

在以下位置的项目中创建文件src / main / resources / application.yml并将这些值放入其中:

okta:  
  oauth2:
    issuer: https://{yourOktaDomain}/oauth2/default  
    client-id: {clientId}
    client-secret: {clientSecret}

现在将Okta Spring Boot Starter库添加为依赖项pom。xml。

<dependency>
    <groupId>com.okta.spring</groupId>
    <artifactId>okta-spring-boot-starter</artifactId>
    <version>1.1.0</version>
</dependency>

现在,编辑您的主Java入口文件-大概在src / main / java / com / example / demo / DemoApplication.java–并添加@RestController类的注释以及主页入口点:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
     SpringApplication.run(DemoApplication.class, args);
    }

    @GetMapping
    @ResponseBody
    public String currentUserName(Authentication authentication) {
        DefaultOidcUser userDetails = (DefaultOidcUser) authentication.getPrincipal();
        return "Hello, " + userDetails.getFullName();
    }
}

使用重新启动您的应用./mvnw spring-boot:运行或使用您的IDE来运行它。

现在,当您访问http://本地主机:8080您应该会看到Okta登录屏幕。

将Spring Boot应用程序部署到Tomcat中

输入附加的Okta用户的详细信息(您可以在此处使用与Okta开发人员帐户相同的登录名)后,您应该会看到一条欢迎消息,其中包含您注册时输入的全名:

将Spring Boot应用程序部署到Tomcat中

Hot Tip: Logging out of an OAuth2 session is more nuanced than one might first imagine. To keep testing the login process, I recommend you use private browsing windows to ensure the login screen returns; close them down when you are finished.

停止您的Spring Boot应用程序,以便您可以在其默认端口8080上运行Tomcat。

Set up Tomcat 9 for Your Spring Boot App

Getting Tomcat up and running couldn’t be easier. Start by downloading the binary compatible with your platform. Make sure to use the .zip or .tar.gz file and not the installer. Extract to a location and inside the bin directory run the startup script - startup.sh for Linux/Mac and startup.bat for Windows.

[aaa@qq.com bin]$ ./startup.sh
Using CATALINA_BASE: /home/karl/Downloads/apache-tomcat-9.0.19
Using CATALINA_HOME: /home/karl/Downloads/apache-tomcat-9.0.19
Using CATALINA_TMPDIR: /home/karl/Downloads/apache-tomcat-9.0.19/temp
Using JRE_HOME: /home/karl/.sdkman/candidates/java/current
Using CLASSPATH: /home/karl/Downloads/apache-tomcat-9.0.19/bin/bootstrap.jar:/home/karl/Downloads/apache-tomcat-9.0.19/bin/tomcat-juli.jar
Tomcat started.
[aaa@qq.com bin]$

热门提示:您也可以使用./catalina.sh运行启动您的应用。 此命令会将日志打印到您的终端,因此您无需拖尾日志即可查看情况。

浏览到http://本地主机:8080并且您应该看到Tomcat安装页面。

将Spring Boot应用程序部署到Tomcat中

Create a WAR File from Your Spring Boot Project

现在,您需要从Spring Boot应用程序中创建一个WAR文件。 将以下内容添加到<description>您的节点pom。xml。

<packaging>war</packaging>

通过将以下内容添加到依赖项列表中来删除嵌入式Tomcat服务器:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
   <scope>provided</scope>
</dependency>

最后,通过扩展主类,将您的应用程序作为servlet启用SpringBootServletInitializer:

import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {
    ...
}

现在,使用以下命令清理并打包您的应用程序:

./mvnw clean package

您应该看到类似以下的消息:

[INFO] Building war: /home/karl/tst/demo/target/demo-0.0.1-SNAPSHOT.war

记下您的新。战争生活。

Deploy a WAR to Tomcat from the Browser

您可能已经注意到,在Tomcat欢迎屏幕的右侧是三个按钮:服务器状态,经理应用,and 房东经理。 您可以从以下位置部署WAR经理应用但它需要身份验证(默认情况下没有定义用户)。

将以下内容添加到conf / tomcat-users.xml在您的Tomcat目录中:

<user username="karl" password="secret" roles="manager-gui" />

您需要重新启动Tomcat才能使此更改生效。 因为直接启动它,所以您需要自己停止该过程。 使用查找进程IDps aux | grep Tomcat。

[aaa@qq.com bin]$ ps aux | grep tomcat
karl 11813 180 1.9 7389172 159596 pts/0 Sl 09:44 0:07 /home/karl/.sdkman/candidates/java/current/bin/java -Djava.util.logging.config.file=/home/karl/Downloads/apache-tomcat-9.0.19/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /home/karl/Downloads/apache-tomcat-9.0.19/bin/bootstrap.jar:/home/karl/Downloads/apache-tomcat-9.0.19/bin/tomcat-juli.jar -Dcatalina.base=/home/karl/Downloads/apache-tomcat-9.0.19 -Dcatalina.home=/home/karl/Downloads/apache-tomcat-9.0.19 -Djava.io.tmpdir=/home/karl/Downloads/apache-tomcat-9.0.19/temp org.apache.catalina.startup.Bootstrap start
karl 11881 0.0 0.0 6268 2280 pts/0  S+ 09:44 0:00 grep tomcat
[aaa@qq.com bin]$

这是我的进程ID11813。 使用kill命令将其杀死。

kill 11813

使用重新启动服务器启动文件和以前一样。 当您单击经理应用按钮,您在上方输入的用户详细信息将带您进入管理员屏幕。

将Spring Boot应用程序部署到Tomcat中

滚动到底部到要部署的WAR文件部分。 请点击浏览…并从之前选择WAR文件。 请点击部署。

如果向上滚动,应该会看到类似/demo-0.0.1-SNAPSHOT列在应用领域部分。 点击此按钮将带我们前往http:// localhost:8080 / demo-0.0.1-SNAPSHOTTomcat是从那里为我们的应用程序提供服务的。 您会看到错误的请求错误。

将Spring Boot应用程序部署到Tomcat中

这是因为在我们的Okta应用配置中,重定向URL现在是错误的-一切都应该以演示-0。0。1-SNAPSHOT。 这个名字有点麻烦。 要更改它,请将您的WAR文件重命名为演示战争(您可以通过添加<finalName>demo</finalName>到您的构建部分pom。xml)。 现在点击取消部署在管理器窗口中,在您的应用名称旁边,然后重新部署WAR。 现在该应用应该在/演示。

现在,在您的Okta应用程序配置中,所有URL都带有/演示,例如http://localhost:8080/演示/login/oauth2/code/okta(您可以通过点击编辑接着保存)。 现在点击/演示管理器中的应用(或浏览至http://localhost:8080/演示)应该像以前一样显示欢迎屏幕。

热门提示:为确保本地开发设置与要部署到的计算机匹配,请通过将以下内容添加到您的计算机中,确保嵌入式Tomcat版本与外部服务器相同。pom.xml:

<properties>
    <tomcat.version>9.0.19</tomcat.version>
</properties>

Learn More About Tomcat, Spring Boot, and Java 11

做得好-您已将Spring Boot 2.1应用程序远程部署到Tomcat 9,全部由Java 11支持!

I hope you found this tutorial useful. You can find the GitHub repo for this example at oktadeveloper/okta-spring-boot-tomcat-example.

请查看以下一些链接,以获取更多信息:

Like what you learned today? Follow us on Twitter and subscribe to our YouTube channel.

from: https://dev.to//oktadev/deploy-a-spring-boot-application-into-tomcat-5gll