TomcatServletWebServerFactory
我们可以在配置类中通过配置TomcatServletWebServerFactory这个bean来配置tomcat的一些参数
比如下面可以配置项目的端口
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(){
TomcatServletWebServerFactory tomcatServletWebServerFactory = new TomcatServletWebServerFactory();
// 配置端口
tomcatServletWebServerFactory.setPort(80);
return tomcatServletWebServerFactory;
}
spring boot项目打包
打成jar包的插件,只有加入下面的插件才能打成jar包
<build>
<plugins>
<!--
用于将应用打成可直接运行的jar(该jar就是用于生产环境中的jar) 值得注意的是,如果没有引用spring-boot-starter-parent做parent,
且采用了上述的第二种方式,这里也要做出相应的改动
-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--fork : 如果没有该项配置,devtools不会起作用,即应用不会restart -->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
jar包方式启动
springboot项目打成war包不需要插件,不过启动方式和jar包不同,需要继承SpringBootServletInitializer并重写configure方法
@SpringBootApplication
public class AppStart extends SpringBootServletInitializer {
// 继承SpringBootServletInitializer重写configure方法就会让springboot以war包的方式启动
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(AppStart.class);
}
public static void main(String[] args) {
SpringApplication.run(AppStart.class);
}
}
springboot自动配置
spring boot可以通过@Conditional扩展注解作用(判断是否满足当前指定条件)来实现动态注入,只有满足当前指定条件才会注入。
注解 | 描述 |
---|---|
@ConditionalOnJava | 系统的java版本是否符合要求 |
@ConditionalOnBean | 容器中存在指定Bean; |
@ConditionalOnMissingBean | 容器中不存在指定Bean; |
@ConditionalOnExpression | 满足SpEL表达式指定 |
@ConditionalOnClass | 系统中有指定的类 |
@ConditionalOnMissingClass | 系统中没有指定的类 |
@ConditionalOnSingleCandidate | 容器中只有一个指定的Bean,或者这个Bean是首选Bean |
@ConditionalOnProperty | 系统中指定的属性是否有指定的值 |
@ConditionalOnResource | 类路径下是否存在指定资源文件 |
@ConditionalOnWebApplication | 当前是web环境 |
@ConditionalOnNotWebApplication | 当前不是web环境 |
… | … |
下面演示一下@ConditionalOnBean的实际效果,假设有下面三个bean对象
@Component
public class A {
@Autowired
private B b;
public void test(){
System.out.println(b);
}
}
@Component
public class B {
}
@Component
public class C {
}
我们运行测试类
@Test
public void Test() {
a.test();
}