项目构建

在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

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-compiler-plugin</artifactId>
  6. <configuration>
  7. <source>1.8</source>
  8. <target>1.8</target>
  9. <encoding>UTF-8</encoding>
  10. <!--必须添加compilerArgument配置,才能使用JFinal的Controller方法带参数的功能-->
  11. <compilerArgument>-parameters</compilerArgument>
  12. </configuration>
  13. </plugin>
  14. <plugin>
  15. <groupId>org.codehaus.mojo</groupId>
  16. <artifactId>appassembler-maven-plugin</artifactId>
  17. <version>1.10</version>
  18. <configuration>
  19. <assembleDirectory>${project.build.directory}/app</assembleDirectory>
  20. <repositoryName>lib</repositoryName>
  21. <binFolder>bin</binFolder>
  22. <configurationDirectory>webRoot</configurationDirectory>
  23. <copyConfigurationDirectory>true</copyConfigurationDirectory>
  24. <configurationSourceDirectory>src/main/resources</configurationSourceDirectory>
  25. <repositoryLayout>flat</repositoryLayout>
  26. <encoding>UTF-8</encoding>
  27. <logsDirectory>logs</logsDirectory>
  28. <tempDirectory>tmp</tempDirectory>
  29. <programs>
  30. <!--程序打包 mvn package appassembler:assemble -->
  31. <program>
  32. <mainClass>io.jboot.Jboot</mainClass>
  33. <id>jboot</id>
  34. <platforms>
  35. <platform>windows</platform>
  36. <platform>unix</platform>
  37. </platforms>
  38. </program>
  39. </programs>
  40. <daemons>
  41. <!-- 后台程序打包:mvn clean package appassembler:generate-daemons -->
  42. <daemon>
  43. <mainClass>io.jboot.Jboot</mainClass>
  44. <id>jboot</id>
  45. <platforms>
  46. <platform>jsw</platform>
  47. </platforms>
  48. <generatorConfigurations>
  49. <generatorConfiguration>
  50. <generator>jsw</generator>
  51. <includes>
  52. <include>linux-x86-32</include>
  53. <include>linux-x86-64</include>
  54. <include>macosx-universal-32</include>
  55. <include>macosx-universal-64</include>
  56. <include>windows-x86-32</include>
  57. <include>windows-x86-64</include>
  58. </includes>
  59. <configuration>
  60. <property>
  61. <name>configuration.directory.in.classpath.first</name>
  62. <value>webRoot</value>
  63. </property>
  64. <property>
  65. <name>wrapper.ping.timeout</name>
  66. <value>120</value>
  67. </property>
  68. <property>
  69. <name>set.default.REPO_DIR</name>
  70. <value>lib</value>
  71. </property>
  72. <property>
  73. <name>wrapper.logfile</name>
  74. <value>logs/wrapper.log</value>
  75. </property>
  76. </configuration>
  77. </generatorConfiguration>
  78. </generatorConfigurations>
  79. </daemon>
  80. </daemons>
  81. </configuration>
  82. </plugin>
  83. </plugins>
  84. </build>

进行maven构建

  1. mvn package appassembler:assemble

构建完毕后,会在target目录下生成一个app文件夹,在app文件的bin目录下会有一个jboot脚本(或者jboot.bat)。

启动应用

  1. cd yourProjectPath/target/app/bin
  2. ./jboot
在启动的时候添加上自己的配置信息
  1. cd yourProjectPath/target/app/bin
  2. ./jboot --jboot.server.port=8080 --jboot.rpc.type=local
使用你自己的配置文件来代替 jboot.properties
  1. cd yourProjectPath/target/app/bin
  2. ./jboot --jboot.model=dev --jboot.server.port=8080

上面的命令启动后,会使用 jboot-dev.proerties 文件来替代 jboot.properties 同时设置 jboot.server.port=8080(服务器端口号为8080)

后台程序

在以上文档中,如果通过如下代码进行构建的。

  1. mvn package appassembler:assemble

构建会生成 app目录,及对应的jboot脚本,但是jboot在执行的时候是前台执行的,也就是必须打开一个窗口,当关闭这个窗口后,jboot内置的服务器undertow也会随之关闭了,在正式的环境里,我们是希望它能够以服务的方式在后台运行。

那么,如果构建一个后台运行的程序呢?步骤如下:

第一步:执行如下maven编译
  1. mvn clean package appassembler:generate-daemons

maven命令执行完毕后,会在target下生成如下文件夹 /generated-resources/appassembler/jsw/jboot , 文件中我们会找到bin目录,生成的后台脚本jboot(或jboot.bat)会存放在bin目录里。

第二步:启动应用
  1. cd yourProjectPath/target/generated-resources/appassembler/jsw/jboot/bin
  2. ./jboot

此时,启动的应用为后台程序了。

Jboot部署到tomcat

首先,需要配置的自己的pom文件的packaging为war,并配置上maven编译插件:

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-war-plugin</artifactId>
  4. <configuration>
  5. <attachClasses>true</attachClasses>
  6. <packagingExcludes>WEB-INF/web.xml</packagingExcludes>
  7. </configuration>
  8. </plugin>

这个过程和普通的java web工程没什么区别。

最最重要的是配置web.xml,在WEB-INF下创建 web.xml,起内容如下:

  1. <filter>
  2. <filter-name>jfinal</filter-name>
  3. <filter-class>com.jfinal.core.JFinalFilter</filter-class>
  4. <init-param>
  5. <param-name>configClass</param-name>
  6. <param-value>io.jboot.web.JbootAppConfig</param-value>
  7. </init-param>
  8. </filter>
  9. <filter-mapping>
  10. <filter-name>jfinal</filter-name>
  11. <url-pattern>/*</url-pattern>
  12. </filter-mapping>

这里注意:param-value一定使用io.jboot.web.JbootAppConfig,或者是其子类。

如果用到shiro,再配置上:

  1. <filter>
  2. <filter-name>shiro</filter-name>
  3. <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
  4. </filter>
  5. <filter-mapping>
  6. <filter-name>shiro</filter-name>
  7. <url-pattern>/*</url-pattern>
  8. </filter-mapping>
  9. <listener>
  10. <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
  11. </listener>

一般情况下,shiro的配置内容要放到jfinal的配置之上。

如果项目还用到hystrix,需要添加如下配置:

  1. <servlet>
  2. <servlet-name>hystrix</servlet-name>
  3. <servlet-class>com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>hystrix</servlet-name>
  7. <url-pattern>/hystrix</url-pattern>
  8. </servlet-mapping>

如果还用到Metrics,添加如下配置:

  1. <servlet>
  2. <servlet-name>metrics</servlet-name>
  3. <servlet-class>com.codahale.metrics.servlets.AdminServlet</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>metrics</servlet-name>
  7. <url-pattern>/metrics</url-pattern>
  8. </servlet-mapping>
  9. <listener>
  10. <listener-class>io.jboot.component.metric.JbootMetricServletContextListener</listener-class>
  11. </listener>
  12. <listener>
  13. <listener-class>io.jboot.component.metric.JbootHealthCheckServletContextListener</listener-class>
  14. </listener>

注意:因为项目的html文件都放在resource下,如果war解压后只有 META-INF 和 WEB-INF 这两个文件夹,html文件被打包在 WEB-INF/clasess 下,是不会被正确渲染的。所以需要通过pom文件配置插件,把resource下的html文件copy到war的根目录下,才能被正常渲染。

假设你的html文件都放在 resource下的htmls目录,配置内容如下:

  1. <plugin>
  2. <artifactId>maven-antrun-plugin</artifactId>
  3. <executions>
  4. <execution>
  5. <phase>compile</phase>
  6. <goals>
  7. <goal>run</goal>
  8. </goals>
  9. <configuration>
  10. <tasks>
  11. <move file="${project.build.directory}/classes/htmls" tofile="${project.build.directory}/${project.build.finalName}/htmls"/>
  12. </tasks>
  13. </configuration>
  14. </execution>
  15. </executions>
  16. </plugin>