一、jar包(官方推荐)
jar包方式启动,也就是使用SpringBoot内置的tomcat运行。服务器上面只要你配置了jdk1.8及以上就ok,不需要外置tomcat。
- 首先在pom.xml文件中导入Springboot的maven依赖
org.springframework.boot
spring-boot-maven-plugin
-
执行package
-
package完成以后,target中会生成一个.jar包;
- 可以将jar包上传到Linux服务器上,以jar运行(此处本地验证打包成功(cmd))
java -jar spring-boot-mytest-0.0.1-SNAPSHOT.jar
二、war包
传统的部署方式:将项目打成war包,放入tomcat 的webapps目录下面,启动tomcat,即可访问。
- pom.xml配置修改
jar
//修改为
war
- pom文件添加如些依赖
javax.servlet
javax.servlet-api
provided
- 排除springboot内置的tomcat干扰
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
- 改造启动类
@SpringBootApplication
public class SpringBootMytestApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringBootMytestApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilderbuilder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(SpringBootMytestApplication.class);
}
- pom文件中不要忘了maven编译插件
org.springframework.boot
spring-boot-maven-plugin
-
在IDEA中使用mvn clean命令清除旧的包,并使用mvn-package生成新的war包
- 使用外部Tomcat运行该 war 文件(把 war 文件直接丢到 tomcat的webapps目录,启动
tomcat)
注意事项:
将项目打成war包,部署到外部的tomcat中,这个时候,不能直接访问spring boot 项目中配置文件配置的端口。
application.yml中配置的server.port配置的是spring boot内置的tomcat的端口号, 打成war包部署在独立的tomcat上之后, 配置的server.port是不起作用的。一定要注意这一点!!
三、jar包和war包方式对比
- 打jar包时不会把src/main/webapp 下的内容打到jar包里 (你认为的打到jar包里面,路径是不行的会报404)
- 打war包时会把src/main/webapp 下的内容打到war包里
- 有大量css、js、html,且需要经常改动的项目,打成 war 包去运行比较方便,因为改动静态资源可以直接覆盖,很快看到改动后的效果,这是 jar 包不能比的
四、多环境部署
如线上环境prod(product)、开发环境dev(development)、测试环境test、提测环境qa、单元测试unitest等等。不同的环境需要进行不同的配置,从而在不同的场景中跑我们的程序。例如prod环境和dev环境通常需要连接不同的数据库、需要配置不同的日志输出配置。还有一些类和方法,在不同的环境下有不同的实现方式。
Spring Boot 对此提供了支持,一方面是注解@Profile,另一方面还有多资源配置文件。
4.1 @Profile
@profile 注解的作用是指定类或方法在特定的 Profile 环境生效,任何@Component 或
@Configuration 注解的类都可以使用@Profile 注解。在使用DI来依赖注入的时候,能够根据@profile 标明的环境,将注入符合当前运行环境的相应的bean。
使用要求:
@Component 或@Configuration 注解的类可以使用@profile
@Profile 中需要指定一个字符串,约定生效的环境
@Profile 的使用位置
a. @Profile修饰类
@Configuration
@Profile("prod")
public class JndiDataConfig {
@Bean(destroyMethod="")
public DataSource dataSource() throws Exception {
Context ctx = new InitialContext();
return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
}
}
b. @Profile 修饰方法
@Configuration
public class AppConfig {
@Bean("dataSource")
@Profile("dev")
public DataSource standaloneDataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.HSQL)
.addScript("classpath:com/bank/config/sql/schema.sql")
.addScript("classpath:com/bank/config/sql/test-data.sql")
.build();
}
@Bean("dataSource")
@Profile("prod")
public DataSource jndiDataSource() throws Exception {
Context ctx = new InitialContext();
return (DataSource)ctx.lookup("java:comp/env/jdbc/datasource");
}
}
c. @Profile 修饰注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Profile("prod")
public @interface Production {
}
profile激活
使用哪个profile由spring.profiles.active控制
1. 配置文件方式激活profile
spring.profiles.active=dev
2. 命令行方式激活profile
java -jar spring-boot-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
4.2 多Profile的资源文件
Springboot的资源配置文件除了application.properties之外,还可以有对应的资源文件application-{profile}.properties.
假设,一个应用的工作环境有:dev、test、prod
那么,我们可以添加 4 个配置文件:
- applcation.properties - 公共配置
- application-dev.properties - 开发环境配置
- application-test.properties - 测试环境配置
- application-prod.properties - 生产环境配置
不同的properties配置文件也可以是在 applcation.properties 文件中来激活 profile:
spring.profiles.active = test