将 Vaadin/SpringBoot 部署为 WAR
Deploying Vaadin/SpringBoot as WAR
我正在尝试将最小的 Vaadin/SpringBoot 应用程序作为 WAR 文件部署到独立的 Tomcat。
如果我 运行 gradle vaadinRun
并在 localhost:8080
下访问,一切正常,但使用 gradle war
创建 WAR 文件,然后将其复制到 webapps我的 Tomcat 文件夹导致 404。不幸的是 Tomcat 日志没有显示任何内容。尝试通过 localhost:8080/hello-vaadin
.
访问
这是应用程序 class 本身:
package com.somecompany;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.boot.web.servlet.ServletComponentScan;
import com.vaadin.spring.annotation.EnableVaadin;
@ServletComponentScan
@SpringBootApplication
@EnableVaadin
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) throws Exception {
configureApplication(new SpringApplicationBuilder()).run(args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return configureApplication(builder);
}
private static SpringApplicationBuilder configureApplication(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
}
这是对应的UI-class:
package com.somecompany;
import com.vaadin.annotations.Theme;
import com.vaadin.spring.annotation.SpringUI;
import com.vaadin.server.VaadinRequest;
import com.vaadin.ui.UI;
import com.vaadin.ui.Grid;
import org.springframework.beans.factory.annotation.Autowired;
import com.vaadin.ui.Label;
@SpringUI
@Theme("valo")
public class HelloWorldUI extends UI {
@Autowired
public HelloWorldUI() {
}
@Override
protected void init(VaadinRequest request) {
setContent(new Label("Hello World!"));
}
}
最后是我的 gradle 脚本:
plugins {
id "java"
id "com.devsoap.plugin.vaadin" version "1.2.4"
id "org.springframework.boot" version "1.5.7.RELEASE"
}
jar {
baseName = 'com.somecompany.hello-vaadin'
version = '0.0.1-SNAPSHOT'
}
apply plugin: 'war'
war {
baseName = 'hello-vaadin'
version = '1.0'
}
springBoot {
mainClass = 'com.somecompany.Application'
}
bootRepackage {
mainClass = 'com.somecompany.Application'
}
repositories {
jcenter()
mavenCentral()
maven { url "http://oss.sonatype.org/content/repositories/vaadin-snapshots/" }
maven { url 'https://repo.spring.io/libs-release' }
maven { url "https://repository.jboss.org/nexus/content/repositories/releases" }
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
}
在一个接一个地学习教程之后,一定有一些我忽略的地方。但是,我看不出问题出在哪里?
非常感谢任何提示!
我终于成功了。是这样的:
MyApplication.java
package com.somecompany;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(MyApplication.class, args);
}
}
MyServletInitializer.java
package com.somecompany;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.boot.builder.SpringApplicationBuilder;
public class MyServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MyApplication.class);
}
}
MyConfiguration.java
package com.somecompany;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
@Configuration
public class MyConfiguration {
@Bean
public String myLabelString() {
return "Hello World Bean!";
}
}
HelloWorldUI.java
package com.somecompany;
import com.vaadin.spring.annotation.SpringUI;
import com.vaadin.server.VaadinRequest;
import com.vaadin.ui.UI;
import org.springframework.beans.factory.annotation.Autowired;
import com.vaadin.ui.Label;
@SpringUI
public class HelloWorldUI extends UI {
@Autowired
String helloWorldString;
@Override
protected void init(VaadinRequest request) {
if (helloWorldString != null) {
setContent(new Label(helloWorldString));
} else {
setContent(new Label("Injection does not work!"));
}
}
}
build.gradle
plugins {
id 'com.devsoap.plugin.vaadin' version '1.2.1'
id 'org.springframework.boot' version '1.5.3.RELEASE'
}
apply plugin: 'war'
war {
baseName = 'hellovaadin'
}
springBoot {
mainClass = 'com.somecompany.MyApplication'
}
然后使用 gradle build
构建 WAR 文件,然后将其复制到我的 tomcat 实例的 webapps
文件夹中。
我通过展示如何 inject/autowire 一个 bean 来扩展这个例子。
我正在尝试将最小的 Vaadin/SpringBoot 应用程序作为 WAR 文件部署到独立的 Tomcat。
如果我 运行 gradle vaadinRun
并在 localhost:8080
下访问,一切正常,但使用 gradle war
创建 WAR 文件,然后将其复制到 webapps我的 Tomcat 文件夹导致 404。不幸的是 Tomcat 日志没有显示任何内容。尝试通过 localhost:8080/hello-vaadin
.
这是应用程序 class 本身:
package com.somecompany;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.boot.web.servlet.ServletComponentScan;
import com.vaadin.spring.annotation.EnableVaadin;
@ServletComponentScan
@SpringBootApplication
@EnableVaadin
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) throws Exception {
configureApplication(new SpringApplicationBuilder()).run(args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return configureApplication(builder);
}
private static SpringApplicationBuilder configureApplication(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
}
这是对应的UI-class:
package com.somecompany;
import com.vaadin.annotations.Theme;
import com.vaadin.spring.annotation.SpringUI;
import com.vaadin.server.VaadinRequest;
import com.vaadin.ui.UI;
import com.vaadin.ui.Grid;
import org.springframework.beans.factory.annotation.Autowired;
import com.vaadin.ui.Label;
@SpringUI
@Theme("valo")
public class HelloWorldUI extends UI {
@Autowired
public HelloWorldUI() {
}
@Override
protected void init(VaadinRequest request) {
setContent(new Label("Hello World!"));
}
}
最后是我的 gradle 脚本:
plugins {
id "java"
id "com.devsoap.plugin.vaadin" version "1.2.4"
id "org.springframework.boot" version "1.5.7.RELEASE"
}
jar {
baseName = 'com.somecompany.hello-vaadin'
version = '0.0.1-SNAPSHOT'
}
apply plugin: 'war'
war {
baseName = 'hello-vaadin'
version = '1.0'
}
springBoot {
mainClass = 'com.somecompany.Application'
}
bootRepackage {
mainClass = 'com.somecompany.Application'
}
repositories {
jcenter()
mavenCentral()
maven { url "http://oss.sonatype.org/content/repositories/vaadin-snapshots/" }
maven { url 'https://repo.spring.io/libs-release' }
maven { url "https://repository.jboss.org/nexus/content/repositories/releases" }
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
}
在一个接一个地学习教程之后,一定有一些我忽略的地方。但是,我看不出问题出在哪里?
非常感谢任何提示!
我终于成功了。是这样的:
MyApplication.java
package com.somecompany;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(MyApplication.class, args);
}
}
MyServletInitializer.java
package com.somecompany;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.boot.builder.SpringApplicationBuilder;
public class MyServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MyApplication.class);
}
}
MyConfiguration.java
package com.somecompany;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
@Configuration
public class MyConfiguration {
@Bean
public String myLabelString() {
return "Hello World Bean!";
}
}
HelloWorldUI.java
package com.somecompany;
import com.vaadin.spring.annotation.SpringUI;
import com.vaadin.server.VaadinRequest;
import com.vaadin.ui.UI;
import org.springframework.beans.factory.annotation.Autowired;
import com.vaadin.ui.Label;
@SpringUI
public class HelloWorldUI extends UI {
@Autowired
String helloWorldString;
@Override
protected void init(VaadinRequest request) {
if (helloWorldString != null) {
setContent(new Label(helloWorldString));
} else {
setContent(new Label("Injection does not work!"));
}
}
}
build.gradle
plugins {
id 'com.devsoap.plugin.vaadin' version '1.2.1'
id 'org.springframework.boot' version '1.5.3.RELEASE'
}
apply plugin: 'war'
war {
baseName = 'hellovaadin'
}
springBoot {
mainClass = 'com.somecompany.MyApplication'
}
然后使用 gradle build
构建 WAR 文件,然后将其复制到我的 tomcat 实例的 webapps
文件夹中。
我通过展示如何 inject/autowire 一个 bean 来扩展这个例子。