Spring Boot通过大量的默认配置,让使用Spring框架进行开发变得方便快捷,从而使得Java开发人员专注于程序原型设计。本文介绍如何创建一个简单的Spring Boot应用,然后通过NGINX反向代理进行发布。
你需要一个同时装有Java 8和NGINX的Linode虚拟主机。如果这些已经安装好了,请跳过此步。
1. 安装software-properties-common
:
sudo apt install software-properties-common
2. 添加Oracle PPA仓库:
sudo apt-add-repository ppa:webupd8team/java
3. 更新所有已安装的软件包:
sudo apt update
4. 安装Oracle JDK。若需要安装Java 9 JDK,将java8
改为java9
的命令为:
sudo apt install oracle-java8-installer
5. 检查Java版本:
java -version
以下步骤介绍在Ubuntu上安装从NGINX官方库下载的NGINX开发版。需要了解NGINX其他发行版,请参阅NGINX管理指南。若需要了解如何为生产环境配置NGINX,请参阅NGINX入门指南。
在文本编辑器中打开/etc/apt/sources.list
,并在文件最后追加以下内容。再将CODENAME
替换为Ubuntu版本的代号。例如,为Ubuntu 18.04,代号为Bionic Beaver(仿生海狸),以下使用bionic
替代CODENAME
:
/etc/apt/sources.list1
deb http://nginx.org/packages/mainline/ubuntu/ CODENAME nginx
2. 导入仓库的包签名密钥并将其添加到apt
:
sudo wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
3. 安装NGINX:
sudo apt update
sudo apt install nginx
4. 确保NGINX正在运行并设置开机自启动:
sudo systemctl start nginx
sudo systemctl enable nginx
Spring Boot CLI使得搭建项目框架变得更加容易。SDKMAN!是一个简化Spring CLI安装和构建的工具(如同Gradle或Maven)。使用Spring Boot CLI,可以直接在命令行中创建新项目。
1. 安装SDKMAN!的依赖项:
sudo apt install unzip zip
2. 安装SDKMAN!:
curl -s https://get.sdkman.io | bash
3. 按照控制台中打印的说明操作:
source "/home/username/.sdkman/bin/sdkman-init.sh"
验证SDKMAN!是否已安装:
sdk help
4. 安装Spring CLI:
sdk install springboot
验证安装:
spring version
5. 安装Gradle:
sdk install gradle 4.5.1
Downloading: gradle 4.5.1
In progress...
######################################################################## 100.0%
Installing: gradle 4.5.1
Done installing!
有许多可用的构建工具。Spring Boot CLI默认使用Maven,但本文中将使用Gradle。想了解有关Maven和Gradle之间差异的讨论,请参阅Maven和Gradle比较。
1. 使用Spring Boot CLI创建一个新项目。使用项目框架创建一个名为hello-world
的新目录。
spring init --build=gradle --dependencies=web --name=hello hello-world
注意要查看Spring Boot CLI的可能参数的完整列表,请运行:
spring init --list
2. 进入项目目录。此示例创建一个Endpoint以在Spring应用中返回"Hello world"。需添加两个额外的引用和一个新类。
~/hello-world/src/main/java/com/example/helloworld/HelloApplication.java
package com.example.helloworld;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
@RestController
class Hello {
@RequestMapping("/")
String index() {
return "Hello world";
}
}
3. 构建应用程序。这将在在项目中创建一个名为build
的新目录。
./gradlew build
4. 运行嵌入了Tomcat服务器的应用。该应用将在localhost:8080
上运行。可以按Ctrl+C
停止。
java -jar build/libs/hello-world-0.0.1-SNAPSHOT.jar
5. 应用可以在不链接jar文件的情况下运行。
gradle bootRun
6. 测试应用是否正确地在localhost
中运行:
curl localhost:8080
Hello world
7. 按CTRL+C
停止Tomcat服务器。
将Spring Boot应用设置为服务以在服务器重启时自启动:
/etc/systemd/system/helloworld.service
[Unit]
Description=Spring Boot HelloWorld
After=syslog.target
After=network.target[Service]
User=username
Type=simple
[Service]
ExecStart=/usr/bin/java -jar /home/linode/hello-world/build/libs/hello-world-0.0.1-SNAPSHOT.jar
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=helloworld
[Install]
WantedBy=multi-user.target
启动服务:
sudo systemctl start helloworld
检查状态是否生效:
sudo systemctl status helloworld
现在Spring应用已作为服务运行,NGINX代理允许将应用部署到非特权端口并设置SSL。
1. 为反向代理创建NGINX配置文件:
/etc/nginx/conf.d/helloworld.conf
server {
listen 80;
listen [::]:80;
server_name example.com;
location / {
proxy_pass http://localhost:8080/;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}
}
2. 测试配置以确保无误:
sudo nginx -t
3. 如果没有错误,请重新启动NGINX以使更改生效:
sudo systemctl restart nginx
4. 现在可以通过浏览器访问该应用。访问Linode的公共IP地址,应显示"Hello world"消息。
想进一步了解本文提及的技术细节,你可以参考以下资源。虽然提供这些资料的初衷是希望它们对你有切实的帮助,但请注意,Linode社区无法保证外部托管材料的准确性或及时性。