博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【spring boot】SpringBoot初学(3)– application配置和profile隔离配置
阅读量:5041 次
发布时间:2019-06-12

本文共 3459 字,大约阅读时间需要 11 分钟。

前言

  github:

  说明:我代码的结构是用profile来区分/激活要加载的配置,从而在一个project中写各种spring boot的demo。所以很多时候可能在*Application.class中指定了特殊的profile。

    这种方式可能很糟糕(在细看理解application.properties的加载顺序后,感觉在*Application.class目录下写application.properties应该更好。)

  代码位置:

 

一、application.properties

  1. 1 application.properties的加载顺序 (重要

    SpringApplication将从以下位置加载application.properties文件,并把它们添加到Spring Environment中:

      (1) 当前目录下的一个/config子目录;
      (2) 当前目录;
      (3) 一个classpath下的/config包;
      (4) classpath根路径(root);
    这个列表是按优先级排序的(列表中位置高的将覆盖位置低的)。

  1.2 application.properties 加载目录/文件名 修改

    如果不喜欢将application.properties作为配置文件名,可以通过指定spring.config.name环境属性来切换其他的名称。

    也可以使用spring.config.location环境属性来引用一个明确的路径(目录位置或文件路径列表以逗号分割)。(并不是在config/application.properties中指定)

 

二、spring boot的profile指定

  2.1 什么是profile,怎么理解profile?

    Spring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只能在特定的环境下生效。

   任何@Component或@Configuration都能被@Profile标记,从而限制加载它的时机

    比如:开发环境与正式环境的数据库连接配置文件不一样,在开发服务器指定为开发配置文件,在正式环境时切换正式的配置文件。(多看代码去理解)

  2.2 profile的加载顺序、格式

    格式:application-{profile}.properties

    加载顺序:与application.properties一样。

    profile中的配置会覆盖默认的配置,包括application.properties中的配置。

  2.3 profile在spring boot中的配置

    (1) application.properties中指定属性配置

#### 特定配置profile,多个可用逗号(,),ex:spring.profiles.active=dev,prod## 特定Profile属性从跟标准application.properties相同的路径加载,并且特定profile文件会覆盖默认的配置。spring.profiles.active=dev## 用来无条件的添加生效的配置。或 SpringApplication.setAdditionalProfiles(String... profiles)## 可能在pom中依赖了部分jar,所以可能必须使用手动配置(否则spring boot会用jar中的自动配置,比如database)spring.profiles.include=log,thymeleaf,db

    (问题: active与include有什么区别?)

   (2) 用SpringApplication中的API配置

  (3) 代码中限制加载及demo

@Controller//@Profile注解可以实现不同环境下配置参数的切换,任何@Component或@Configuration注解的类都可以使用@Profile注解。@Profile("dev")public class DevController {	@Value("${app.name}")	private String appName;	@Value("${app.description}")	private String appDesc;	@RequestMapping("/profile")	public String greeting(			@RequestParam(value = "name", required = false, defaultValue = "VergiLyn") String name,			Model model) {		model.addAttribute("appDesc", appDesc);		model.addAttribute("name", appName);		return "greeting";	}}
@Controller@Profile("prod")public class ProdController {	@Value("${app.name}")	private String appName;	@Value("${app.description}")	private String appDesc;	@RequestMapping("/profile")	public String greeting(			@RequestParam(value = "name", required = false, defaultValue = "VergiLyn") String name,			Model model) {		model.addAttribute("appDesc", appDesc);		model.addAttribute("name", appName);		return "greeting";	}}
@SpringBootApplicationpublic class ProfileApplication {	public static void main(String[] args) {		SpringApplication app = new SpringApplication(ProfileApplication.class);		app.setAdditionalProfiles("dev");	// dev 或prod		app.run(args);	}}

application-dev.properties

## 属性占位符app.name=dev_spring_boot

application-prod.properties

## 属性占位符app.name=prod_spring_boot

application.properties

 
app.name=default_spring_bootapp.description=${app.name} is a Spring Boot application
## thymeleaf 配置 spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.mode=HTML5 spring.thymeleaf.encoding=UTF-8 spring.thymeleaf.content-type=text/html # set to false for hot refresh spring.thymeleaf.cache=false
## dev/prod,此demo在java代码中指定# spring.profiles.active=dev# spring.profiles.include=...

greeting.html

    Getting Started: Serving Web Content    

结果:

   如果profile启用”dev”,则app.name=dev_spring_boot,访问localhost:8080/profile被加载注入的bean是DevController。

转载于:https://www.cnblogs.com/VergiLyn/p/6536868.html

你可能感兴趣的文章
Magento CE使用Redis的配置过程
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Mac 下的Chrome 按什么快捷键调出页面调试工具
查看>>
Windows Phone开发(24):启动器与选择器之发送短信
查看>>
JS截取字符串常用方法
查看>>
Google非官方的Text To Speech和Speech Recognition的API
查看>>
stdext - A C++ STL Extensions Libary
查看>>
Django 内建 中间件组件
查看>>
bootstrap-Table服务端分页,获取到的数据怎么再页面的表格里显示
查看>>
进程间通信系列 之 socket套接字及其实例
查看>>
天气预报插件
查看>>
Unity 游戏框架搭建 (十三) 无需继承的单例的模板
查看>>
模块与包
查看>>
mysql忘记root密码
查看>>
apache服务器中设置目录不可访问
查看>>
嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
查看>>
【NOIP模拟】密码
查看>>
java容器---------手工实现Linkedlist 链表
查看>>
three.js 性能优化的几种方法
查看>>