| 0.修改pom打包方式为war,同时排除了内置的tomcat。 <packaging>war</packaging> <!-- 排除内置的tomcat -->  <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-tomcat</artifactId>  <scope>compile</scope>  </dependency> <!-- 若直接有使用servlet对象时(这是废话,⊙﹏⊙‖∣),需要将servlet引入,本例是没有的~ -->  <dependency>  <groupId>javax.servlet</groupId>  <artifactId>javax.servlet-api</artifactId>  <scope>provided</scope>  </dependency> 
 1.改造下启动类,使其继承SpringBootServletInitializer,同时覆盖configure方法。 @SpringBootApplication @Slf4j public class ChapterApplication extends SpringBootServletInitializer{  public static void main(String[] args) {  SpringApplication.run(ChapterApplication.class, args);  // new SpringApplicationBuilder().sources(ChapterApplication.class).web(false).run(args);  //之后这里设置业务逻辑 比如挂起一个线程 或者设置一个定时任务。保证不退出  //不然它就是一个启动类,启动后就停止了。  log.info("jar,chapter启动!");  }   @Override  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {  log.info("外部tomcat,chapter启动!");  return application.sources(ChapterApplication.class);  } } 
 2.maven打包成war(mvn clean install),然后放入tomcat中,启动运行即可。   其实这样设置的话,在开发时直接运行启动类也还是可以直接运行的,方便.   启动不设置端口 对一些定时任务服务项目,其本身只是提供一个定时调度功能,不需要其他服务调用,只是去调度其他服务。像这样的服务,正常也就不需要设置端口了。这时候SpringBoot也是支持的。只需要改下启动方式: new SpringApplicationBuilder().sources(ChapterApplication.class).web(false).run(args); //之后这里设置业务逻辑 比如挂起一个线程 或者设置一个定时任务。保证不退出 //不然它就是一个启动类,启动后就停止了。 或者修改配置文件的属性: spring.main.web-environment=false 
 最后效果,是不是没有看见端口了:   启动完成前进行业务逻辑 利用CommandLineRunner或者ApplicationRunner可实现在SpringApplication的run()完成前执行一些业务逻辑 0.修改启动类,实现CommandLineRunner接口,ApplicationRunner类似,只是run的入参不同而已。 @Override  public void run(String... args) throws Exception {  log.info("CommandLineRunner运行");  } 
 1.运行应用,注意查看控制台输出:   当然,直接申明一个bean也是可以的。 @Configuration  @Slf4j  public class CommandLineRunnerConfig {  @Bean  public CommandLineRunner runner(){  return new CommandLineRunner() {  public void run(String... args){  log.info("CommandLineRunner运行2");  }  };  }  } 
 若多个时,可设置@Order来确定执行的顺序。 动态修改日志级别 通过org.springframework.boot.logging.LoggingSystem提供的api即可。 loggingSystem.setLogLevel(null, LogLevel.DEBUG); 如,默认时是info模式,未修改时,debug模式是不会输出的。   动态设置后   热部署 (编辑:宣城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |