项目构建
在Jboot中已经内置了高性能服务器undertow,undertow的性能比tomcat高出很多(具体自行搜索:undertow vs tomcat),所以jboot构建和部署等不再需要tomcat。在Jboot构建的时候,在linux平台下,会生成jboot.sh 在windows平台下会生成jboot.bat脚本,直接执行该脚本即可。
生成jboot.sh或者jboot.bat,依赖maven的appassembler插件,因此,你的maven配置文件pom.xml需要添加如下配置:
config pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<!--必须添加compilerArgument配置,才能使用JFinal的Controller方法带参数的功能-->
<compilerArgument>-parameters</compilerArgument>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.10</version>
<configuration>
<assembleDirectory>${project.build.directory}/app</assembleDirectory>
<repositoryName>lib</repositoryName>
<binFolder>bin</binFolder>
<configurationDirectory>webRoot</configurationDirectory>
<copyConfigurationDirectory>true</copyConfigurationDirectory>
<configurationSourceDirectory>src/main/resources</configurationSourceDirectory>
<repositoryLayout>flat</repositoryLayout>
<encoding>UTF-8</encoding>
<logsDirectory>logs</logsDirectory>
<tempDirectory>tmp</tempDirectory>
<programs>
<!--程序打包 mvn package appassembler:assemble -->
<program>
<mainClass>io.jboot.Jboot</mainClass>
<id>jboot</id>
<platforms>
<platform>windows</platform>
<platform>unix</platform>
</platforms>
</program>
</programs>
<daemons>
<!-- 后台程序打包:mvn clean package appassembler:generate-daemons -->
<daemon>
<mainClass>io.jboot.Jboot</mainClass>
<id>jboot</id>
<platforms>
<platform>jsw</platform>
</platforms>
<generatorConfigurations>
<generatorConfiguration>
<generator>jsw</generator>
<includes>
<include>linux-x86-32</include>
<include>linux-x86-64</include>
<include>macosx-universal-32</include>
<include>macosx-universal-64</include>
<include>windows-x86-32</include>
<include>windows-x86-64</include>
</includes>
<configuration>
<property>
<name>configuration.directory.in.classpath.first</name>
<value>webRoot</value>
</property>
<property>
<name>wrapper.ping.timeout</name>
<value>120</value>
</property>
<property>
<name>set.default.REPO_DIR</name>
<value>lib</value>
</property>
<property>
<name>wrapper.logfile</name>
<value>logs/wrapper.log</value>
</property>
</configuration>
</generatorConfiguration>
</generatorConfigurations>
</daemon>
</daemons>
</configuration>
</plugin>
</plugins>
</build>
进行maven构建
mvn package appassembler:assemble
构建完毕后,会在target目录下生成一个app文件夹,在app文件的bin目录下会有一个jboot脚本(或者jboot.bat)。
启动应用
cd yourProjectPath/target/app/bin
./jboot
在启动的时候添加上自己的配置信息
cd yourProjectPath/target/app/bin
./jboot --jboot.server.port=8080 --jboot.rpc.type=local
使用你自己的配置文件来代替 jboot.properties
cd yourProjectPath/target/app/bin
./jboot --jboot.model=dev --jboot.server.port=8080
上面的命令启动后,会使用 jboot-dev.proerties
文件来替代 jboot.properties
同时设置 jboot.server.port=8080(服务器端口号为8080)
后台程序
在以上文档中,如果通过如下代码进行构建的。
mvn package appassembler:assemble
构建会生成 app目录,及对应的jboot脚本,但是jboot在执行的时候是前台执行的,也就是必须打开一个窗口,当关闭这个窗口后,jboot内置的服务器undertow也会随之关闭了,在正式的环境里,我们是希望它能够以服务的方式在后台运行。
那么,如果构建一个后台运行的程序呢?步骤如下:
第一步:执行如下maven编译
mvn clean package appassembler:generate-daemons
maven命令执行完毕后,会在target下生成如下文件夹 /generated-resources/appassembler/jsw/jboot
, 文件中我们会找到bin目录,生成的后台脚本jboot(或jboot.bat)会存放在bin目录里。
第二步:启动应用
cd yourProjectPath/target/generated-resources/appassembler/jsw/jboot/bin
./jboot
此时,启动的应用为后台程序了。
Jboot部署到tomcat
首先,需要配置的自己的pom文件的packaging为war,并配置上maven编译插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<attachClasses>true</attachClasses>
<packagingExcludes>WEB-INF/web.xml</packagingExcludes>
</configuration>
</plugin>
这个过程和普通的java web工程没什么区别。
最最重要的是配置web.xml,在WEB-INF下创建 web.xml,起内容如下:
<filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>io.jboot.web.JbootAppConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这里注意:param-value一定使用io.jboot.web.JbootAppConfig,或者是其子类。
如果用到shiro,再配置上:
<filter>
<filter-name>shiro</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>shiro</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
一般情况下,shiro的配置内容要放到jfinal的配置之上。
如果项目还用到hystrix,需要添加如下配置:
<servlet>
<servlet-name>hystrix</servlet-name>
<servlet-class>com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hystrix</servlet-name>
<url-pattern>/hystrix</url-pattern>
</servlet-mapping>
如果还用到Metrics,添加如下配置:
<servlet>
<servlet-name>metrics</servlet-name>
<servlet-class>com.codahale.metrics.servlets.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>metrics</servlet-name>
<url-pattern>/metrics</url-pattern>
</servlet-mapping>
<listener>
<listener-class>io.jboot.component.metric.JbootMetricServletContextListener</listener-class>
</listener>
<listener>
<listener-class>io.jboot.component.metric.JbootHealthCheckServletContextListener</listener-class>
</listener>
注意:因为项目的html文件都放在resource下,如果war解压后只有 META-INF 和 WEB-INF 这两个文件夹,html文件被打包在 WEB-INF/clasess 下,是不会被正确渲染的。所以需要通过pom文件配置插件,把resource下的html文件copy到war的根目录下,才能被正常渲染。
假设你的html文件都放在 resource下的htmls目录,配置内容如下:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<move file="${project.build.directory}/classes/htmls" tofile="${project.build.directory}/${project.build.finalName}/htmls"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>