Spring Boot使用了一个全局的配置文件application.properties。
--- 自定义属性 ---
application.properties提供自定义属性的支持,这样我们就可以把一些常量配置在这里:
com.example.name=\u674E\u96F7 com.example.want=\u6765\u4E00\u676FSpring
然后,直接在要使用的地方通过注解@Value(value=”${config.name}”)就可以绑定到你想要的属性上面
@RestController public class UserController { @Value("${com.example.name}") private String name; @Value("${com.example.want}") private String want; @RequestMapping("/want") public String doWant(){ return name + "," + want; } }
有时候属性太多,一个个绑定到属性字段上太累,官方提倡绑定一个对象的bean,这里我们建一个ConfigBean.java类,顶部需要使用注解@ConfigurationProperties(prefix = “com.example”)来指明使用哪个
@ConfigurationProperties(prefix = "com.example") public class ConfigBean { private String name; private String want; // 省略get,set方法 }这里配置完还需要在spring Boot入口类加上@EnableConfigurationProperties并指明要加载哪个bean,如果不写ConfigBean.class,可以在bean类那边添加。
@RestController @SpringBootApplication @EnableConfigurationProperties({ConfigBean.class}) public class MySpringBootApplication { @RequestMapping("/") public String index(){ return "Hello Spring Boot"; } public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class, args); } }最后在Controller中引入ConfigBean使用即可
@RestController public class UserController { @Autowired private ConfigBean configBean; @RequestMapping("/want") public String doWant(){ return configBean.getName() + "," + configBean.getWant(); } }
--- 参数间引用 ---
在application.properties中的各个参数之间也可以直接引用来使用,就像下面的设置:
com.example.hope=${com.example.name}\u7684\u613F\u671B${com.example.want}
--- 使用自定义配置文件 ---
有时候我们不希望把所有配置都放在application.properties里面,这时候我们可以自定义一个文件:test.properties,路径放在src/main/resources下面。
com.hx.company=\u6052\u5927 com.hx.address=\u4E0A\u6D77\u6D66\u4E1C
新建一个Bean
@Configuration @ConfigurationProperties(prefix = "com.hx") @PropertySource("classpath:test.properties") public class ConfigTestBean { private String company; private String address; // 省略get,set方法 }注意,如果你使用的是1.5以前的版本,那么可以通过locations指定properties文件的位置,这样:
@ConfigurationProperties(prefix = "config2",locations="classpath:test.properties")
--- 随机值配置 ---
配置文件中${random} 可以用来生成各种不同类型的随机值,从而简化了代码生成的麻烦,例如 生成 int 值、long 值或者 string 字符串。
com.example.secret=${random.value} com.example.number=${random.int} com.example.bignumber=${random.long} com.example.uuid=${random.uuid} com.example.number.less.than.ten=${random.int(10)} com.example.number.in.range=${random.int[1024,65536]}
--- 外部配置 - 命令行参数配置 ---
Spring Boot是基于jar包运行的,打成jar包的程序可以直接通过下面命令运行:
java -jar xx.jar可以以下命令修改tomcat端口号:
java -jar xx.jar --server.port=9090
可以看出,命令行中连续的两个减号--
就是对application.properties
中的属性值进行赋值的标识。
所以java -jar xx.jar --server.port=9090
等价于在application.properties
中添加属性server.port=9090
。
如果你怕命令行有风险,可以使用SpringApplication.setAddCommandLineProperties(false)禁用它。
实际上,Spring Boot应用程序有多种设置途径,Spring Boot能从多重属性源获得属性,包括如下几种:
- 根目录下的开发工具全局设置属性(当开发工具激活时为
~/.spring-boot-devtools.properties
)。 - 测试中的@TestPropertySource注解。
- 测试中的@SpringBootTest#properties注解特性。
- 命令行参数
SPRING_APPLICATION_JSON
中的属性(环境变量或系统属性中的内联JSON嵌入)。ServletConfig
初始化参数。ServletContext
初始化参数。- java:comp/env里的JNDI属性
- JVM系统属性
- 操作系统环境变量
- 随机生成的带random.* 前缀的属性(在设置其他属性时,可以应用他们,比如${random.long})
- 应用程序以外的application.properties或者appliaction.yml文件
- 打包在应用程序内的application.properties或者appliaction.yml文件
- 通过@PropertySource标注的属性源
- 默认属性(通过
SpringApplication.setDefaultProperties
指定).
这里列表按组优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性,列如我们上面提到的命令行属性就覆盖了application.properties的属性。
--- 配置文件的优先级 ---
application.properties和application.yml文件可以放在一下四个位置:
- 外置,在相对于应用程序运行目录的/congfig子目录里。
- 外置,在应用程序运行的目录里
- 内置,在config包内
- 内置,在Classpath根目录
同样,这个列表按照优先级排序,也就是说,src/main/resources/config下application.properties覆盖src/main/resources下application.properties中相同的属性。
此外,如果你在相同优先级位置同时有application.properties和application.yml,那么application.yml里面的属性就会覆盖application.properties里的属性。
--- Profile - 多环境配置 ---
当应用程序需要部署到不同运行环境时,一些配置细节通常会有所不同。
如果按照以前的做法,就是每次发布的时候替换掉配置文件,这样太麻烦了,Spring Boot的Profile就给我们提供了解决方案,命令带上参数就搞定。
这里我们来模拟一下,只是简单的修改端口来测试
在Spring Boot中多环境配置文件名需要满足application-{profile}.properties
的格式,其中{profile}
对应你的环境标识,比如:
- application-dev.properties:开发环境
- application-prod.properties:生产环境
想要使用对应的环境,只需要在application.properties中使用spring.profiles.active属性来设置,值对应上面提到的{profile},这里就是指dev和prod。
当然你也可以用命令行启动的时候带上参数:
java -jar xxx.jar --spring.profiles.active=dev
除了可以用profile的配置文件来分区配置我们的环境变量,在代码里,我们还可以直接用@Profile注解来进行配置,例如数据库配置,这里我们先定义一个接口
public interface DBConnector { public void configure(); }
分别定义两个实现类来实现它:
/** * 测试数据库 */ @Component @Profile("testdb") public class TestDBConnector implements DBConnector { @Override public void configure() { System.out.println("testdb"); } } /** * 生产数据库 */ @Component @Profile("devdb") public class DevDBConnector implements DBConnector { @Override public void configure() { System.out.println("devdb"); } }
通过在配置文件激活具体使用哪个实现类
spring.profiles.active=testdb
然后就可以这么用了
@RestController @RequestMapping("/task") public class TaskController { @Autowired DBConnector connector ; @RequestMapping(value = {"/",""}) public String hellTask(){ connector.configure(); return "hello task !! myage is " + myage; } }
除了spring.profiles.active来激活一个或者多个profile之外,还可以用spring.profiles.include来叠加profile
spring.profiles.active: testdb spring.profiles.include: proddb,prodmq
http://tengj.top/2017/02/28/springboot2/#
相关推荐
7. **YAML与Properties配置**:Spring Boot支持使用YAML和Properties文件进行配置,YAML提供了更易读的格式。`ConfigDataEnvironmentPostProcessor`负责加载和解析这些配置。 8. **Spring Application**:`...
Spring Boot的核心注解是@SpringBootApplication,这是一个复合注解,包含@SpringBootConfiguration(用于配置文件管理)、@EnableAutoConfiguration(开启自动配置)和@ComponentScan(扫描Spring组件)。...
《Spring Boot 2.7.0 源码解析与深度探索》 Spring Boot作为Java开发中的一个核心框架,以其便捷的起步配置、自动化配置和一站式的解决方案深受开发者喜爱。当我们深入研究Spring Boot 2.7.0的源码时,可以更深刻地...
总的来说,理解Spring Boot文件上传原理的关键在于掌握Spring MVC的`MultipartResolver`接口及其实现,以及如何在Spring Boot中配置和使用这些组件来处理文件上传请求。这使得开发者能够安全有效地处理用户上传的...
4. **无需XML配置**:Spring Boot不需要使用XML配置文件,尽管它仍然支持XML配置,但推荐使用基于Java的配置。 5. **社区支持**:Spring Boot拥有活跃的开发者社区,提供大量的资源和插件。 等等
2. **核心概念**:深入解析Spring Boot的自动配置原理,以及如何自定义配置以满足特定需求。 3. **Web开发**:包括使用Spring MVC开发RESTful API,处理HTTP请求,使用模板引擎(如Thymeleaf)进行视图渲染,以及...
在本文中,我们将深入探讨如何使用Spring Boot框架访问JSP页面,同时介绍如何结合Maven插件和MyBatis来自动生成Mapper、Model和相关的XML配置文件,以便于简化开发流程。 首先,让我们来理解Spring Boot与JSP的集成...
4. `spring config`:用于处理配置属性,如读取和解析YAML或Properties文件。 在`spring-2.0.0.M1`目录中,包含了Spring Boot CLI的可执行文件(如`spring`或`spring.bat`,取决于你的操作系统),这些文件让你能够...
在IT行业中,Spring Boot是一个非常流行的Java开发框架,它简化了Spring应用的初始搭建以及开发过程,提供了大量的自动配置选项,使得开发者可以快速构建高效、生产级别的应用。本项目是关于"基于Spring Boot的...
3. **无需XML配置**:Spring Boot不需要使用XML配置文件,尽管它仍然支持XML配置。 4. **社区支持**:Spring Boot有一个庞大的社区和生态系统,提供了大量的扩展和集成选项。 5. **监控和管理**:Spring Boot提供了...
1.13 Spring Boot配置ContextPath 1.14 Spring Boot改变JDK编译版本 1.15 处理静态资源(默认资源映射) 1.16 处理静态资源(自定义资源映射) 1.17 Spring Boot定时任务的使用 1.18 Spring Boot使用Druid和监控配置 ...
Spring Boot 启动原理解析 Spring Boot 是一个基于 Java 的框架,它提供了一种快速和简洁的方式来开发 Web 应用程序。在 Spring Boot 中,启动类是整个应用程序的入口点,它负责初始化和配置应用程序的各种组件。在...
10. **配置文件**:Spring Boot支持`application.properties`或`application.yml`配置文件,可以方便地管理和分环境配置应用参数。 这份讲义应该还会详细讲解如何创建、配置、测试以及部署Spring Boot应用,深入...
5. **YAML与Properties**:Spring Boot支持使用YAML或Properties格式的配置文件,YAML提供了更友好的层次结构,让配置更易读写。 6. **命令行接口(CLI)**:Spring Boot提供了一个命令行工具,可以用于快速创建、...
- **YAML 配置文件**:Spring Boot 推荐使用的配置文件格式,具有更好的可读性和扩展性。YAML 文件使用 `-` 和 `:` 来组织数据,采用缩进来表示层级关系,注意使用空格进行缩进而不是 Tab 键。 ##### 2.4 多环境...
Spring Boot中有两个重要的配置文件:`application.properties` 或 `application.yml` 和 `bootstrap.properties` 或 `bootstrap.yml`。 - **application 配置文件**:主要用于Spring Boot项目的自动化配置,定义...
2.1.2 Spring Boot项目构建过程解析 24 2.2 使用起步依赖 27 2.2.1 指定基于功能的依赖 28 2.2.2 覆盖起步依赖引入的传递依赖 29 2.3 使用自动配置 30 2.3.1 专注于应用程序功能 31 2.3.2 运行应用程序...
4. **YAML/Properties配置**:Spring Boot支持YAML和Properties两种格式的配置文件,YAML提供了更清晰的层次结构,使得配置更易读写。 5. **Spring Initializr**:这是一个在线工具,可以帮助开发者快速创建Spring ...
Spring Boot加载配置文件的完整步骤包括获取ApplicationListener实例、加载配置文件、合并配置文件、解析placeholder等步骤。理解这些步骤,可以帮助我们更好地使用Spring Boot来构建Web应用程序。
Spring Boot 2.4.0 引入了对配置文件加载机制的重大调整,这主要针对的是使用复杂配置的场景,比如结合Spring Cloud配置中心。这次更新的目的是为了更好地支持Kubernetes环境下的配置管理,尤其是Kubernetes的Config...