本文主要介绍
1. 多环境配置
2. SpringBoot项目打包方式(jar & war)
1. 多环境配置
1.多环境激活
配置文件:
spring.profiles.active=dev
spring: profiles: active: dev
启动命令激活
java -jar xxx.jar --spring.profiles.active=dev;
2. 注解@Profile / 多资源配置文件
注解@Profile
- 1. 可使用在类或者方法上;
- 2. @profile注解所在的类,需要为 @Component 或 @Configuration 注解的类
- 3. @Profile 中需要指定一个字符串,约定生效的环境
@Configuration @Profile("dev") public class DataSourceDevConfig { @Bean(destroyMethod = "") public DataSource dataSource() throws Exception { ....... } }
@Configuration public class DataSourceConfig { @Bean("dataSource") @Profile("dev") public DataSource standaloneDataSource() { ...... } @Bean("dataSource") @Profile("prod") public DataSource jndiDataSource() throws Exception { ...... } }
多资源配置文件
Springboot的资源配置文件除了application.properties之外,还可以有对应的资源文件
application-{profile}.properties
例如:
application-dev.properties/application-dev.yml
application-test.properties/application-test.yml
2. SpringBoot项目打包方式(jar & war)
1. jar (默认方式)
- SpringBoot中引入Maven依赖
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
- 执行 maven 的打包操作 package(注意:如果当前项目依赖了其他项目,需要通过maven先将其他项目进行maven的 install操作)
- 在项目的target包下,将生成对应jar文件
2. war
- pom文件中,将jar改成war (默认为jar)
<packaging>war</packaging>
- 添加servlet-api依赖l来打war包
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency>
- 排除springboot内置的tomcat
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
- 增加SpringBootServletInitializer的子类,并重写其configure方法;
将main函数所在的类继承SpringBootServletInitializer,并重写configure方法
@SpringBootApplication public class MySpringBootDemoApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(MySpringBootDemoApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { // 注意这里要指向原先用main方法执行的Application启动类 return builder.sources(MySpringBootDemoApplication.class); } }
- SpringBoot中引入Maven依赖
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
- 执行 maven 的打包操作 package(注意:如果当前项目依赖了其他项目,需要通过maven先将其他项目进行maven的 install操作)
- 在项目的target包下,将生成对应war文件
3. jar & war 对比
jar :
- 简单方便
- 内置tomcat,没有不同环境因tomcat版本不同所存在的潜在问题;
- 不会把src/main/webapp 下的内容打到jar包里
war:
- 可以部署到tomcat的 webapps 中,随Tomcat的启动而启动
- 会把src/main/webapp 下的内容打到war包里
需要根据不同的业务场景确定是否打成jar或者war
仅仅提供rest接口, jar包方便
需要经常改动静态资源的可以打成war,静态资源直接覆盖